LMAX Disruptor——一个高性能、低延迟且简单的框架

原文地址:LMAX Disruptor – High Performance, Low Latency and Simple Too 翻译:杨帆 校对:丁一

Disruptor是一个用于在线程间通信的高效低延时的消息组件,它像个增强的队列,并且它是让LMAX Exchange跑的如此之快的一个关键创新。关于什么是Disruptor、为何它很重要以及它的工作原理方面的信息都呈爆炸性增长 —— 这些文章很适合开始学习Disruptor,还可跟着LMAX BLOG深入学习。这里还有一份更详细的白皮书

虽然disruptor模式使用起来很简单,但是建立多个消费者以及它们之间的依赖关系需要的样板代码太多了。为了能快速又简单适用于99%的场景,我为Disruptor模式准备了一个简单的领域特定语言。例如,为建立一个消费者的“四边形模式”:

(从Trisha Gee’s excellent series explaining the disruptor pattern偷来的图片)

在这种情况下,只要生产者(P1)将元素放到ring buffer上,消费者C1和C2就可以并行处理这些元素。但是消费者C3必须一直等到C1和C2处理完之后,才可以处理。在现实世界中的对应的案例就像:在处理实际的业务逻辑(C3)之前,需要校验数据(C1),以及将数据写入磁盘(C2)。

用原生的Disruptor语法来创建这些消费者的话代码如下:

查看源代码

打印帮助

01 Executor executor = Executors.newCachedThreadPool();
02 BatchHandler handler1 = new MyBatchHandler1();
03 BatchHandler handler2 = new MyBatchHandler2();
04 BatchHandler handler3 = new MyBatchHandler3()
05 RingBuffer ringBuffer = new RingBuffer(ENTRY_FACTORY, RING_BUFFER_SIZE);
06 ConsumerBarrier consumerBarrier1 = ringBuffer.createConsumerBarrier();
07 BatchConsumer consumer1 = new BatchConsumer(consumerBarrier1, handler1);
08 BatchConsumer consumer2 = new BatchConsumer(consumerBarrier1, handler2);
09 ConsumerBarrier consumerBarrier2 =
10 ringBuffer.createConsumerBarrier(consumer1, consumer2);
11 BatchConsumer consumer3 = new BatchConsumer(consumerBarrier2, handler3);
12 executor.execute(consumer1);
13 executor.execute(consumer2);
14 executor.execute(consumer3);
15 ProducerBarrier producerBarrier =
16 ringBuffer.createProducerBarrier(consumer3);

在以上这段代码中,我们不得不创建那些个handler(就是那些个MyBatchHandler实例),外加消费者屏障,BatchConsumer实例,然后在他们各自的线程中处理这些消费者。DSL能帮我们完成很多创建工作,最终的结果如下:

查看源代码

打印帮助

1 Executor executor = Executors.newCachedThreadPool();
2 BatchHandler handler1 = new MyBatchHandler1();
3 BatchHandler handler2 = new MyBatchHandler2();
4 BatchHandler handler3 = new MyBatchHandler3();
5 DisruptorWizard dw = new DisruptorWizard(ENTRY_FACTORY,
6     RING_BUFFER_SIZE, executor);
7 dw.consumeWith(handler1, handler2).then(handler3);
8 ProducerBarrier producerBarrier = dw.createProducerBarrier();

我们甚至可以在一个更复杂的六边形模式中构建一个并行消费者链:

查看源代码

打印帮助

1 dw.consumeWith(handler1a, handler2a);
2 dw.after(handler1a).consumeWith(handler1b);
3 dw.after(handler2a).consumeWith(handler2b);
4 dw.after(handler1b, handler2b).consumeWith(handler3);
5 ProducerBarrier producerBarrier = dw.createProducerBarrier();

这个领域特定语言刚刚诞生不久,欢迎任何反馈,也欢迎大家从github上fork并改进它。 

时间: 2024-08-12 00:45:56

LMAX Disruptor——一个高性能、低延迟且简单的框架的相关文章

5G比4G强在哪?高性能、低延迟与高容量

在2015年的MWC上国内外厂商纷纷展示各自在5G上的进展之后,5G就瞬间成为了业界的讨论的焦点,在媒体竭尽溢美之词的同时,芯片商.通信设备商以及电信运营商无一例外开始倾其所有布局下一代通信技术,目的就是抢占话语权. 对于数消费者而言,5G的价值在于它拥有比4G LTE更快的速度(峰值速率可达几十Gbps),例如你可以在一秒钟内下载一部高清电影,而4G LTE可能要10分钟.也正是因为这一得天独厚的优势,业界普遍认为5G将在无人驾驶汽车.VR以及物联网等领域发挥重要作用. 和4G相比,5G的提升

Sparrow: 适用于细粒度tasks低延迟调度的去中心化无状态分布式调度器

