<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[闲来无事]]></title><description><![CDATA[闲来无事，知识共享]]></description><link>https://blog.youkuaiyun.com/beyondself_77</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; beyondself_77]]></copyright><item><title><![CDATA[Disruptor源码分析（五）WaitStrategy]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/103427679</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/103427679</guid><author>beyondself_77</author><pubDate>Fri, 06 Dec 2019 18:10:28 +0800</pubDate><description><![CDATA[针对不同的应用场景，为了尽量提高处理性能，Disruptor提供了多种生产者和消费者之间的同步策略。

在此只对常用的四种同步策略的实现进行说明，其它实现不在详述。

BlockingWaitStrategy
BlockingWaitStrategy源码如下：


public final class BlockingWaitStrategy implements WaitStrategy
{
...]]></description><category></category></item><item><title><![CDATA[Disruptor源码分析（四）Sequencer]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/103427647</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/103427647</guid><author>beyondself_77</author><pubDate>Fri, 06 Dec 2019 18:07:58 +0800</pubDate><description><![CDATA[针对不同的应用场景，为了尽量提高处理性能，Disruptor提供了SingleProducerSequencer和MultiProducerSequencer两种sequencer，分别对应单生产者模式和多生产者模式。

SingleProducerSequencer
在单生产者模式中，由于只有一个生产者，所以在获取下一个可用序列号时，不会存在多线程竞争的情况，所以直接用一个long类型变量nex...]]></description><category></category></item><item><title><![CDATA[Disruptor源码分析（三）Sequence]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/103427623</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/103427623</guid><author>beyondself_77</author><pubDate>Fri, 06 Dec 2019 18:06:02 +0800</pubDate><description><![CDATA[Sequence是RingBuffer中一个很重要的类，它就是指我们用来发布事件的递增序列号，只不过为了更好的使用Disruptor对其做了进一步的封装。


public class Sequence extends RhsPadding
{
    static final long INITIAL_VALUE = -1L;
    private static final Unsafe UN...]]></description><category></category></item><item><title><![CDATA[Disruptor源码分析（二）RingBuffer]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/103427564</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/103427564</guid><author>beyondself_77</author><pubDate>Fri, 06 Dec 2019 18:04:45 +0800</pubDate><description><![CDATA[RingBuffer，从字面上看，它是一个环形缓冲队列。实际上，它不是一个队列，因为它不具备队列的特性，比如FIFO等。

RingBuffer本身是一个数组，之所以说它是环形队列，因为它通过算法维持了一个类似环形队列的数据结构。



上图是对RingBuffer的一个抽象描述。

假定一个8个槽的RingBuffer，则本质上是一个长度为8的数组，那如何模拟一个环形队列呢？

通过序列号（se...]]></description><category></category></item><item><title><![CDATA[Disruptor源码分析（一）概述]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/103427530</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/103427530</guid><author>beyondself_77</author><pubDate>Fri, 06 Dec 2019 18:00:05 +0800</pubDate><description><![CDATA[此系列关于Disruptor源码分析，主要是自己在使用Disruptor过程中，对于一些自认为比较关键的设计的总结，供自己以后使用。所以，没有花费太大的篇幅进行详细的说明。

在此发布出来，供大家参考。

由于时间紧迫，所以可能存在错误的地方，欢迎指出。

Disruptor主要类图如下：


...]]></description><category></category></item><item><title><![CDATA[剖析Disruptor:为什么会这么快？(四)揭秘内存屏障]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/103386019</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/103386019</guid><author>beyondself_77</author><pubDate>Wed, 04 Dec 2019 14:29:15 +0800</pubDate><description><![CDATA[作者：Martin Thompson 译者：丁一

最近我博客文章更新有点慢，因为我在忙着写一篇介绍内存屏障（Memory Barries）以及如何将其应用于Disruptor的文章。问题是，无论我翻阅了多少资料，向耐心的Martin和Mike请教了多少遍，以试图理清一些知识点，可我总是不能直观地抓到重点。大概是因为我不具备深厚的背景知识来帮助我透彻理解。

所以，与其像个傻瓜一样试图去解释一些...]]></description><category></category></item><item><title><![CDATA[剖析Disruptor:为什么会这么快？(三)伪共享]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/103385858</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/103385858</guid><author>beyondself_77</author><pubDate>Wed, 04 Dec 2019 14:22:52 +0800</pubDate><description><![CDATA[作者：Martin Thompson 译者：丁一

缓存系统中是以缓存行（cache line）为单位存储的。缓存行是2的整数幂个连续字节，一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时，如果这些变量共享同一个缓存行，就会无意中影响彼此的性能，这就是伪共享。缓存行上的写竞争是运行在SMP系统中并行线程实现可伸缩性最重要的限制因素。有人将伪共享描述成无声的性...]]></description><category></category></item><item><title><![CDATA[剖析Disruptor:为什么会这么快？（二）神奇的缓存行填充]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/103385754</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/103385754</guid><author>beyondself_77</author><pubDate>Wed, 04 Dec 2019 14:16:56 +0800</pubDate><description><![CDATA[作者：Martin Thompson 译者：丁一

我们经常提到一个短语Mechanical Sympathy，这个短语也是Martin博客的标题（译注：Martin Thompson），Mechanical Sympathy讲的是底层硬件是如何运作的，以及与其协作而非相悖的编程方式。

我在上一篇文章中提到RingBuffer后，我们收到一些关于RingBuffer中填充高速缓存行的评论和疑问...]]></description><category></category></item><item><title><![CDATA[剖析Disruptor:为什么会这么快？(一)锁的缺点]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/103385545</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/103385545</guid><author>beyondself_77</author><pubDate>Wed, 04 Dec 2019 14:09:37 +0800</pubDate><description><![CDATA[作者：Trisha’s 译者：张文灼，潘曦整理和校对：方腾飞，丁一

Martin Fowler写了一篇非常好的文章，里面不仅提到了Disruptor,而且还解释了Disruptor如何应用在LMAX的架构里。里面有提及了一些目前没有涉及的概念，但最经常问到的问题是“Disruptor究竟是什么?＂。

目前我正准备在回答这个问题，但首先回答＂为什么它会这么快?＂

这些问题持续出现，但是...]]></description><category></category></item><item><title><![CDATA[RocketMQ之Broker线程模型]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/88812730</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/88812730</guid><author>beyondself_77</author><pubDate>Tue, 26 Mar 2019 09:51:01 +0800</pubDate><description><![CDATA[1.概述

RocketMQ是阿里开源的一款高性能、高吞吐量的分布式消息中间件，具有以下特点：

1、能够保证严格的消息顺序；

2、提供丰富的消息拉取模式；

3、高效的订阅者水平扩展能力；

4、实时的消息订阅机制；

5、亿级消息堆积能力。

网上关于RocketMQ各方面（如RPC通信、消息存储、消费发送、消息消费等）的介绍非常多，也比较详细，本文在此就不重复了，感兴趣的同学可以百度一下。...]]></description><category></category></item><item><title><![CDATA[基于SpringCloud 2开发的微服务基础框架SCB（Spring Cloud Base）]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/83185640</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/83185640</guid><author>beyondself_77</author><pubDate>Fri, 19 Oct 2018 18:09:00 +0800</pubDate><description><![CDATA[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

  ...]]></description><category></category></item><item><title><![CDATA[SOFA RPC源码解析之RPC服务发布、引用、调用和响应流程]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/81072907</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/81072907</guid><author>beyondself_77</author><pubDate>Mon, 16 Jul 2018 22:57:24 +0800</pubDate><description><![CDATA[1. SOFA RPC源码解析

1.1 SOFA RPC服务发布、引用、调用和响应流程

1.1.1 服务发布流程



   对于不同类型的SOFABoot服务，如Jvm服务、Rest服务、Bolt服务或Dubbo服务，服务发布的主流程如下：

   1. 定义SOFABoot服务：

在SpringXML文件中使用标签sofa-service定义服务；
	在Java类中使用注解@SofaSe...]]></description><category></category></item><item><title><![CDATA[SOFA BOLT源码解析之概述]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/81025532</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/81025532</guid><author>beyondself_77</author><pubDate>Fri, 13 Jul 2018 10:32:27 +0800</pubDate><description><![CDATA[1  概述        关于SOFA Bolt的文档来自于Alipay开源社区，链接地址为：        https://github.com/alipay/sofa-bolt        https://github.com/alipay/sofa-bolt/wiki/SOFA-Bolt-Handbook        此处直接引用该文档内容，主要是便于大家理解源码解析部分。1.1  介绍...]]></description><category></category></item><item><title><![CDATA[SOFA BOLT源码解析之设计要点-网络IO]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/81025740</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/81025740</guid><author>beyondself_77</author><pubDate>Fri, 13 Jul 2018 10:31:57 +0800</pubDate><description><![CDATA[1  设计要点解析        SOFA Bolt作为基础通信层，其功能在设计和实现的过程中，主要从以下几个方面考虑：        1.   网络IO；        2.   线程模型；        3.   通信模型；        4.   连接管理；        5.   批量解包和批量提交；        6.   事件触发和监听机制；        7.   全双工通信；   ...]]></description><category></category></item><item><title><![CDATA[SOFA BOLT源码解析之设计要点-线程模型]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/81025936</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/81025936</guid><author>beyondself_77</author><pubDate>Fri, 13 Jul 2018 10:30:28 +0800</pubDate><description><![CDATA[1.设计要点解析1.1  线程模型        此部分内容主要介绍蚂蚁为什么选择Netty4作为基础网络编程框架，来源于蚂蚁技术团队发布的一篇文章：        文章名称为：蚂蚁通信框架实践；        链接地址为：https://mp.weixin.qq.com/s/JRsbK1Un2av9GKmJ8DK7IQ?        此处引用该文章的内容，主要是想让大家更好的理解SOFA Bo...]]></description><category></category></item><item><title><![CDATA[SOFA BOLT源码解析之设计要点-通信模型]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/81026251</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/81026251</guid><author>beyondself_77</author><pubDate>Fri, 13 Jul 2018 10:29:25 +0800</pubDate><description><![CDATA[1. 设计要点解析1.1  通信模型        SOFA Bolt当前支持四种通信模型：        ●  oneway：单向调用。单向调用不会阻塞请求线程，不关心响应。但是，使用时需要注意控制调用频率和节奏，防止压垮接收方；        ●  sync：同步调用。同步调用会阻塞请求线程，待响应返回后才能进行下一个请求。这是最常用的一种通信模型；        ●  future：futu...]]></description><category></category></item><item><title><![CDATA[SOFA BOLT源码解析之设计要点-连接管理]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/81026750</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/81026750</guid><author>beyondself_77</author><pubDate>Fri, 13 Jul 2018 10:28:22 +0800</pubDate><description><![CDATA[1. 设计要点解析1.1  连接管理        为了提高通信效率，我们需要考虑复用连接，减少TCP三次握手的次数，因此需要完善的连接管理的机制。        另外，在业务通信场景中，还需要识别一些不得不走硬负载（比如 LVS VIP）的场景，此时如果只建立单链接，可能会出现负载不均衡的问题，因此需要建立多个连接，来缓解负载不均的问题。        为此，SOFA Bolt设计了一个针对某个...]]></description><category></category></item><item><title><![CDATA[SOFA BOLT源码解析之设计要点-通信协议]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/81027204</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/81027204</guid><author>beyondself_77</author><pubDate>Fri, 13 Jul 2018 10:27:39 +0800</pubDate><description><![CDATA[1. 设计要点解析1.1  通信协议        SOFA Bolt定义了两个版本的私有通信协议，即V1版和V2版。        此处以V2版为例，详细描述一下私有通信协议的设计。        一、  RpcProctocolV2请求协议格式如下：        RpcProctocolV2请求协议字段：        1.   proto：协议码ProtocolCode。如果一个端口，需要...]]></description><category></category></item><item><title><![CDATA[SOFA RPC源码解析之Rest服务（4）-服务端响应]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/80862865</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/80862865</guid><author>beyondself_77</author><pubDate>Fri, 29 Jun 2018 23:28:57 +0800</pubDate><description><![CDATA[1 SOFA RPC源码解析1.1 Rest服务1.1.1  服务端响应        在前文介绍SOFA RPC Rest服务发布过程的文章中，我们知道对于rest类型绑定，SOFA采用com.alipay.sofa.rpc.server.rest.SofaNettyJaxrsServer作为服务器。SofaNettyJaxrsServer采用Netty4作为网络通讯层。        看一下S...]]></description><category></category></item><item><title><![CDATA[SOFA RPC源码解析之Rest服务（3）-客户端调用]]></title><link>https://blog.youkuaiyun.com/beyondself_77/article/details/80862734</link><guid>https://blog.youkuaiyun.com/beyondself_77/article/details/80862734</guid><author>beyondself_77</author><pubDate>Fri, 29 Jun 2018 23:17:58 +0800</pubDate><description><![CDATA[1.SOFA RPC源码解析1.1Rest服务1.1.1 客户端调用        当我们在SpringXML文件中使用sofa:reference引用服务以后，我们就可以在其它类中引用创建的指定接口的代理对象，并像调用本地Java类那样，调用接口的某个方法。        以下通过在Spring应用上下文中按照名字personReferenceRest查找com.alipay.sofa.boot...]]></description><category></category></item></channel></rss>