BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

封仲淹:如何优雅地使用Disruptor
录制于:

| 受访者 封仲淹 关注 0 他的粉丝 作者 InfoQ 关注 13 他的粉丝 发布于 2016年7月7日 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。
09:10

个人简介 封仲淹(纪君祥),阿里巴巴中间件平台技术部高级技术专家, 花名纪君祥, 阿里巴巴 JStorm 核心作者之一,Apache Storm PMC,流式计算权威人士之一,从事分布式计算,分布式存储多年,目前专注于实时计算和流式计算。曾就职于 EMC、VIA。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、上海、旧金山召开。自2007年3月份首次举办以来,已经有超万名高级技术人员参加过QCon大会。QCon内容源于实践并面向社区,演讲嘉宾依据热点话题,面向5年以上的技术团队负责人、架构师、工程总监、高级开发人员分享技术创新和最佳实践。

   

1. 各位InfoQ的网友,大家好。现在我们是在QCon2016北京现场,做客我们专访间的是阿里巴巴的封仲淹,花名纪君祥。第一个问题是这样的,能不能详细聊一下JStorm底层的并发框架Disruptor,我们知道国内有很多公司都在用它,但是目前的应用案例非常少,你能补充一下社区方面的进展或者是内容吗?

封仲淹:Disruptor是谷歌后来开源的分布式高性能的队列,这个队列是非常赞的队列,它的性能非常高。我们做过性能测试,它比BlockingQueue、ConcurrentQueue要快一个数量级,它的核心原理是对cache有高速的亲和性,在内存有很好的防止GC。还有一个更重要的特性,它在锁这块控制的非常细。像BlockingQueue、ConcurrentQueue它们在头尾上有一个锁,这个锁的粒度远远高于Disruptor,Disruptor彻底利用了CPU里面的指令级的锁,所以它在锁这块非常的高效,这就是为什么Disruptor的性能比BlockingQueue、ConcurrentQueue高一个数量级的核心的原理。在社区上我知道很多人已经开始使用Disruptor queue,它已经发展到三了,是非常不错的。但是Disruptor我们在二的时候出现过一个问题,它会有一个CPU空转的问题。当时我们自己写了一段代码绕过去,但是这段代码其实可以contribute到社区让他们去改进。至于为什么当初选Disruptor,最重要的原因是storm用了Disruptor,我们也就跟进了。但是我们做了一些自己的分析跟性能测试,Disruptor确实是非常赞的高并发队列。

   

2. 目前Disruptor是否比较成熟,你是否推荐大家使用呢?

封仲淹:我个人的观点,就看你对性能的要求有多高。如果你要达到极致的性能,对延迟要求非常低,而且对高并发要求性能非常高的时候,你肯定要选择Disruptor。但是从易用性上来讲,Disruptor使用起来并没有传统的queue使用上更方便。你在百万级别并发的时候,我推荐大家使用Java的ConcurrentQueue跟BlockingQueue。但是如果你需要更低的延迟的话,我推荐用Disruptor。

   

3. 目前Disruptor社区发展怎么样?

封仲淹:社区发展的很好,坦白来讲Disruptor社区我也不是非常熟悉,因为这块我主要站在使用者的角度,并不是开发者的角度。

   

4. 你能不能简单举一个例子,说明一下Disruptor它的使用场景,以及它的优势,比如说某些典型的业务场景。

封仲淹:像我们JStorm的流水线这是一个典型的场景。如果站在更高的角度和业务场景,比如说像风控或者是交易系统这种要求延迟非常低的环境里面,肯定是需要Disruptor的。回到核心的本质,就是说你要高性能以及低延迟的情况下,你还是选择Disruptor。

   

5. 它的优势就在于性能特别高。

封仲淹:对,它就是为了高性能所做的一款。

   

7. 你们在具体应用的时候有没有遇到哪些坑,除了你刚才讲到的易用性不大好以外,能不能谈一些你们的使用经验。

封仲淹:当时我们踩过一个坑,当Disruptorqueue满的时候,它会不停的Put,导致它的CPU消耗非常高,CPU不停的空转。

   

8. 这是二的时候。

封仲淹:对,二的时候,最新版的是OK了,但是老版还有这个问题。

   

9. 除了这个之外,还有别的吗?

封仲淹:除了这个之外没有别的,最新版和多队列消费都还不错的。

   

10. 你有哪些使用的建议给其他人吗?

封仲淹:我对Disruptor的建议,其实它就是一个队列,用起来我们觉得也挺简单的,不是很复杂,可能我们用的比较熟。

   

11. 您刚才提到易用性方面不是很好,您能说一说吗?

封仲淹:易用性方面确实不如普通的ConcurrentQueue,消费的方式跟原来的ConcurrentQueue、BlockingQueue还是有区别的。ConcurrentQueue就是一个put一个get,这种思想就是队列头插或者是队列尾插,get的话要么从队列头get,要么从队列尾get。但是它不是这样的,push是一样的,但是你在消费的时候,它的消费的API稍微复杂一点,不如BlockingQueue、ConcurrentQueue这么简单直接。

   

12. 就是在整个架构的健壮性方面storm还是比较好的。

封仲淹:因为它比较老,而且已经比较成熟了。

InfoQ:谢谢您,我的采访就这些。

   

13. 那关于JStorm您还有什么要跟大家介绍的吗?

封仲淹:如果大家使用Storm的话,我觉得大家可以用JStorm试一下,JStorm它在整个监控稳定性,以及性能上都是远远超过Storm的。而且我们国内社区做的还不错,基本上现在来说,京东每个月会给我们contribute一个patch,携程每个月也会给我们contribute至少一个issue或者一个patch。整个社区每天的提问至少会超过一百多条,还是非常活跃的。Storm还是整个业界在流式计算这块非常稳定的,因为它比较老,现在新的架构像spark streaming,samza,flink,这些新的架构是非常出色的,但是暂时来讲storm可能还是适合很多场景的。

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT