携程异步消息系统实践
牛小七2015年11月30日发布在 技术分享, 架构实践
分布式系统是目前整个互联网行业百谈不厌的话题,无论是已经拥有海量用户的巨头公司,或是需要应用未来用户快速增长的初
创团队,以及要靠高性能、可伸缩的系统特性来为广大开发者提供第三方服务的解决方案提供商,在进行服务端架构设计时,都
无疑会使用分布式的部署方案。11月28日,七牛架构师实践日来到上海,首席架构师李道兵携手沪江副总裁李骏、携程高级经理
顾庆、eBay高级软件工程师陈浩,共同带来大型分布式系统架构实践的分享。以下是顾庆的演讲《携程异步消息系统实践》的文
字记录。
顾庆:今天会跟大家分享一下我们在携程,现在应该是正在推广的一个新的消息系统,主要会偏重于讲一些架构和实现顾庆:今天会跟大家分享一下我们在携程,现在应该是正在推广的一个新的消息系统,主要会偏重于讲一些架构和实现
方面的内容。目前我在携程大概一年多都在做新的消息系统方面的内容。目前我在携程大概一年多都在做新的消息系统 Hermes。。
消息队列的优势消息队列的优势
我们先回顾一下消息系统有哪些优势,为什么在企业里面会用这样的消息系统。MQ大家都会用到,像KAFKA等。企业里有很多
的应用场景,比如实时的索引更新,或者是异步化的事情,使用MQ会发现这系统之间的耦合度降低了。MQ也是,它有什么特
点?一个可能是可以做到异步的处理,这个处理时间可以很长,比如收完这个消息以后一小时再处理,非常灵活。还有就是可以
抵御流量波峰。就算量很大,可以把这些量缓存在MQ里面,从而抵挡住这样的一些波峰,导致业务不会宕掉,按照我的吞吐量
慢慢的做处理。另外它支持比较大的fan-out,我可以同时call很多人。目前我们面临着越来越多的个性化的实时的需求,一对多的
场景会越来越多,这是MQ得以应用的地方。
MQ基本的模型如图1所示。最简单的它是一个Queue的模式,生产者的消息可以发给一个消费者,一个消息只能发送一次。Topic
的话消息可以给多个人,每个人都可以拿到一个。这个名字可能不是标准的,很多MQ都会支持这样一种模式,就是Consumer可
以组成一个组,你可以有好多个组,组之间是topic的语义,就是一个消息可以到达每一个组,但是组内只有一个人会消费,这种
场景其实是最多的。比如说Group1是第一个业务,Group2是第二个业务,Group1之内这些机器其实是互备,或者说是并行处理,
之间有一个吞吐量,它们之间不会互相影响,但是一个消息在一个组内只处理一次,最多的是这样的场景。