十问 RocketMQ:十年再出发,到底有何不同?
背景
Aliware
十问 RocketMQ
Aliware
消息中间件有着近 30 年的行业历史,其在业务开发过程中扮演的角色发生过哪些变化?
-
第一阶段,2000 年之前。这个阶段的消息队列供应商是几家商业软件巨头,比如 IBM、Oracle、Microsoft 都有自己的商业化 MQ,其中最具代表性的是 IBM MQ,价格昂贵,面向高端企业,主要是大型金融、电信等企业;这类商业 MQ 一般采用高端硬件,软硬件一体机交付,MQ 本身的软件架构是单机架构。 -
第二阶段,2000~2007 年。进入 00 年代后,初代开源消息队列崛起,诞生了 JMS、AMQP 两大标准,与之对应的两个实现分别为 ActiveMQ、RabbitMQ,他们引领了初期的开源消息队列技术。开源极大的促进了消息队列的流行、降低了使用门槛,技术普惠化,逐渐成为了企业级架构的标配。 -
第三阶段,2007~2017 年。PC 互联网、移动互联网爆发式发展。由于传统的消息队列无法承受亿级用户的访问流量和海量数据传输,诞生了互联网消息中间件,核心能力是全面采用分布式架构、具备很强的横向扩展能力,开源典型代表有 Kafka、RocketMQ,闭源的还有淘宝 Notify。
在消息中间件的发展历史当中,业务开发架构有过哪些升级,消息系统又是如何去适配这些变化的?
从业界技术流行趋势来看,微服务当下仍是主流,且 Service Mesh、Dapr、Knative 等新兴的技术框架让微服务的形态呈现了多样化,RocketMQ 在更好地支持微服务架构方向上有哪些演进?
-
将分布式的基础能力进行下沉,比如植入到 Sidecar 当中,这些分布式的基础能力包括服务发现、负载均衡、远程调用、发布订阅(消息中间件)。 -
对分布式能力进行抽象,新的微服务架构定义了抽象的 API,用于屏蔽分布式能力的具体实现,比如 Dapr 在其 DaprClient 中就对消息的 Pub/Sub 进行了全新的 API 定义;Knative 也基于 Kubernetes 的可扩展 API 定义了 Subscription 概念。
-
采用全新极简的 API,拥有不可变 API 的设计,完善的错误处理,各语言 SDK API 在本地语言层面对齐,新的 API 化繁为简,更易被使用和集成。 -
采用云原生的 RPC 标准框架 gRPC,标准的传输层框架,更易被拦截,特别适合被 Service Mesh 集成从而赋予其更多的传输层基础能力。 -
客户端轻量化,以典型的「SimpleConsumer」为代表,采用全新的面向消息的无状态消费模型,整个 SDK 从代码到运行时都极为轻量。轻量化是一种非常重要能力,如果各个中间件都采取富客户端的形式,这些中间件当被一起植入到 Sidecar 中时,也会是一个非常庞大的 Sidecar,应用框架集成的复杂度非常高。
近两年,包括中间件、数据库等各类云产品都宣称完成了云原生升级,站在云厂商的视角,业务应用应该如何进行云原生升级?
-
在计算层面,RocketMQ 5.0 通过 ACK 充分利用 ECS 弹性能力,采取弹性资源池 + HPA 相关技术支持计算能力快速弹性,同时 ACK 自带的跨可用区部署能力为云产品提供了充足的高可用保障。 -
在网络层面,RocketMQ 接入了阿里云的多种网络能力,满足用户对多样性网络的需求,公网随开随用,支持多种私网网络形态,基于 CEN 构建了全球互通的消息网络。 -
在存储方面,通过推出多级存储产品化的能力,充分利用 OSS 存储的弹性能力,存储计费走向按量付费,同时支持冷热数据分离,为用户提供一致的冷读 SLA。
云原生的应用架构看起来更加碎片化,是否违背了开发框架应当尽最大可能让用户专注业务逻辑的初衷?
-
应用本身需要多少 Server 进行部署,弹性和成本怎么取舍?Server 宕机后怎么处理? -
各个组件运行时状态怎么收集和查询?可观测性指标如何搭建? -
依赖的软件,比如中间件和数据库,如何进行部署,稳定性如何保障?容量评估怎么做? -
存储的数据如何设计生命周期?如何进行归档? -
...
-
统一事件枢纽 。阿里云的云产品,从 IaaS 到 PaaS,每天都有数以亿计的事件产生,但却没有一种简单和统一的方式来触达这些事件;这线事件也非常独立,无法形成规模效应,很难挖掘出有用的业务价值,只有充分发挥数据的规模效应,建立起数据的血缘关系,我们才能更好的发掘出数据的价值;所以 EventBridge 要解决的第一个问题便是统一阿里云上的事件标准,作为中心化的枢纽为云用户提供一站式的事件中心。 -
事件驱动引擎 。当 EventBridge 具备了海量的事件源后,配合基于 RocketMQ 开发的事件驱动引擎,通过毫秒级的触发能力,加速企业进行 EDA/Serverless 的架构升级。 -
开放与集成 。以事件的形式来 「Connect Everything」是一种更加松耦合的架构,EventBridge 提供丰富的跨产品、跨平台连接能力,能够促进云产品、应用程序、SaaS 服务三者相互集成。
跟行业对比,从可用性和可靠性上来看,RocketMQ 多副本机制有哪些特别之处?
-
RocketMQ 最开始采取的 Master-Slave 架构,该架构服务于阿里内部淘系业务多年,当时业务上架构的诉求其实就是数据冷备,那个阶段包括数据库都是 Master-Slave 的架构。 -
到上云的阶段,云的时代单点故障频发,云产品需要完全面向失败而设计,故 RocketMQ 开发了基于 ZK 的 HA 架构,该架构从未开源,属于商业上的版本,依托于 Zookeeper 的分布式锁和通知机制,引入 Controller 组件负责 Broker 状态的监控以及主备状态机转换,在主不可用时,备自动切换为主。 -
再到后来,业务除了关注可用性,也越来越多地关注“故障恢复时间”,也就是 RTO 指标,基于 ZK 或者开源基于 Raft 的多副本版本 RTO 时间都较长,为了解决这个问题,商业上针对业务消息,设计了“秒级 RTO”多副本架构,包含无切换设计、节点对等、灵活 ACK、特殊消息故障转移等设计能够将集群故障恢复时间降低到秒级。 -
到 RocketMQ 5.0,需要同时面向消息和流的场景,对多副本技术有了非常高的要求,一方面在业务消息期望集群有超短的故障转移时间,另一方面流要求分区永不下线,基于这个背景,在 5.0 这个大版本当中,将商业上的秒级 RTO 架构与开源的 Dledger Controller 进行了融合,统一了消息和流的多副本方案。
为什么有各种各样的 MQ?
-
RabbitMQ 诞生于标准化与开源,打破了商业化消息队列的技术壁垒,但应用场景其实没变,定位为异步与解耦; -
Kafka 诞生的背景是大数据,以批量,高吞吐等核心能力抢占了大数据管道的心智,随后非常自然地定位到 Streaming 领域; -
EMQ 重点聚焦的领域在物联网,物联网的挑战跟其他领域是大相径庭的,超大规模的设备与连接数,规则引擎,甚者边缘段需要有一整套完整的解决方案; -
Pulsar 作为后起之秀尝试在多个领域发力,包括 Messaging、Function、Streaming 等多领域都有相应布局。
-
在 消息领域 ,RocketMQ 4.0 商业上做了很多业务消息领域的创新与探索,并持续反哺至开源社区。 -
在 流领域 ,RocketMQ Streams 也是诞生于内部业务,当业务消息达到一定的规模后,低成本和轻量级的计算需求就呼之欲出了。 -
在 事件领域 ,云原生时代带来了强烈的事件驱动需求,我们在云上孵化了全新的 EventBridge 产品并进行了开源。
从性能上来讲,延迟、吞吐量等这些,对比行业来说,是个什么水准,有没有相关基准测试数据?
对比消息系统整个的发展趋势,认为哪些地方的设计比较有先见之明?为什么?
-
保持架构的简洁性:NameSrv+Broker 搞定一切需求,多副本技术能随意演进。 -
产品上的设计:轨迹、回放,都是业界首创和模仿的对象。 -
消息——>流的演进:单纯面向业务消息的场景,其实KV存储模型更适合,但 RocketMQ 一直坚持队列存储模型,也为后面向流存储方向发展留下了空间,同时也有了消息模型和队列模型共存的创新技术的诞生。
阿里云消息队列未来的规划是什么?
-
第一个趋势是 全面拥抱云原生 ,向上消息产品形态演进,支撑云原生应用架构(微服务、EDA)。比如微服务、事件驱动、Serverless 等现代化架构,向下消息系统自身进行云原生架构演进,要通过一系列的技术改造,充分释放云基础设施的弹性计算、弹性存储、弹性网络等能力,全方位提高消息的技术指标,降低成本,提高弹性能力。 -
第二个趋势是 拥抱物联网 。物联网技术将更广泛的落地到各行各业,万物互联、边缘计算进一步拓展消息的边界。面向物联网的消息队列要海量异构设备接入,海量消息队列存储,能够随处运行,具备云边端一体的无边界部署能力。 -
第三个趋势是 拥抱实时数据 。现在企业的数字化转型又往前迈进了一步。从原来的业务数字化迈进到了数字业务化,数字化企业持续产生业务数据,对业务数据的实时洞察、实时决策,能快速把握商机,指导业务获得更大的成功。消息队列也将从在线业务架构基础设施,延伸到实时数据架构基础设施,事务分析一体化。
-
在消息领域,全面拥抱云原生技术,弹性伸缩,开箱即用。 -
在事件领域,产品形态全面升级,拥抱行业标准,让事件驱动架构无处不在,从单一业务的数字化系统,扩展到跨业务、跨组织的数字化商业生态。事件驱动架构同时也让云计算、云原生的技术能够更大规模的落地,提高云产品和用户业务的集成度,让 Serverless 技术被更大范围的采纳,为客户降本增效。 -
在流领域,流存储增强批量特性,大幅度提高数据吞吐量;新增逻辑队列能力,解耦逻辑资源和物理资源,在流场景也具备无缝伸缩能力;新增轻量流处理引擎,提供实时事件流处理、流分析能力。