展望Apache RocketMQ5.0 | 谈RocketMQ的过去、现在和未来-阿里云开发者社区

开发者社区> 阿里云分布式应用服务> 正文
登录阅读全文

展望Apache RocketMQ5.0 | 谈RocketMQ的过去、现在和未来

简介: 核心理念:计算和存储分离。

近日,在Aliware Open Source•深圳站 - Apache Dubbo & Apache RocketMQ 开发者沙龙上,Apache RocketMQ 创始人,阿里巴巴中间件高级技术专家 冯嘉 向开发者们分享了Apache RocketMQ 的过去、现在和未来,以及对RocketMQ5.0的展望。本文是根据冯嘉的现场分享所整理,为大家回顾分享中的精彩内容。

_Apache_RocketMQ5_0_Apache_RocketMQ_1

嘉宾介绍:冯嘉, Apache RocketMQ 创始人,Linux OpenMessaging 创始人,阿里巴巴 Messaging 技术负责人。

» 公众号传送门:
后台发送“深圳沙龙PPT”,下载全场PPT。
后台发送“深圳沙龙视频”,观看全场回顾视频。

一、回顾过去 - RocketMQ的发展历程

阿里巴巴最早是一个电商平台,内部有一套系统,同时承载了会员、订单、商品等应用,有上百人在维护,每天的提交和发布都非常复杂。为了更好的支撑快速发展的业务,阿里在2007年启动了“五彩石”项目,通过横向和纵向两个维度将这一单体应用拆分出用户中心,商品中心,交易中心,评价中心等平台型应用,这时候系统和系统之间的交互就变得非常重要。通常,系统和系统之间有两种交互方式,一种是同步方式,通过rpc来实现,一种是异步,阿里的第一代消息引擎 Notify就是基于这个背景下产生的,用于淘宝B2C业务系统和系统之间的消息流转。

_Apache_RocketMQ5_0_Apache_RocketMQ_7

紧接着在2010年,阿里B2B业务开始大规模使用 ActiveMQ,并打造了自己的消息引擎Napoli。但无论是Notify,还是Napoli,他们的存储都是基于关系型数据库,最大的隐患是容易在磁盘上造成堆积。

2011年,LinkedIn开源了自己的分布式消息引擎Kafka,Kafka拥有强大的日志处理和处理磁盘堆积的能力,随后我们用Java重写了Kafka的核心逻辑,并以MetaQ项目进行开源。但MetaQ在遇到淘宝海量数据交易场景时,出现了非常多的问题。为了解决这些问题,我们把MetaQ的存储从原先的partition全量数据存储模式优化为目录和数据文件分离的模式,这个版本我们命名为MetaQ2.0。但这种优化不能从根本上解决我们在大规模数据下遇到的问题,比如在系统宕机和扩容方面出现的Rebalance问题,随后我们决定去完全重写MetaQ2.0,才有了第一代的RocketMQ,为了体现RocketMQ是源于MetaQ 2.0,我们将其命名为RocketMQ 3.0。

2016年,我们在阿里云上线了RocketMQ的商业化产品阿里云消息队列MQ,帮助用户方便快捷的获得RocketMQ的消息发送和流数据处理能力。同年11月,我们将RocketMQ捐赠给Apache(版本升级为4.0),目的是希望更多的企业开发者加入到社区来共同发展RocketMQ。孵化期间,我们发现来自东南亚、包括美国的一些银行开始使用RocketMQ在跑PoC,这让我们感到非常欣慰。我们希望在未来,能够将RocketMQ建设成可以比肩Hadoop那样的生态。

2017年,不到10个月的时间里,RocketMQ 从 Apache 毕业,成为Apache下的顶级项目,和 Hadoop 同规格。基于RocketMQ在各类场景下的丰富实践,我们将互联网业务对消息的需求进行抽象,形成了一套能满足大多数业务场景的标准模型,逐步发展成与厂商无关、平台无关的分布式消息及流处理领域的应用开发标准– OpenMessaging,并与10月进入Linux基金会。进入到2018年,团队和社区开始着手思考和构建下一代消息引擎– Apache RocketMQ 5.0,并大力发展Messaging生态,也希望这方面的专家能够加入我们,加入社区,一起打造OpenMessaging领域新标准。

