Disruptor——高性能异步处理框架
Disruptor提供了高性能无锁内存队列实现,并优化了CPU伪共享,用于构建低延迟高吞吐量的交易型应用。使用Disruptor也可以构建复杂的任务工作流,如下图所示,这里实现消费者工作流。
在实际项目中,我们使用Disruptor配合Redis来异步处理任务,整体架构如下图所示。
· Redis队列 :我们使用Redis List数据结构来存储任务,并分为等待队列、本地处理队列、失败队列、备份队列。任务会首先发布到等待队列,然后会转移到本地处理队列进行处理,处理成功后会被从本地处理队列中移除,如果处理失败了,则会被移到失败队列等待人工介入。备份队列也叫作镜像队列,当遇到问题时,可以进行任务回放。我们使用Redis最高时有2亿多个任务在等待队列中等待处理。Redis队列中的任务可以是其他系统推送的,或者是MQ推送的。
· EventQueue: 业务组件,封装了Redis队列的成都十大贷款靠谱平台访问。
· EventPublishThread :业务组件,通过EventQueue拉取Redis Wait Queue任务,首先被移动到Local Processing Queue,然后被放入Disruptor RingBuffer内存队列处理。
· RingBuffer :Disruptor组件,一个环形队列,使用定长数组存储,并预先填充好任务/事件,不需要像链表那样每次添加/删除节点时去创建/回收节点,从而避免一定的垃圾回收。环形队列数组长度是2^N ,可以使用位运算提升性能。整个队列使用无锁设计从而减少了竞争。通过缓存行填充解决CPU伪共享问题。
· WorkPool: Disruptor组件,存储WorkProcessor的池子,Disruptor将任务处理器放入WorkPool中,然后通过Executor并发启动每一个WorkProcessor。
· WorkProceesor: Disruptor组件,WorkProcessor从RingBuffer消费事件/任务,并交由WorkHandler处理。
· WorkHanler :Disruptor组件,处理任务的工作者,我们根据任务类型委托给不同的EventHandler处理。
· EventHandler :业务组件,实际处理任务的组件,处理成功后,会通过EventQueue从Redis本地处理队列移除。处理失败时,会通过EventQueue把任务放入个人小额信用贷到Redis失败队列。
本文地址:Disruptor——高性能异步处理框架 _http://longshunzhuangshi.com/wangzhanxitong/229.html 本文tag标签:Disruptor——高性能异步处理框架
上一篇:所谓桌面式交换机
下一篇:网站整合营销战略的内涵