disruptor 号称"能够在一个线程里每秒处理 6 百万订单",好厉害,用过的使用场景是什么样的? RingBuffer 的效率如何?
1
liangzhi102292 2015-12-18 16:37:30 +08:00
The best way to understand what the Disruptor is, is to compare it to something well understood and quite similar in purpose. In the case of the Disruptor this would be Java's BlockingQueue. Like a queue the purpose of the Disruptor is to move data (e.g. messages or events) between threads within the same process. However there are some key features that the Disruptor provides that distinguish it from a queue. They are:
Multicast events to consumers, with consumer dependency graph. Pre-allocate memory for events. Optionally lock-free. 来源: https://github.com/LMAX-Exchange/disruptor/wiki/Introduction |
2
slixurd 2015-12-18 16:40:04 +08:00
同理,还有 Reactor 和 Akka 。但是实际上业务代码能用上这些的不多
RxJava 倒是在 Android 上被应用了。服务器端没见到有人敢用。(虽然我用来写 utils ,但也只是边缘应用 |
3
SparkMan OP |
4
est 2015-12-18 17:13:36 +08:00
每秒处理 6 百万订单。。。我一个订单有 1024 字节的 payload ,这就是 45G 的带宽。那么问题来了,你们服务器是万兆网卡互联吗?集群的交换机背板带宽有多大?
|
5
SparkMan OP @est 额, 6000000/1024/1024*8=45.7G 额,这个不是我们服务器,这个是 disruptor 官方的测试数据 https://lmax-exchange.github.io/disruptor/
|
6
zacard 2015-12-18 17:30:14 +08:00
还真用了。效率刚刚的。
|
9
letuslinux 2015-12-18 17:40:05 +08:00
@est 处理 6 百万不用想就知道肯定是纯内存计算,无 io 的
|
10
SparkMan OP @letuslinux 恩,底层用的是数组而不是链表,可以直接让 CPU 友好的缓存,所以还省了很多读内存的开销
|
11
Midnight 2015-12-18 17:55:26 +08:00
能够在一个线程里每秒处理 6 百万订单
是指在超算上跑吗? |
14
hantsy 2015-12-19 00:02:51 +08:00
@slixurd 服务端应用应该有很多, 之前我用过 Reactor 。下一代的 Spring 5 会基于 Reactive Stream ,首先集成 Reactor , RxJava 。现在已经 Github 已经有一个项目了 spring-reactive 项目,作为 Spring 5 的前奏。
|
15
hantsy 2015-12-19 00:04:09 +08:00
disruptor 算法有一个论文,看了半天,比较晕,真的老了,静不下心看这些了。
|
16
kozora 2015-12-19 00:06:22 +08:00
认识北京一家做 P2P 的在用这个框架= =
|
17
liangzhi102292 2015-12-21 16:15:25 +08:00
@SparkMan 主要是应用在 传统的 PCP (生产者消费者问题)场景。传统的 blockingqueue 此类都需要加锁操作,而 disruptor 使用了 CAS 指令和 ringbuffer 使得效率变得非常高。具体可 google
|
18
SparkMan OP @liangzhi102292 额,我倒不是问你什么是 disruptor ,你说这些官方文档我肯定都看过,肯定也 google 过;我其实是问具体使用场景,比如我们其他项目组是日志收集项目中使用了,或者用 ringbuffer 重写了 logback 组件
|
19
liangzhi102292 2015-12-23 11:54:56 +08:00
@SparkMan 都说了嘛, PCP 场景为了追求高性能
|