当前位置:首页 期刊杂志

RocketMQ:从阿里巴巴走向世界

时间:2024-05-20

郭嘉凯

在成为Apache顶级项目后,RocketMQ团队基于RocketMQ在各类场景下的丰富实践,将互联網业务对消息的需求抽象化,形成了一套能满足大多数业务场景的标准模型。

2016年11月11日,天猫、淘宝的总交易额超过1207亿元,创造了当时新的世界纪录,也被认为是一个商业奇迹。在取得巨大成就的背后,却很少有人知道,一项技术起到了非常重要的支撑作用。这项技术就是阿里巴巴中间件团队自主开发的RocketMQ消息中间件。

在2016年帮助阿里巴巴创造商业奇迹之后,2017年,RocketMQ消息中间件再次让世界震惊。这一次是因为,2017年9月,Apache软件基金会官方宣布,阿里巴巴捐赠给Apache社区的开源项目RocketMQ从Apache社区正式毕业,成为Apache顶级项目(TLP)。Apache RocketMQ也是国内首个非Hadoop生态体系的顶级项目,可以说,这是中国自主研发的技术在国际IT舞台上的一次华丽绽放,与此同时,Apache RocketMQ也引发了全球IT产业的广泛关注。

那么,这一技术究竟是如何诞生的呢?

“在阿里巴巴技术发展初期,伴随着淘宝业务的快速发展,网站流量呈现几何级增长。单体巨无霸式的应用无法跟上快速迭代的研发要求,上百名工程师每天对着同一套系统,代码不断地迁入迁出,发布、交付成本也非常之高。”阿里巴巴高级技术专家、RocketMQ联合创始人冯嘉介绍道。

这个时候,阿里巴巴公司内部从业务、组织层面进行了一次大的水平与垂直切分,拆分出用户中心、商品中心、交易中心、评价中心等平台,分布式电商系统的雏形也由此诞生。

阿里第一代消息引擎Notify就是在这样的背景下设计出来的,主要解决的核心问题是交易下单链路的异步解耦。“当然,这背后需要我们严肃考虑分布式系统的可扩展性,比方说它的服务发现节点、存储节点、Broker节点都支持水平扩展,面对淘宝高峰流量,比较好地起到了削峰填谷的作用。”冯嘉说。

放眼全球,当时业界的消息引擎如Apache ActiveMQ,在后端有超大规模消费者,尤其是在消费能力不均衡的前提下,经常会出现堆积,这种影响被传递到上游生产者,进而影响交易核心业务,系统卡顿、宕机现象不在少数。如何能够更好地削峰填谷,这也是Notify最早面临的难题之一。

后来,随着2011年Kafka从Apache顶级项目毕业,其自研存储引擎带来的海量消息堆积,高效的持久化特性进入阿里巴巴中间件团队的视野。但它特殊的日志通道定位,并不能完全满足阿里巴巴高频的在线交易场景,为此阿里巴巴中间件团队设计并研发了新一代消息引擎 RocketMQ(阿里巴巴内部叫MetaQ),从最初的日志传输到后来阿里集团全维度在线业务的支撑,RocketMQ被广泛用在交易、数据同步、缓存同步、IM通信、流计算、IoT等场景型应用中。

据冯嘉介绍,目前,包括阿里云上的消息产品以及收购的子公司在内,阿里集团的消息产品全线跑在RocketMQ4的内核上面。而说到数据表现,冯嘉则更加自豪。“以2016年阿里巴巴的双11为例,RocketMQ完成了1.2万亿消息精准低延迟投递,交易峰值高达17万笔/秒。”

在淘宝、天猫的成功应用证明了RocketMQ中间件的价值和能力,也使得越来越多的企业和开发者开始关注RocketMQ。而就在此时,阿里巴巴公司做出了一个出人意料的举动,宣布将开源分布式消息中间件RocketMQ捐赠给Apache,成为Apache孵化项目。