_Apache_RocketMQ5_0_Apache_RocketMQ_5

二、如何深度参与社区共建

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

从去年开始,我们在北京、深圳开展了线下的Meetup活动,丰富社区的交流方式,如果你有特别好的消息实践,欢迎到我们的Meetup上来进行分享。另外,我们也会更多的聆听来自用户的声音,如果大家所在的公司在大规模使用RocketMQ中遇到了问题,也欢迎找我们交流。我们也在计划进行一些更聚焦的workshop,走进企业。希望大家一起来共建Messaging生态,探讨领域发展方向。当然,如果你有想法写一本关于Messaging或者RocketMQ方面的书籍,也欢迎联系我们。

_Apache_RocketMQ5_0_Apache_RocketMQ_5

2、社区参与第一步 - 建立沟通渠道:
对于年轻的开发者和开源使用者,首先需要了解在遇到使用难题或问题的时候,如何向项目成员寻求帮助。在社区中,我们几乎不使用微信、QQ等沟通方式,而遵循国外尤其是 Apache 提倡的邮件列表沟通方式,而对待Bug或者新需求,我们通常鼓励 issue 提交、甚至是 PR(Patch) 提交。当然,接下来会有一些新变化,为了让大家更好的参与进来,我们计划起草 RIP(RocketMQ Improvement Proposals),这一标准实践很快会正式和大家见面。

3、了解 How to Contribute
我们在社区的文档界面上线了一页“How to Contribute”的页面,页面详细描述了开发者如何深度参与到社区中。除了在社区提交问题之外,开发者们还可以通过上报疑似错误报告、提交改进或新功能的需求的方式深度参与到社区共建,例如我们在限流方面做的还不够精细,开发者可以起草一个改进,参与到社区的讨论中,邀请社区的PMC member、committer来review自己的PR。

_Apache_RocketMQ5_0_Apache_RocketMQ_2

4、提交issue,在issue页面发表评论
我们非常欢迎用户和开发者在使用 RocketMQ 的过程中,将你遇到的使用问题或是改善建议发布到 issue 页面,并对参与到已经发布的 issue 的改善讨论中。

_Apache_RocketMQ5_0_Apache_RocketMQ_4

5、贡献代码
开源项目的持续发展一定离不开开发者对项目的共同维护和改善,我们鼓励任何人贡献代码。为了确保贡献者和审阅者的愉快贡献体验并保持高质量的代码库,需要遵循我们在 Contribute 中描述的贡献过程。

6、参与到RocketMQ 社区项目中
我们在Apache上创建了一个仓库repository,名称是rocketmq-externals,把社区中已有的大规模场景的应用,或者我们认为比较好玩的项目都放到了这里。开发者可以选择你们擅长的项目,无论是适配RocketMQ的客户端,例如Go语言SDK,还是运行RocketMQ的Docker容器包括K8s Operator,或是 RocketMQ 上下游生态集成,开发者都可以提交你的代码,对项目进行改进与完善。

_Apache_RocketMQ5_0_Apache_RocketMQ_3

7、更多参与方式 - 代码不是为参与社区共建的唯一方式

我们非常重视文档的建设,这是提高社区开发者效率非常重要的方式,提供简明,精确和完整的文档,并欢迎任何有助于改进Apache RocketMQ文档的贡献。

三、展望未来 - 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系统中。

_Apache_RocketMQ5_0_Apache_RocketMQ_6

» 拓展场景能力

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

_Apache_RocketMQ5_0_Apache_RocketMQ_8

最后,和大家预告一下,接下来我们还会继续在北京,上海,成都举办技术沙龙,欢迎大家报名参加,也欢迎领域专家们和我们共同举办小范围的workshop,丰富社区的交流方式。产品方面,可以提前透漏给大家的是,社区目前研发的多语言SDKs马上就要对外开放,我们也在研发IoT套件,这块的Proposal很快也会和大家见面,欢迎大家参与进来,共建RocketMQ生态。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
官方博客
官网链接