微服务必备知识:Apache RocketMQ

所属技术领域:

微服务

|名词定义|

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构。目前市面上比较有名的中间件有:RabbitMQ、kafka、RocketMQ

Apache RocketMQ是分布式消息和流数据平台,一个这函证具备低延退、高并发、高可用、高可靠,可支撑万亿级数据洪峰的分布式消息中间件,是企业数字化转型必须的核心、是基础性软件,已服务于阿里巴巴逾十年。

|发展历程|

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

紧接着在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领域新标准。

|技术特点|

• 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型
• 在一个队列中可靠的先进先出(FIFO)和严格的顺序传递
• 支持拉(pull)和推(push)两种消息模式
• 单一队列百万消息的堆积能力
• 支持多种消息协议,如 JMS、MQTT 等
• 分布式高可用的部署架构,满足至少一次消息传递语义
• 提供 docker 镜像用于隔离测试和云集群部署
• 提供配置、指标和监控等功能丰富的 Dashboard

|资料来源|

阿里云大学-视频网站
CSDN(发展历程部分)

上一篇:微服务知识名称:Nacos


下一篇:Discuz!手机版微信分享不显示缩略图的解决方案