在很多人看来,阿里巴巴投入了大量人力、资源,历经多年所开发出来的如此强大的一项自主开发的核心技术,肯定是要作为企业的核心竞争力之一,严密地保护起来。而阿里巴巴却反其道而行之,将这项技术捐赠给Apache,开源给全世界的企业和开发者。

阿里巴巴为什么要这么做?“在阿里建立之初,正是基于开源软件,将整个电商平台的原型快速搭建起来的。不仅如此,即便这么多年过去了,虽然阿里的基础平台还在不断演进,但仍旧有开源软件的身影。我们感恩社区,也希望将这些久经验证的臻品拿出来,分享出来,回馈社区,让更多的人受益。我们希望更多的人能够参与进来,在这样一个开放透明、全球协作的环境下,相信阿里巴巴在开源领域会取得更多的成绩。”冯嘉道出了其中的原因。

之后RocketMQ的发展也证明了阿里巴巴的这一做法的正确性。团队吸引了多位国内外Committer和PMC Member加入。在经过半年多的努力后,在2017年9月,RocketMQ顺利毕业并成为Apache顶级项目。

如今,RocketMQ在开源社区的发展,整个生态已经覆盖了电子商务、物联网、金融、大数据、新能源、新零售、物流、轨道交通等众多领域,且具备了连接其他顶级开源生态的能力,如Spark、Ignite和Storm等,而且,已经有数百家国内外知名企业在使用RocketMQ。

在成为Apache顶级项目后,RocketMQ团队基于RocketMQ在各类场景下的丰富实践,将互联网业务对消息的需求抽象化,形成了一套能满足大多数业务场景的标准模型,逐步发展成与厂商无关、与平台无关的分布式消息及流处理领域的应用开发标准—OpenMessaging,并于2017年10月进入Linux基金会。

进入2018年,RocketMQ团队和社区已经开始着手思考和构建下一代消息引擎—Apache RocketMQ5.0。据悉,RocketMQ5.0将基于云原生的理念,围绕可运维、可监控、弹性、可恢复、敏捷5个维度来打造下一代分布式消息计算平台,全面提升RocketMQ的功能、性能、生态效能和场景应对能力。

“在计算方面,我们将基于存储和计算分离的理念,打造一个精简的计算节点群,更贴近地面或边缘设备,高效解决数据量不断增大、访问端点不断增多,但计算能力有限的需求场景。在存储方面,我们将更加精细化地控制内存配置和回收,利用SPDK发挥在SSD新标准NVMe下的优势,兼容各类硬件设备,达到微秒级的端到端时延。同时,团队也在积极寻求和全球高校合作,探索更前沿的技术实现以及应用场景,努力挖掘用户的痒点,解决客户的痛点,创造产品的爽点。”冯嘉说。

据冯嘉介绍,RocketMQ5.0将基于 OpenMessaging标准向上和向下拓展,提升生态效能。在聯机分析处理领域,对接Prometheus、ELK包括业务数据,将来自上游的数据形态Metrics、Logs、Streams传输到下游的各类数据分析应用上。在金融、游戏和电商领域,RocketMQ5.0将进一步优化打磨内核,提供更高的稳定性与可用性。同时,借助 OpenMessaging提供更多语言的接入能力,包括Infrastructure Native的能力。而在一些新兴领域,如IoT场景中,基于计算和存储分离的理念,借助物联网中无处不在的“物”来分担计算,从而解决Java在单机上支持海量设备的连接在线不足的问题,将上游的数据高效写入下游的TP或者AP系统中。

“优秀的产品和强大的技术都需要通过解决实际场景中的业务问题来诠释自身的价值,RocketMQ5.0将在以下4个场景中进一步提升应对能力。在电子商务领域保证整个传输链上的消息不丢,提高交易数据的完整性;在金融领域,支持分布式事务下的多端调用,保证关键数据的一致性;在大数据领域,具备更强的天然的streaming能力,解决端到端的延迟,优化用户端体验;在IoT领域,支持海量设备同时在线和海量topic消息队列,保障双向通信。”冯嘉介绍说。

