- 博客(46)
- 资源 (13)
- 收藏
- 关注
原创 Disruptor源码分析(五)WaitStrategy
针对不同的应用场景,为了尽量提高处理性能,Disruptor提供了多种生产者和消费者之间的同步策略。在此只对常用的四种同步策略的实现进行说明,其它实现不在详述。BlockingWaitStrategyBlockingWaitStrategy源码如下:public final class BlockingWaitStrategy implements WaitStrategy{...
2019-12-06 18:10:28
1979
原创 Disruptor源码分析(四)Sequencer
针对不同的应用场景,为了尽量提高处理性能,Disruptor提供了SingleProducerSequencer和MultiProducerSequencer两种sequencer,分别对应单生产者模式和多生产者模式。SingleProducerSequencer在单生产者模式中,由于只有一个生产者,所以在获取下一个可用序列号时,不会存在多线程竞争的情况,所以直接用一个long类型变量nex...
2019-12-06 18:07:58
998
原创 Disruptor源码分析(三)Sequence
Sequence是RingBuffer中一个很重要的类,它就是指我们用来发布事件的递增序列号,只不过为了更好的使用Disruptor对其做了进一步的封装。public class Sequence extends RhsPadding{ static final long INITIAL_VALUE = -1L; private static final Unsafe UN...
2019-12-06 18:06:02
647
原创 Disruptor源码分析(二)RingBuffer
RingBuffer,从字面上看,它是一个环形缓冲队列。实际上,它不是一个队列,因为它不具备队列的特性,比如FIFO等。RingBuffer本身是一个数组,之所以说它是环形队列,因为它通过算法维持了一个类似环形队列的数据结构。上图是对RingBuffer的一个抽象描述。假定一个8个槽的RingBuffer,则本质上是一个长度为8的数组,那如何模拟一个环形队列呢?通过序列号(se...
2019-12-06 18:04:45
1031
原创 Disruptor源码分析(一)概述
此系列关于Disruptor源码分析,主要是自己在使用Disruptor过程中,对于一些自认为比较关键的设计的总结,供自己以后使用。所以,没有花费太大的篇幅进行详细的说明。在此发布出来,供大家参考。由于时间紧迫,所以可能存在错误的地方,欢迎指出。Disruptor主要类图如下:...
2019-12-06 18:00:05
599
转载 剖析Disruptor:为什么会这么快?(四)揭秘内存屏障
作者:Martin Thompson 译者:丁一最近我博客文章更新有点慢,因为我在忙着写一篇介绍内存屏障(Memory Barries)以及如何将其应用于Disruptor的文章。问题是,无论我翻阅了多少资料,向耐心的Martin和Mike请教了多少遍,以试图理清一些知识点,可我总是不能直观地抓到重点。大概是因为我不具备深厚的背景知识来帮助我透彻理解。所以,与其像个傻瓜一样试图去解释一些...
2019-12-04 14:29:15
225
转载 剖析Disruptor:为什么会这么快?(三)伪共享
作者:Martin Thompson 译者:丁一缓存系统中是以缓存行(cache line)为单位存储的。缓存行是2的整数幂个连续字节,一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。缓存行上的写竞争是运行在SMP系统中并行线程实现可伸缩性最重要的限制因素。有人将伪共享描述成无声的性...
2019-12-04 14:22:52
242
转载 剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充
作者:Martin Thompson 译者:丁一我们经常提到一个短语Mechanical Sympathy,这个短语也是Martin博客的标题(译注:Martin Thompson),Mechanical Sympathy讲的是底层硬件是如何运作的,以及与其协作而非相悖的编程方式。我在上一篇文章中提到RingBuffer后,我们收到一些关于RingBuffer中填充高速缓存行的评论和疑问...
2019-12-04 14:16:56
163
转载 剖析Disruptor:为什么会这么快?(一)锁的缺点
作者:Trisha’s 译者:张文灼,潘曦整理和校对:方腾飞,丁一Martin Fowler写了一篇非常好的文章,里面不仅提到了Disruptor,而且还解释了Disruptor如何应用在LMAX的架构里。里面有提及了一些目前没有涉及的概念,但最经常问到的问题是“Disruptor究竟是什么?"。目前我正准备在回答这个问题,但首先回答"为什么它会这么快?"这些问题持续出现,但是...
2019-12-04 14:09:37
243
原创 RocketMQ之Broker线程模型
1.概述RocketMQ是阿里开源的一款高性能、高吞吐量的分布式消息中间件,具有以下特点:1、能够保证严格的消息顺序;2、提供丰富的消息拉取模式;3、高效的订阅者水平扩展能力;4、实时的消息订阅机制;5、亿级消息堆积能力。网上关于RocketMQ各方面(如RPC通信、消息存储、消费发送、消息消费等)的介绍非常多,也比较详细,本文在此就不重复了,感兴趣的同学可以百度一下。...
2019-03-26 09:51:01
4531
3
原创 基于SpringCloud 2开发的微服务基础框架SCB(Spring Cloud Base)
0 序言 本文简述了SCB,一个基于SpringCloud 2开发的微服务基础框架SCB(Spring Cloud Base)。 SCB主要组件版本: 1、Spring Boot:2.0.3.RELEASE 2、SpringCloud:Finchley.RELEASE 3、Spring Cloud Gateway:2.0.1 ...
2018-10-19 18:09:00
1827
原创 SOFA RPC源码解析之RPC服务发布、引用、调用和响应流程
1. SOFA RPC源码解析1.1 SOFA RPC服务发布、引用、调用和响应流程1.1.1 服务发布流程 对于不同类型的SOFABoot服务,如Jvm服务、Rest服务、Bolt服务或Dubbo服务,服务发布的主流程如下: 1. 定义SOFABoot服务:在SpringXML文件中使用标签sofa-service定义服务; 在Java类中使用注解@SofaSe...
2018-07-16 22:57:24
9404
1
原创 SOFA BOLT源码解析之概述
1 概述 关于SOFA Bolt的文档来自于Alipay开源社区,链接地址为: https://github.com/alipay/sofa-bolt https://github.com/alipay/sofa-bolt/wiki/SOFA-Bolt-Handbook 此处直接引用该文档内容,主要是便于大家理解源码解析部分。1.1 介绍...
2018-07-13 10:32:27
2282
1
原创 SOFA BOLT源码解析之设计要点-网络IO
1 设计要点解析 SOFA Bolt作为基础通信层,其功能在设计和实现的过程中,主要从以下几个方面考虑: 1. 网络IO; 2. 线程模型; 3. 通信模型; 4. 连接管理; 5. 批量解包和批量提交; 6. 事件触发和监听机制; 7. 全双工通信; ...
2018-07-13 10:31:57
910
原创 SOFA BOLT源码解析之设计要点-线程模型
1.设计要点解析1.1 线程模型 此部分内容主要介绍蚂蚁为什么选择Netty4作为基础网络编程框架,来源于蚂蚁技术团队发布的一篇文章: 文章名称为:蚂蚁通信框架实践; 链接地址为:https://mp.weixin.qq.com/s/JRsbK1Un2av9GKmJ8DK7IQ? 此处引用该文章的内容,主要是想让大家更好的理解SOFA Bo...
2018-07-13 10:30:28
1281
原创 SOFA BOLT源码解析之设计要点-通信模型
1. 设计要点解析1.1 通信模型 SOFA Bolt当前支持四种通信模型: ● oneway:单向调用。单向调用不会阻塞请求线程,不关心响应。但是,使用时需要注意控制调用频率和节奏,防止压垮接收方; ● sync:同步调用。同步调用会阻塞请求线程,待响应返回后才能进行下一个请求。这是最常用的一种通信模型; ● future:futu...
2018-07-13 10:29:25
1743
1
原创 SOFA BOLT源码解析之设计要点-连接管理
1. 设计要点解析1.1 连接管理 为了提高通信效率,我们需要考虑复用连接,减少TCP三次握手的次数,因此需要完善的连接管理的机制。 另外,在业务通信场景中,还需要识别一些不得不走硬负载(比如 LVS VIP)的场景,此时如果只建立单链接,可能会出现负载不均衡的问题,因此需要建立多个连接,来缓解负载不均的问题。 为此,SOFA Bolt设计了一个针对某个...
2018-07-13 10:28:22
1823
原创 SOFA BOLT源码解析之设计要点-通信协议
1. 设计要点解析1.1 通信协议 SOFA Bolt定义了两个版本的私有通信协议,即V1版和V2版。 此处以V2版为例,详细描述一下私有通信协议的设计。 一、 RpcProctocolV2请求协议格式如下: RpcProctocolV2请求协议字段: 1. proto:协议码ProtocolCode。如果一个端口,需要...
2018-07-13 10:27:39
3141
原创 SOFA RPC源码解析之Rest服务(4)-服务端响应
1 SOFA RPC源码解析1.1 Rest服务1.1.1 服务端响应 在前文介绍SOFA RPC Rest服务发布过程的文章中,我们知道对于rest类型绑定,SOFA采用com.alipay.sofa.rpc.server.rest.SofaNettyJaxrsServer作为服务器。SofaNettyJaxrsServer采用Netty4作为网络通讯层。 看一下S...
2018-06-29 23:28:57
1183
原创 SOFA RPC源码解析之Rest服务(3)-客户端调用
1.SOFA RPC源码解析1.1Rest服务1.1.1 客户端调用 当我们在SpringXML文件中使用sofa:reference引用服务以后,我们就可以在其它类中引用创建的指定接口的代理对象,并像调用本地Java类那样,调用接口的某个方法。 以下通过在Spring应用上下文中按照名字personReferenceRest查找com.alipay.sofa.boot...
2018-06-29 23:17:58
2086
原创 SOFA RPC源码解析之Rest服务(2)-服务引用
1.SOFA RPC源码解析1.1Rest服务1.1.1 服务引用 以SOFABoot自带的RPC案例sofaboot-sample-with-rpc为例,详细描述SOFABoot服务发布原理。 在此提前说明,源码分析主要分析主流程,以及本人认为比较重要的一些内容,对于其它部分,大家可以基于本文档,自行研读。 RPC案例的SpringXML配置文件内容如下...
2018-06-29 22:59:38
1284
原创 SOFA RPC源码解析之Rest服务(1)-服务发布
1.SOFA RPC源码解析1.1 Rest服务1.1.1 服务发布 以SOFABoot自带的RPC案例sofaboot-sample-with-rpc为例,详细描述SOFABoot Rest服务发布原理。 在此提前说明,源码分析主要分析主流程,以及本人认为比较重要的一些内容,对于其它部分,大家可以基于本文档,自行研读。 RPC案例的SpringXML配...
2018-06-29 22:28:30
3445
原创 SOFABoot源码解析之JVM服务代理机制
1.SOFABoot源码解析1.1 JVM服务代理机制 在SOFABoot中,采用AOP代理方式为JVM服务引用创建本地代理对象。对于AOP代理,主要有两种实现方式: 1. 针对实现接口的类,采用JDK动态代理机制; 2. 针对没有实现接口的类,采用CGLIB动态代理机制; 在SOFABoot中,对于JVM服务类型的服务引用,即可以...
2018-06-29 22:08:53
839
原创 SOFA RPC源码解析之RPC代理机制
1.SOFA RPC源码解析1.1 RPC代理机制 在SOFA RPC中,服务引用采用代理模式把本地方法调用转换为远程服务调用,从而使开发者像使用本地Java方法一样,使用远程服务,屏蔽了底层的网络通讯细节,使开发人员把精力集中在业务开发中。 简单回顾一下代理模式,以便大家理解SOFA RPC中代理机制的实现方式。 代理模式是常用的设计模...
2018-06-29 21:58:49
1647
原创 SOFA RPC源码解析之FilterChain
1.SOFA RPC源码解析1.1 FilterChain 在SOFA RPC设计中,FilterChain是比较有新意的。它没有采用常用的List列表模式,即在List列表中存储Filter实现,然后按照Filter在列表中的顺序依次调用各Filter接口的filter方法,完成过滤器功能。 FilterChain简化类图如下: 首先,FilterCh...
2018-06-29 21:48:47
1353
原创 SOFA RPC源码解析之扩展机制ExtensionLoader
1.SOFA RPC源码解析1.1 扩展机制1.1.1 简述 SOFA RPC的扩展点加载机制是从JDK标准的SPI扩展点发现机制加强而来。 SPI,全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 SPI是上游产商给服务供应商提供的接口,供应商遵循接口契约提供自己的实现。供应商提供了服务接口的一...
2018-06-29 21:42:21
1167
原创 SOFA RPC源码解析之RPC配置
1.SOFA RPC源码解析1.1 RPC配置1.1.1 源码解析 在使用SOFA RPC的过程中,RPC相关的配置通过RpcConfigs实现。 RpcConfigs存在两个属性: 1. /**2. * 全部配置3. */4. private final staticConcurrentHashMap<String...
2018-06-29 21:28:50
3704
原创 SOFABoot源码解析之JVM服务
1.SOFABoot源码解析1.1 JVM服务1.1.1 服务发布 以SOFABoot自带的RPC案例sofaboot-sample-with-rpc为例,详细描述SOFABoot JVM服务发布过程。 在此提前说明,源码分析主要分析主流程,以及本人认为比较重要的一些内容,对于其它部分,大家可以基于本文档,自行研读。 RPC案例的SpringXML配置文...
2018-06-28 21:51:37
3684
1
原创 SOFABoot源码解析之模块化开发
1.SOFABoot源码解析1.1 模块化开发1.1.1 简述 关于SOFABoot模块化开发的文档来自于Alipay开源社区Wiki,链接地址为: https://github.com/alipay/sofa-boot/wiki/Modular-Development 此处直接引用该文档内容,主要是便于大家理解源码解析部分。1.1.1.1 模块化开发...
2018-06-28 18:29:55
3331
1
原创 SOFABoot源码解析之Readiness检查
SOFABoot在SpringBoot的Liveness检查能力的基础上,增加了Readiness检查能力。如果你需要使用SOFA中间件,那么建议使用SOFABoot的Readiness检查能力,来更优雅的上线应用实例。一、SpringBoot健康检查 SpringBootActuator帮助我们监控我们的SpringBoot项目。 SpringBoot...
2018-06-28 17:49:18
5115
原创 SOFABoot源码解析之日志空间隔离
一、简述 SOFABoot提供了日志空间隔离能力。 SOFABoot中间件能自动发现SOFABoot应用的日志实现依赖,并独立打印日志,解耦SOFABoot中间件日志和SOFABoot应用日志。 SOFABoot通过其sofa-common-tools包提供日志空间隔离功能。 首先看一下sofa-common-tools包中与日志空间隔离功能...
2018-06-28 17:02:12
3431
原创 SOFABoot源码解析之启动原理(2)-源码解析
以SOFABoot自带的RPC案例sofaboot-sample-with-rpc作为SOFABoot应用(其实也是SpringBoot应用)启动源码分析的案例。 在此提前说明,源码分析主要分析主流程,以及本人认为比较重要的一些内容,对于其它部分,大家可以基于本文档,自行研读。 在该案例中,采用WEB环境下使用的Spring应用上下文环境org.spri...
2018-06-27 22:05:07
1465
原创 SOFABoot源码解析之启动原理(1)-注解分析
SOFABoot是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 SpringBoot中非常方便地使用 SOFA 中间件的能力。 为了基于SOFABoot框架进行研发,建...
2018-06-27 22:04:40
3228
原创 微服务全链路解析
1、序言: 一提到微服务,大家马上想到微服务定义、微服务架构风格、各种微服务框架,如SpringCloud、Dubbo,ServiceMesh等。 本文从另一个角度,即服务全链路访问路径的角度,详细描述微服务架构中,从客户端发起请求到服务端接收、处理请求,并返回处理结果给客户端的整个访问路径,及相关应用服务器内部的线程处理模型、服务的线程处理模型等。了解服务的完整处理过...
2018-05-06 12:07:46
4879
原创 微服务架构设计实践系列之十:技术架构
微服务架构设计实践 目 次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4.4 技术架构4.4.4.1 技术架构定义 技术架构定义了实现整个系统所需的各种技术,包...
2018-04-07 23:03:05
36651
4
原创 微服务架构设计实践系列之十一:物理架构
微服务架构设计实践 目 次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4.5 物理架构4.4.5.1 物理架构定义 物理架构定义了“程序”如何映射(安装、部署或...
2018-04-07 22:58:49
14544
4
原创 微服务架构设计实践系列之十二:开发架构
微服务架构设计实践 目 次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4.6 开发架构4.4.6.1 开发架构定义 开发架构定义了软件开发环境中,软件模块的实际...
2018-04-07 22:56:50
10198
4
原创 微服务架构设计实践系列之九:应用架构
微服务架构设计实践 目 次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4.3 应用架构4.4.3.1 应用架构定义 应用架构定义了系统由哪些应用组成,以及应用之...
2018-04-07 22:56:37
14616
2
原创 微服务架构设计实践系列之八:数据架构
微服务架构设计实践 目 次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4.2 数据架构4.4.2.1 数据架构定义 数据架构定义了用来支持业务的各种数据,以及他...
2018-04-07 22:56:21
16218
4
原创 微服务架构设计实践之七:业务架构
微服务架构设计实践 目 次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 物理架构4.4.6 开发架构4.4 细化架构阶段4.4.1 业务架构4.4.1.1 业务架构定义 业务架构定义了软件的业...
2018-04-07 22:54:50
19225
1
Pmp Exam Preparation Study Guide - Project Communication Management
2009-02-02
AppFuse学习笔记
2009-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人