话题框架与类库 › Disruptor

框架与类库:Disruptor

Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。目前,包括Apache Storm、Camel、Log4j 2在内的很多知名项目都应用了Disruptor以获取高性能。

RTA实战之Disruptor队列

在RTA系统(信息流广告获客流量筛选环节)中我们遇到一个这样的场景:RTA请求的入参和决策过程以及结果都需要一条一条的记录至数据库中,方便业务人员进行后续的效果分析,但我们都知道,RTA系统是个动辄超过几十万QPS的特殊业务系统,也就意味着系统每秒需要处理超过几十万条请求记录。一般在这种场景下,我们首先会想到利用内存队列进行批处理操作,以便达到降低数据库QPS的压力,否则大量的请求直接打入至数据库,集群规模和压力都是不敢想象的。但这时候如果简单利用Java内置的内存队列(如ArrayBlockingQueue、ConcurrentLinkedQueue等),通过压测后我们会发现单机处理能力上不去,因为这些内存队列会直接压榨机器的性能,导致单机处理能力达不到预期的效果。所以这时候我们就想要去找一款比Java自带内存队列具备更优性能,更强大处理能力的内存队列,用以应对此种场景,提高我们的单机处理能力。

后来通过调研,参考了Log4j等一些知名的开源项目,里面用到了一款叫Disruptor的高性能内存队列,通过对它的调研和了解,发现很适合RTA系统的这个场景,我们以disruptor为中心构建超百亿的消息处理模型。

Disruptor在云音乐特征服务中的应用

我们在特征服务DataService中利用Disruptor替换线程池后试图解决机器cpu利用率不高,长尾请求延迟不线性等问题。本文简单介绍了一下对Disruptor的个人理解以及落地的结果。

A Bird’s-Eye View on Java Concurrency Frameworks

A few years ago, when NoSQL was trending, like every other team, our team was also enthusiastic about the new and exciting stuff; we were planning to change the database in one of the applications. But when we got into the finer details of the implementation, we remembered what a wise man once said, “the devil is in the details,” and eventually, we realized that NoSQL is not a silver bullet to fix all problems, and the answer to NoSQL VS RDMS was: “it depends.” Similarly, in the last year, concurrency libraries like RxJava and Spring Reactor were trending with enthusiastic statements, like the asynchronous, non-blocking approach is the way to go, etc. In order to not make the same mistake again, we tried to evaluate how concurrency frameworks like ExecutorService, RxJava, Disruptor, and Akka differ from one another and how to identify the right use case for respective frameworks.

你应该知道的高性能无锁队列Disruptor

听到队列相信大家对其并不陌生,在我们现实生活中队列随处可见,去超市结账,你会看见大家都会一排排的站得好好的,等待结账,为什么要站得一排排的,你想象一下大家都没有素质,一窝蜂的上去结账,不仅让这个超市崩溃,还会容易造成各种踩踏事件,当然这些事其实在我

Disruptor之概览

Diruptor概述“多核危机”驱动了并发编程的复兴,然后并发编程和一般的系统相比,复杂性有个很大梯度的上升。多线程开发很大困难在于:多个线程间存在依赖关系时,如何进行协调。依赖一方面是执行顺序的依赖,如某个线程执行需要依赖其他线程执行或其它线程的某些阶段执行结果,Java为我们提供的解决方案是:wait/notify、lock/condition、join、yield、Semaphore、Cou

剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充

这篇文章主要讨论了计算机底层硬件运作和编程方式。作者介绍了缓存行的概念,指出数据在缓存中以缓存行为单位存储,一个缓存行通常是64字节,并可以存储多个变量。作者提到,在访问一个数组时,加载一个值到缓存中会额外加载与之相邻的值,因此可以快速遍历数组或连续内存块中的数据结构。这个概念在之前关于环形缓冲区的文章中也提到过。这篇文章对于学过这些知识的人来说是一次复习,对于未学过的人来说是一个简单的介绍。

高性能队列——Disruptor

本文介绍Disruptor的实现原理。主要介绍了常用内存队列的缺陷,Disruptor针对缺陷进行的独特设计,以及优化后的性能对比。

disruptor学习分享

是什么? LMAX在线交易出品的一个高效的无锁并发框架它高效核心在于其无锁队列RingBuffer的独特设计。它可以用来进行线程之间的数据交互。 老生重谈:锁 并发编程中,为...

从Disruptor说起,聊聊锁的缺点以及优化方案

1、不使用锁,使用CAS。锁涉及到操作系统,而CAS是CPU级别,更快。

2、RingBuffer只需要一个序列号来保存下一个可用的空间,减小竞争。

3、Cache Line Padding。

Disruptor 源码阅读笔记

Disruptor 是一个高性能异步处理框架,也可以认为是一个消息框架,它实现了观察者模式。 Disruptor 比传统的基于锁的消息框架的优势在于:它是无锁的、CPU友好;它不会清除缓存中的数据,只会覆盖,降低了垃圾回收机制启动的频率。 这个解读是在最新版 3.1.1 的源码上进行。 关于Disruptor&#

Disruptor入门

本文是关于Disruptor的一个简单教程。Disruptor是一个高性能的并发编程框架,可以通过Maven或者下载jar包来安装。文章介绍了Disruptor的基本使用方法,通过一个例子演示了事件的生产和消费过程。事件由生产者传递给消费者,并在消费者那里打印出来。文章还介绍了事件的源和事件处理器的概念。最后,文章提到了Disruptor 3.0提供了lambda式的API,可以更方便地发布事件。另外,文章还介绍了使用Java 8 Lambda来注册EventHandler和EventProductor的方法。在代码示例中,还提到了使用ByteBuffer的方法来设置事件的值。同时,文章指出在需要较低GC水平的情况下,最好通过publishEvent传递所有参数,以避免不必要的GC。

  • «
  • 1
  • »

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-17 15:51
浙ICP备14020137号-1 $访客地图$