在不断完善产品的同时,RocketMQ团队和社区也在大力发展Messaging生态,“也希望这方面的专家能够加入我们,加入社区,一起打造OpenMessaging领域新标准。”冯嘉说道。

访谈实录

Q:中国大数据产业生态联盟、《软件和集成电路》杂志社

A:阿里巴巴高级技术专家、 RocketMQ 联合创始人冯嘉

Q:目前市面上的消息中间件有几种,企业在进行消息中间件选型时,应该注意些什么?需要从哪几个维度考虑?

A:全球主流的开源分布式消息引擎,除了RabbitMQ,基本上都在Apache上了。Apache ActiveMQ及其旗下的各个子项目,主要面向企业级市场,吞吐不是其强项,主要和企业已有基础设施集成起来比较方便,如EAI、ESB这种早期企业基础架构。

Apache Kafka为日志处理而生,目前从社区来看,发力重点在流计算、IoT等领域,和ApacheSparkStreaming,ApacheFlink,ApacheStorm等一站式流计算平台不同,它从 ApacheSamza这种轻量级方案中汲取了养分,提供给用户的是一个异步编程框架,用户基于类库编程,不需要考虑分发、部署、调度等一系列传统流计算框架带来的繁琐工作。这种轻量级的解决方案在一些日志处理、ETL等场景更受大家欢迎。

如果是应对一些高并发、高可靠、高可用以及比较苛刻的场景,Apache RocketMQ是一个不错的选择。最近留意到一个有趣的现象,国内一些中大型规模的公司普遍部署了两套消息引擎,一套选择Apache RocketMQ用在交易、数据分发等核心链路上,一套选择Apache Kafka用在大数据等在线、离线分析链路上。毫无疑问,Kafka目前在大数据生态建设方面,确实具备一定的先发优势。

RocketMQ作为承载了阿里巴巴双11万亿级数据体量的消息引擎,在电商,金融领域的优势也是比较明显的。目前,国内很多金融领域的领军企业在构建自己的分布式金融体系时,也都不约而同地选择了RocketMQ。

另外,自从RocketMQ进入Apache基金会后,团队大力发展社区生态,包括和Apache Spar、ApacheFlink、ApacheStorm、Apache Ignite等顶级开源产品有了更多的生态连接与整合能力。未来一两年,我们也希望RocketMQ 能在大数据、流计算领域取得更多的创新突破。

Q:如果我是一个RocketMQ的爱好者,如何才能深度参与到社区的共建中?

A:通常社区会有PMCmember、committer、contributor和user这些角色,但一些优秀的国际社区有更多的生态角色,例如专栏作家,以一个Editor的身份,把开发和使用过程中的经验以文字的形式分享出来,发表在自己的社交账号或者社区官网的blog上,帮助其他开发者更好地使用开源产品,这对社区的建设是非常有帮助的。除此之外,Evangelist(布道师)、ReleaseManager、Consultant包括各类会议的Speaker也是非常重要的社区角色。

从去年开始,我们在北京、深圳开展了线下的Meetup活动,丰富社区的交流方式,如果你有特别好的消息实践,欢迎到我们的Meetup上来进行分享。

另外,我们也会更多地聆听来自用户的声音,如果大家所在的公司在大规模使用RocketMQ中遇到了问题,也欢迎找我们交流。我们也在计划进行一些更聚焦的workshop,走进企业。希望大家一起来共建Messaging生态,探讨领域发展方向。当然,如果你有想法写一本关于Messaging或者RocketMQ方面的书籍,也欢迎联系我们。

Q:现在 OpenMessaging 也已经正式入驻 Linux 基金会,目前进展如何?

