十万亿条消息背后的故事
这是一个从诞生第一天起就在 GitHub 上开发的开源项目,也是中国第一个非 Hadoop 生态的 Apache 顶级项目。它统一了阿里集团内部所有业务线的消息中间件,伴随着中国互联网发展数次迭代。InfoQ 与阿里云开发者社区联合出品的【开源人说】系列视频第一期正式上线,一起来探访开源消息中间件 Apache RocketMQ 背后的人和事!
开源人说:属于开源人的时光博物馆
作为一款消息中间件,RocketMQ 的第一行代码诞生于 2012 年。
消息系统在阿里内部演进了多年。2007 年,淘宝技术架构进行了调整,将交易系统从单体应用变成分布式,也是在这个过程中产生了阿里巴巴第一代消息中间件 Notify。2007 年到 2011 年,一直是 Notify 作为最主要的消息中间件支撑淘宝天猫业务。
到了 2011 年,天猫的业务更大了,消息规模也日益增长。在“双 11”流量压力下,每年都有出现问题的风险,消息会延迟半天甚至一天以上,这就造成商家卖出去的商品,看不到买家已经买掉了。当时“双 11”每年的数据量都要翻番,如果当年“双 11”问题解决不了,那么可预见下一年的“双 11”还会遇到同样的问题。
而解决这个问题的本质是如何实现高速读写,但基于之前的架构,无法彻底地解决问题。那么,就需要设计一个全新的存储架构。
负责全新产品设计的任务,刚好落到了王小瑞身上,2011、2012 年的时候,整个淘宝中间件的人还特别少,绝大部分产品都是一个人完成,既要开发,又要运维,还要技术支持。消息中间件也是类似情况,总共就两个人,一个人负责 Notify,一个人负责全新产品的设计,而他恰好负责后者。
王小瑞介绍,“当时淘宝的场景是数据量和并发量都在爆炸式增长,对于基础软件的性能要求非常苛刻。我们希望做出来的消息产品能够逼近硬件的极限,像火箭一样快,就给它起‘RocketMQ’。因为用户也是自己,所以一定是找一个最优的方式。比如,运维成本要足够低,整个链路依赖要足够短。”
而开源,可以汇聚数百人、数千人、数万人一起来开发,也能吸收所有公司、行业、业务场景的需求,汇聚最大的生产力。因此,从第一天开始的时候,RocketMQ 就是托管在 GitHub 上,也就是说它的第一行代码就是对所有开发者和用户开放的,整个开发过程也是对用户开放的,这也吸引了特别多的开发者,大家帮助 Review 代码、测试 Bug,RocketMQ 在众多开发者的参与下进展迅速。
“RocketMQ 每一行代码都很关键,并发问题怎么解决、存储问题如何解决,我当时做梦的时候都在想这些问题该怎么解决。老板没有规定一个严格的时间点,说你必须在什么时间写完,但是我的想法是,我已经想清楚了整个架构,我在心里将它当作自己的作品,而非公司的任务,希望把它快速实现出来,能够让更多人用起来。”
大概在三个月的时候完成了第一个版本,整个 RocketMQ 开发的代码量非常大,第一个大版本大概有 4 万行到 6 万行。后面大概每个月能发布一个版本。
项目最终是要上生产环境验证的。特别是在“双 11”,流量是平时的上千、上万倍,一些平时微不足道的细节会在这个时候被放大一万倍,放大之后可能就是个大故障了。
作为基础软件的研发,RocketMQ 团队面临着巨大的压力,担心有平时没想清楚的细节。而对能考虑到的情况,也需要在“双 11”来临之前做好各种预案。
第一年的“双 11”,RocketMQ 团队挑选了一些相对非核心业务上线验证。逐步地验证,并逐步修复。消息系统中每一条数据都会影响到一笔业务中的订单,如果有问题必须用非常严谨的态度争分夺秒、通宵达旦地解决掉。Apache RocketMQ 联合创始人,消息队列团队负责人林清山回忆道:“还好赶在流量高峰前修复好了,新的技术融合架构平安地度过了第一个双 11。双 11 之后将这些问题进一步完善修复好,然后再进行更全面的验证。到第二年融合架构就百分百平稳上线了。”
光“双 11”还不够的,因为“双 11”只能证明性能和稳定性都很好。但对于业务来说,可能更关注的是针对某些业务场景的功能,RocketMQ 是否具备这个功能。所以 RocketMQ 不断地被打磨,应用范围与场景也越来越广。
2015 年,RocketMQ 开始统一阿里巴巴消息中间件。
“一开始 RocketMQ 上线可能接入的没那么多,但是随着后面阿里巴巴业务蓬勃发展,现在可以认为阿里所有子公司、所有部门都已接入了 RocketMQ 中间件消息系统。”林清山表示。
开源的 RocketMQ,一路吸引了众多志同道合者,越来越多的人、越来越多的公司都参与进来,所有的社区开发者拧成一团。
“阿里在大量使用开源的产品,我们也希望能为开源社区去回馈我们自己的一些研发成果。”于是,2016 年,阿里巴巴将 RocketMQ 捐赠给 Apache 软件基金会。2017 年,RocketMQ 正式毕业,成为 Apache 顶级开源项目。
一个由中国开发者发起的项目站在了世界的舞台上,受到全球的企业和开发者的关注。
在此之前,RocketMQ 面对的是整个中国的开发者。开源其实是一个打明牌的过程,“意味着所写的每行代码都能被所有人看到,写的不好的地方也会被所有人发现。”王小瑞表示,“我到阿里之前是做 C++ 开发的,因为 RocketMQ 是我第一个 Java 项目,代码风格有点像 C++。当时有人在微博上说,‘有个方法的参数的方式不是类继承,而是两个平行的类传递进来,这个设计好傻。’我后来发现这确实挺傻的,但也没觉得特别沮丧。开源意味着所有缺点和优点,全部暴露在阳光之下,这也是帮助项目快速进步的方式,是帮助产品演化、避免错误路线的一种方式。”
进入 Apache 软件基金会孵化则是进入了全球化开源协作中,RocketMQ 成为了全球开发者都能使用的技术。在孵化过程中,RocketMQ 收获了全球开发者的建议和大力支持。更重要的是,“全世界都能看到这个产品到底好在哪里,不好在哪里”。
开源是一种生产力的体现,由数百人、数千人、数万人一起协作开发,同时又吸收全世界所有公司、所有行业、所有业务场景的需求。
“对于开发者而言,我们认为开源最重要的是在解决世界上最难、最有挑战的问题。并且大家协作的项目能被越来越多开发者使用,这也就意味着说项目在这个领域是顶尖的。从某种角度而言,开源是一种最优秀的软件开发形式,通过开源形式能把项目做到最优秀。最终能形成一个标准,让所有人进行技术选型时不用再做抉择,反正选择标准就对了。”
2021 年,RocketMQ 推出了 5.0 版本,完成从业务消息平台向“消息、事件、流”一体化融合处理平台的升级,并在数据通道、事件驱动架构、分析计算等场景不断产生新价值。
2022 年,批量消息索引、逻辑队列发布 RocketMQ-MQTT,RocketMQ-Connect。
通过十年的开源建设,今天的 RocketMQ 已经拥有超过 2 万个 GitHub Star,服务数十万开发者,Contributor 人数超 500,每天通过 RocketMQ 流转的消息超过十万亿条。
阿里巴巴开源委员会副主席丁宇表示,“未来整个数字世界的根基是开源和云计算。阿里巴巴将继续以开源的方式,切实践行开放共享好科技的理念,加强与社区的合作,加大投入和治理力度,把阿里巴巴的开源行动更加有系统、有组织、可持续的发展下去,为社会创造价值。”
忍受不了糟糕的工作氛围,我退出了 Google WebAssembly 团队
Gitee关闭部分开源仓库:先审核再上线;技术团队20天开发出App后集体被裁,负责人怒用公司公号发文祝“早日倒闭” | Q资讯
独家专访字节跳动开源委员会:定位“资源中台”,不会为开源设立强KPI
让企业胆战心惊的GPL官司:新裁决是开源许可历史上的重要转折点
点个在看少个 bug 👇
微信扫码关注该文公众号作者