12年Java研发经验,8年技术管理和架构经验,熟悉支付和电商领域,擅长微服务生态建设,对Dubbo、Spring Cloud和gRPC等微服务框架有深入研究,并应用于项目,帮助过多家公司进行过微服务建设和改造 合著作品《深入分布式缓存》,目前正在编写《微服务架构实战》
暂时未有相关通用技术能力~
阿里云技能认证
详细说明如果-吉卜林作 图片发自简书App 如果,身边的人都失去理智,并将其归咎于你, 而你却能保持清醒; 如果,所有人都怀疑你,而你却能自信如常, 并体谅他们对你的怀疑; 如果,你能耐心等待,不急不躁, 或遭人诽谤憎恨,却不去以牙还牙; 既不去光彩照人,亦不去才华横溢。
Paste_Image.png 前言 对于一个程序员来讲如何来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我经常接触的一些程序员来看,他们买了很多技术重构类书籍,但是看完后代码编写能力并没有显著提高。
命令不断更新中...... Git的四个组成部分 75062926.png 1、初始化仓库 git init 2、将文件添加到仓库 git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被...
一、说在前面 基于微服务或者SOA的自动化测试系统每个公司都有自己的特有的,我今天就主要介绍一下,我们研发的一套mock测试系统。 二、目前面临的问题 1、测试人员面临的测试问题 我公司目前用的是基于Dubbo的微服务改造,服务之间的调用链路冗长,每个服务又是单独的团队在维护,每个团队又在不断的演进和维护各个服务,那么对测试人员将是非常大的挑战。
前言 一直对微服务非常感兴趣,因为公司的架构改造正好有机会能够接触微服务,买来一些书,请教了很多微服务大牛同时自己也做了很多总结,写成了80页ppt,算是我对微服务的一个认识吧,微服务本身不同的人有不同的理解,而我就从我自己的角度来谈谈微服务是什么。
一、引出热点key问题 我们通常使用 缓存 + 过期时间的策略来帮助我们加速接口的访问速度,减少了后端负载,同时保证功能的更新,一般情况下这种模式已经基本满足要求了。
最近一直在研究微服务有了一点小小的成果,前段时间给公司部门同事做了分享,在此将ppt发出来与大家分享。 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 ...
原文如下:http://martinfowler.com/articles/microservices.html 微服务### 一个新的架构术语 “微服务架构”一词是在过去几年里涌现出来的,它用于描述一种独立部署的软件应用设计方式。
受飞凡电商技术负责人刘兵先生的独家授权,在csdn博客我原创发表《NRedis-Proxy 高性能Redis 中间件服务》的架构原理,以及项目开源介绍。一、 NRedis-Proxy 介绍 NRedis-Proxy 是一个Redis中间件服务,第一个Java 版本开源Redis中间件,无须修改业务应用程序任何代码与配置,与业务解耦;以Spring为基础开发自定义标签,让它可配置化,使其更加容易上手;以netty 作为通信传输工具,让它具有高性能,高并发,可分布式扩展部署等特点,单片性能损耗约5%左右。
针对HotSpot VM的实现,它里面的GC其实准确分类只有两大种:Partial GC:并不收集整个GC堆的模式 Young GC:只收集young gen的GC Old GC:只收集old gen的GC。
JVM垃圾收集器.png
JAVA线程.png
堆外内存一直是Java业务开发人员难以企及的隐藏领域,究竟他是干什么的,以及如何更好的使用呢?那就请跟着我进入这个世界吧。 一、什么是堆外内存 1、堆内内存(on-heap memory)回顾 堆外内存和堆内内存是相对的二个概念,其中堆内内存是我们...
淘宝的Tedis组件究竟是个啥呢?可能有一些朋友没有听过这个名字,有一些朋友会经常使用,那么今天我就来和大家深入分析一下,它的使用和原理。 一、Tedis简介 Tedis是另一个redis的java客户端,Tedis的目标是打造一个可在生产环境直接使用的高可用Redis解决方案。
在我写这篇文章的时候,其实我还是挺纠结的,因为我这个方案本身也是雕虫小技拿出来显眼肯定会被贻笑大方,但是我最终还是拿出来与大家分享,我本着学习的态度和精神,希望大家能够给与我指导和改进方案。
今天让我们来谈谈代码吧。代码重要吗?当然,代码就是设计(Jack W.Reeves, 1992);代码是最有价值的交付物。我们需要好代码吗?在给“好代码”下个定义之前,这个问题无法回答。
前言 我们作为普通管理者,往往在识人,选人,用人,留人上面有非常多的困惑,下面我们将通过教练六篇来深入讲解。 一、人才篇 在我们真正用人的时候,需要明白人才的重要性才能用好人。
上一篇我们讲的是情商的五要素以及什么是三无管理者,本文将继续探讨,三无管理者如何进行团队的管理。(作为一名基层管理者如何利用情商管理自己和团队(一))http://www.jianshu.com/p/2e1e3d1adbc2 六、三无管理者管理五法![这里写图片描述] Paste_Image.png 作为三无管理者,我们不能从行政的角度去约束我们的团队,那可以依赖管理五法,说白了就是情商管理,以人性化的角度去管理团队。
注:本文原是采用视频与现场练习的方式进行分享,采用文字分享在内容上将会有一些缩减 在我们正式分享之前,先举一个我在团队中实验的案例来说明情商是什么。 我给团队中的每人都发了一张A4纸,我的要求是每人分别将纸对折二次,于是大家都去对折,我最后统计了一下,...
最近在工作中经常和性能压测工作打交道,积累了一些性能分析经验,我觉得这些经验对每一个开发者都有帮助的,能开发出性能高的代码也是我们的最终目标。 由易到难,我们逐步介绍不同命令的用法和好处,这些命令是如何帮助我们开发人员进行性能分析的。
一、问题产生背景 应用上线的时候,正常调用Tomcat的shutdown.sh脚本,事务执行一半异常提交。伪代码如下: @Override @Transactional(propagation = Propagation.
本文是“论代码级性能优化变迁之路一”(http://www.jianshu.com/p/c4a748002e66) 的第二篇。 在上一篇我们主要介绍了所遇到问题的五点,那么今天接下来讨论剩下的问题,我们先再回顾一下之前讨论的问题: 1、单台40TPS,加到4台服务器能到60TPS,扩展性几乎没有。
一、前言 大家好,很久没有和大家一起讨论技术了,那么今天我将和大家一起探讨我负责的某项目的性能变迁之路。 我们以前看到的很多架构变迁或者演进方面的文章大多都是针对架构方面的介绍,很少有针对代码级别的性能优化介绍,这就好比盖楼一样,楼房的基础架子搭的很好,但是盖房的工人不够专业,有很多需要注意的地方忽略了,那么在往里面填砖加瓦的时候出了问题,后果就是房子经常漏雨,墙上有裂缝等各种问题出现,虽然不至于楼房塌陷,但楼房也已经变成了危楼。
我们使用线程池的时候,经常使用默认的丢弃策略,那么我们也可以自定义策略,那么下面的文章可以看下。 在各种并发编程模型中,生产者-消费者模式大概是最常用的了。
我们在用缓存的时候,不管是Redis或者Memcached,基本上会通用遇到以下三个问题: 缓存穿透 缓存并发 缓存失效 一、缓存穿透 Paste_Image.png Paste_Image.png Paste_Image.png 注: 上面三个图会有什么问题呢? 我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。
一、简介 Ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案。
说明:本文不介绍如何使用Diamond,只介绍Diamond的实现原理 一、什么是Diamond diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单、可靠、易用,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理。
前段时间我们分享过玩转Flume+Kafka原来也就那点事儿和Flume-NG源码分析-整体结构及配置载入分析这二篇文章,主要介绍了flume的简单使用和配置文件加载的全过程,那么今天我们重点分析flume核心原理,从而了解Source、Channel和Sink的全链路过程。
弦外之音 很多朋友都在问我,经常看各种框架的源码会不会感到很枯燥,是什么东西在驱动着我一直看下去。其实我想说的很简单,作为一个程序员,不管你工作了多少年,能够经常学习和借鉴国内外优秀框架设计思想和程序架构,我想对我们来说是最直接的提高。
好久没有写分享了,继前一个系列进行了Kafka源码分享之后,接下来进行Flume源码分析系列,望大家继续关注,今天先进行开篇文章Flume+kafka的环境配置与使用。
这篇文章是作为:跟我学Kafka源码之Consumer分析 的补充材料,看过我们之前源码分析的同学可能知道。 本文将从客户端程序如何调用Consumer获取到最终Kafka消息的全过程以图解的方式作一个源码级别的梳理。
首先要特别感谢赵崇贺同学利用业余时间进行的压测,才能为本文提供专业的测试数据 一、测试环境准备 �Cpu �内存 硬盘 Intel(R) Xeon(R) CPU E5520 @ 2.
因为最近工作的关系,要把异步任务从应用服务器中拆分到专门的异步处理服务器中. 方案一 是采用MQ的方式将任务消息发出,在服务端进行处理,如下图所示: Sample Flowchart Template (2).png 这种方案是采用MQ作为中间的媒介,在服务端采用线程池异步处理任务,处理完成之后将结果发送到MQ中,客户端采用侦听的方式得到结果继续进行处理。
我们的kafka源码分享已经进行过很多期了,主要的内容也都分享的差不多了,那么那么在今后的分享中,主要集中在kafka性能优化和使用 Kafka集群中的其中一个Broker会被选举为Controller,主要负责Partition管理和副本状态管理,也会执行类似于重分配Partition之类的管理任务。
一、zookeeper存储结构总图 图片 当我们kafka启动运行以后,就会在zookeeper上初始化kafka相关数据,主要包括六大类: consumers admin config controller brokers controller_epoch 1、brokers节点结构说明 1.
很久没有做技术方面的分享了,今天闲来有空写一篇关于Kafka通信方面的文章与大家共同学习。 一、Kafka通信机制的整体结构 74EACA88-8B9D-45F8-B7BF-202D658205A9.png 这个图采用的就是我们之前提到的SEDA多线程模型,链接如下:http://www.jianshu.com/p/e184fdc0ade4 1、对于broker来说,客户端连接数量有限,不会频繁新建大量连接。
Round Robin 轮询调度算法 轮询调度(Round-Robin Scheduling) 轮询调度(Round Robin Scheduling)算法就是以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。
学习过[跟我学Kafka源码之LogManager分析]的同学一定会问为什么Kafka大量使用了磁盘作为传统意义的缓存。 其实Kafka最核心的思想是使用磁盘,而不是使用内存,可能所有人都会认为,内存的速度一定比磁盘快,我也不例外。
一、传统并发模型的缺点 基于线程的并发 特点:每任务一线程直线式的编程使用资源昂高,context切换代价高,竞争锁昂贵太多线程可能导致吞吐量下降,响应时间暴涨。
一、简单介绍 1、init-method方法,初始化bean的时候执行,可以针对某个具体的bean进行配置。init-method需要在applicationContext.xml配置文档中bean的定义里头写明。
1、前端使用 Twemproxy 做代理,后端的 Redis 数据能基本上根据 key 来进行比较均衡的分布。后端一台 Redis 挂掉后,Twemproxy 能够自动摘除。
一、CAS简介 CAS:Compare and Swap, 翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁,使用这些类在多核CPU的机器上会有比较好的性能. CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。
一、Kafka源代码的工程结构 如下图所示: 二、各模板简要说明 Xml代码 admin:管理员模块,操作和管理topic,paritions相关,包含create,delete topic,扩展patitions Api...
我的原文博客地址是:http://flychao88.iteye.com/blog/2266611 本章主要讲解分析Kafka的Producer的业务逻辑,分发逻辑和负载逻辑都在Producer中维护。
以下是kafka常用命令行总结: 1.查看topic的详细信息 ./kafka-topics.sh -zookeeper127.0.0.1:2181-describe -topic testKJ1 2、为topic增加副本 .
这一节咱们主要是讨论单机版的Kafka的简单使用,关于集群方面的东西其实也非常简单,具体可以参考Kafka官网进行配置既可。 1、准备Zookeeper环境我们使用的是zookeeper-3.5.0版本。
1、Broker配置 2.Consumer主要配置 3.Producer主要配置 以上是关于kafka配置文件一些基础说明,在其中我们知道如果要kafka正常运行,必须还要配置zookeeper。
Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
分布式一致性回顾 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。
SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现, 通过一个简单例子来说明SPI是如何使用的。