A:OpenMessaging自去年10月进入Linux 基金会以来,受到了全球同行的广泛关注。很多分布式领域的专家在Issue上,邮件列表里和我们进行了激烈探讨,整个模型也是在不断打磨和优化。

目前除了初创成员,我们还在考虑吸纳来自全球其他互联网、金融领域的大咖企业,启动一个类似Linux基金会的Funding Program,欢迎国内有自主消息引擎的厂商加入我们,也非常欢迎积极拥抱标准化战略的同行企业加入进来,共同打造消息领域的事实标准。整个标准的第一个正式版本(非Alpha版本)已经发布,而阿里云MQ会成为OpenMessaging全球第一个云厂商标准实现,并于今年晚些时候发布。

OpenMessaging在我们初步蹦出这个想法的时候,就跟Apache社区包括RabbitMQ团队的同行们聊过,大家反响普遍还是很热烈的。毕竟这块在业界还是个空缺,在Java生态里,JMS 2.1在JavaEE体系里被推迟了又推迟,Spring 社区也忍不住自己设计了一套类似的编程框架。但放眼多语言领域,这块就显得贫瘠了。

业界迫切需要一套类似数据库领域的SQL 这样的编程标准,而在整个标准的演进过程中,像ApacheActiveMQ、ApachePulsar,包括 ApacheRocketMQ社区都给出了很多积极的回应。在第一个标准版本实现中,大家也会看到其它几家顶级开源消息引擎的OpenMessaging实现。

除此之外,在SpringCloud、AMQP、MQTT、Serverless等领域,OpenMessaging也会寻求积极探索与合作。准确地讲,OpenMessaging 已经不是一个传统意义上的API标准,它更像是一个生态,一个围绕着Messaging运转的全域开源生态。

行业应用案例

案例名称:阿里巴巴“双11”

核心特点:

RocketMQ是一个低延迟、高可靠的分布式消息中间件。它被设计为采用长轮询拉的模式,支持传统消息领域的点对点和发布订阅模型,单主题下支持千万级别的消息堆积,对于离线计算具有很好的削峰填谷作用。对于企业级应用,它能很好起到异步解耦的作用。作为数据通道,RocketMQ在事务数据复制(全局有序),实时计算方面也具备高效的吞吐能力。

应用解读:

RocketMQ主要由NameServer、Broker、Producer以及Consumer四部分构成。其中NameServer以轻量级的方式提供服务发现和路由功能,每个NameServer存有全量的路由信息,提供对等的读写服务,支持快速扩缩容。Broker负责消息存储,以Topic为纬度支持轻量级的队列,单机可以支撑上万队列规模,支持消息推拉模型,具备多副本容错机制(2副本或3副本)、强大的削峰填谷以及上亿级消息堆积能力,同时可严格保证消息的有序性。

除此之外,Broker还提供了同城异地容灾能力,丰富的Metrics统计以及告警机制。Producer和Consumer以SDK形式提供,由用户进行分布式部署,消息由Producer通过多种负载均衡模式发送到Broker集群,支持Batch发送、oneway发送。发送低延时,支持快速失败。Consumer支持PUSH和PULL两种消费模式,支持集群消费和广播消息,提供实时的消息订阅机制,目前不支持Exactly once语义,所以需要用户自己做好判重处理。

应用价值:

历年“双11”,RocketMQ都承载着阿里巴巴生产系统100%的消息流转,以2016年“双十一”为例,RocketMQ完成了1.2萬亿消息精准低延迟投递,交易峰值高达17万笔/秒。

2017年“双11”当天的万亿级数据洪峰下,做到了99.996%的毫秒级响应,每秒支撑千万级消息发布,每条消息发布平均响应时间不超过3毫秒,最大不超过20毫秒,而核心交易链路平均延迟时间仅3ms,在全球Messaging领域做到了领先水平。可以说,RocketMQ在“双11”期间,为阿里巴巴天猫、淘宝的正常运转提供了强有力的支撑。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!