背景介绍 Sparrow的论文收录在SOSP 2013,在网上还可以找到一份作者的talk ppt,值得一提的是作者是位PPMM.她之前发表过一篇The Case for Tiny Tasks in Compute Clusters,这篇文章我没有仔细看过,但是当时在看mesos粗细粒度模式的时候,组里有讨论过这篇论文.再结合她的github上的项目,发现她和AMP实验室里Mesos,spark等项目,在研究方向和合作上还是有很多渊源的.透过Sparrow,结合对Mesos.YARN的一些了解,

一个高性能、轻量级的分布式内存队列系统--beanstalk

Beanstalk是一个高性能.轻量级的.分布式的.内存型的消息队列系统.最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟.其实Beanstalkd是典型的类Memcached设计,协议和使用方式都是同样的风格.其基本设计思想很简单:高性能离不开异步,异步离不开队列,而内部都是生产者-消费者模式的. 背景介绍: 现在市面上有很多消息队列系统了.常用的有ActiveMQ, RabbitMQ,ZeroMA,Kafka,RocketMQ.Redis之父最近又开源了一

大数据实例:高负载低延迟动态算法解析

本文讲的是大数据实例:高负载低延迟动态算法解析,这篇文章由Datasalt的创始人Ivan de Prado和Pere Ferrera提供,Datasalt是一家专注于大数据的公司,推出了Pangool和Spoilt SQL Big Data等开源项目.在这篇文章中,通过BBVA信用卡支付的例子详解了云计算中的低延时方案. 以下为文章全文: 使用信用卡进行支付的款项是巨大的,但是很明显,通过分析所有的交易,我们也可以从数据中得到内在的价值.比如客户忠诚度.人口统计数据.活动的受欢迎程度.商店的建

浅析数据中心低延迟网络设备技术

网络延迟指一个数据包从用户的计算机发送到网站服务器,然后再立即从网站服务器返回用户计算机的来回时间.在这个过程中包括:计算机网卡.网络设备.链路.服务器组成部分,每个部分转发数据流量都要消耗时间,所有部分消耗的时间加起来就是延迟.延迟越低,自然网络性能越好,响应速度快.比如过年抢火车票,有人家里装了100M的带宽或者使用了4G手机,就容易抢到,因为骨干网上速度都差不多,但最后到个人用户那里就因网而异,响应速度快就要比别人先抢到.所以在游戏.证券期货交易.计算中心和很多科技公司等这些地方对网络延时

Tair是一个高性能,分布式,可扩展,高可靠的key/value结构存储系统(转)

Tair是一个高性能,分布式,可扩展,高可靠的key/value结构存储系统! Tair专为小文件优化,并提供简单易用的接口(类似Map)Tair支持Java和C版本的客户端   Tair is a distributed key-value storage system originally developed at Taobao.com. features: simple client configuration thanks to lightweight config server ite

Yii一个高性能的、基于组件的PHP框架

本文将通过具体的实例对 Yii 框架进行阐述,使读者在真实的案例中去学习如何使用 Yii 框架创建自己的 Web 应用,从而对这个优秀的 PHP 框架有个更真实的体验. Yii 是什么? Yii 是一个高性能的.基于组件的 PHP 框架,用于 Web 应用程序的快速开发. Yii 的名字来源于"Yes It Is"的字母缩写.这句话肯定地回答了众多关于这个框架的疑问:"它是否快速?是否安全?是否强大?是否适合我们的项目?" Yii 适合做什么? Yii 是一个通用的

整体市场繁荣显现,但门槛低、模式简单等因素导致团购网站数量直线上升,行业内部竞争激烈

根据艾瑞咨询今年3月发布的<2011年1月中国团购网站排行榜>显示,在1月份,中国团购网站总月度覆盖人数在2011年1月达到1.38亿人.可以说,对用户许以超低折扣.对商家许以直接完成交易的团购网站,借助清晰直接的商业模式增长迅速,成为2010年电子商务的热点.团购行业可谓风生水起.虽然整体市场繁荣显现,但门槛低.模式简单等因素导致团购网站数量直线上升,行业内部竞争激烈,"千团大战"也是愈演愈烈.这边厢团购广告大战正激烈进行,那边厢萧瑟的裁员之风已吹起.风生水起的团购业,何

从车联网到工业4.0 智慧应用关键──5G 通讯的低延迟与可靠度

智能车,或是更进阶的无人驾驶车,一直都是近几年资通讯大展的亮点.汉诺威电子展(Cebit)早在 2008 年就新增了汽车电子展区,包含 Benz 与 BMW 同时也在该年展出了未来信息(IT)概念车,首次将传统汽车业结合信息通讯技术.现在的信息通讯大展已不再只限传统信息通讯业者如 Apple 或 Google 参展,更多的是汽车业者加入.而在大厂动向方面,高通并购了恩智浦(NXP).英特尔最近并购了 Mobileye,都是看中未来汽车电子的潜力. 电动.智能车载及工业 4.0,成下个明星产业 推