RocketMQ5.0主要在以下四个方面进行了云原生的架构改造。
① 轻量级 SDK :基于云原生通信标准gRPC 开发了全新的轻量级 SDK ,核心代码量降低 70% 左右。新的 SDK 采取无状态的消费模式,更易于集成,也易于弹性,与此前的富客户端能够形成很好的优势互补。
② 无状态消息网关:在存储节点之上搭建了无状态计算集群,并通过 LB 进行服务暴露。存储节点进行彻底分离,使其专注于核心的消息存储与高可用能力。计算和存储节点采用了分离部署的形态,能够独立进行扩展与弹性。
③ Leaderless高可用架构:推出了全新的 Leaderless 高可用架构,目前正与社区的 Dledger方案进行融合。新的高可用架构具备 store 节点身份对等、Leaderless 化、去 ZK 和 HA管控节点等优势。同时支持灵活选择副本数,异同步自动升降级,能够做到秒级故障转移。
④ 云原生基础设施:可观测能力全面走向了云原生化,拥抱 OpenTelemetry。标准部署架构也演进至 Kubernetes,能够充分利用售卖区的弹性资源能力。
新的 SDK 与富客户端能够形成优势互补,更加易于被集成,主要在以下四个方面做了重大的改进。
第一,新的 SDK引入了全新极简 API ,整套API采用不可变的设计语义,拥有完善的错误处理机制,多个语言的 SDK 在 API 层面也进行了对齐。同时引入了全新的SimpleConsumer 形态,能够支持按消息模型进行消费。
第二,通信层采用 gRPC,拥抱云原生的通信标准,使服务更易于被集成。多语言 SDK在通信层的代码也可以基于gRPC快速生成,方便社区快速开发多语言原生的SDK。
第三,SDK 采取轻量级的实现,采用无状态的消费模式,能够大幅降低客户端的实现复杂度。客户端更轻量,采用的应用也更容易被 Serverless 化、 Mesh 化。
第四,云原生可观测性方面,客户端实现了 OpenTelemetry标准,支持导出 Metrics 和Tracing数据。
RocketMQ 5.0 引入了无状态的消费模型,这是在队列模型之上的一种消息模型。在 RocketMQ 4.0 时代,RocketMQ的消费只能采取队列模型,队列模型是与存储模型一致的消费模型,消费者按照存储队列进行负载均衡和消息拉取。该模式非常适合高速批量拉取,适合对单条消息状态不敏感的场景,比如流计算场景。
但在业务消息领域,该模式缺乏对单条消息的治理能力以及状态管理能力。RocketMQ 5.0 引入了Pop机制,巧妙地在队列模型之上支持了消息模型,这并不是一种替换关系,而是鱼和熊兼得的模式。在消息模型中,业务可以只关心消息,而无需关心队列,能够做到单条消息在 API 级别的消费重试、修改不可见时间以及删除等语义。无状态的Pop 机制配合 RocketMQ 5.0 的无状态计算集群,使得整个数据链路都能实现无状态,包括客户端的无状态、连接无状态以及消费无状态。
RocketMQ 4.0 在可观测性方面也做了大量业务创新,推出了业界首个可视化全生命周期的消息轨迹系统,提供了丰富的消息查询、消息下载、轨迹追踪的能力,助力解决分布式环境中的可观测性问题。在云原生时代,我们将这些能力推向了标准化。
首先,在 Metrics 层面,提供了Dashboard的大盘,整个大盘采取Prometheus标准数据格式,并利用 Grafana 进行展示。在指标方面也进行了丰富,包含消息量、堆积量、各个阶段耗时等指标。每一个指标从实例、topic 、消费、group ID 等多维度做了聚合和展示。同时为用户提供了最佳实践的模板,并支持持续迭代的更新。
在Tracing层面,将 RocketMQ 4.0 的消息轨迹进行了标准化定义,并将标准合并至开源的OpenTelemetry标准中,规范和丰富了 messaging 领域的Tracing定义。并对Tracing数据做了消息领域的定制化展示,按照消息维度重新组织抽象span请求数据,能够展示一对多的消费、多次消费信息,非常直观以及方便理解。另外,Tracing数据可以衔接上下游,支持将完整的同步调用链路与消息的异步链路进行整合,提供更全局的可观测性视图。
RocketMQ 5.0也特别重视 Logging 的标准化,新的 SDK 对 error code message 和 error level 做了标准化定义,同时在多语言 SDK 中进行了严格对齐。
在 IaaS 层面,从 on ECS 的部署架构迁移至on Kubernetes的部署架构,使得 RocketMQ 5.0 能够充分利用云的弹新能力,撬动云的计算、存储和网络的池化资源,满足用户的各类弹性需求。
在计算层面,容器服务 ACK 可以帮助 RocketMQ 5.0 充分利用 ECS 的池化资源,借助弹性资源池和 HPA两项关键技术,能够支持计算能力的快速Serverless 化。
在网络层面,RocketMQ 5.0 对云的网络形态做了完整适配,支持多种私网的网络类型以及公网网络的随开随用,兼具安全和方便。同时,基于阿里云的 CEN 组网能力构建了全球互通的消息网络。
在存储方面,推出了二级存储能力,能充分利用 ESSD 以及 OSS 存储的弹性能力。存储计费也走向了按量计费,用户也可以自定义存储时长,将消息变为数据资产,同时二级存储天然具备冷热分离的能力,能够为用户提供一致的冷读SLA。
在业务层面, RocketMQ 5.0 也从消息走向了世界。在 RocketMQ 之上构建了一款全新的云产品EventBridge,它是阿里云在事件驱动架构方面的最新实践,已开源至阿帕奇 MQ 社区。
EventBridge构建在容器服务之上,并利用 RocketMQ作为核心的事件存储引擎。在 RocketMQ之上有跨地域的connect 集群,包含 schema 、事件规则、事件管理、事件路由、过滤转换等核心能力。在 connect 集群之上是一层事件网关,支持用户以 OpenAPI 、官方 SDK、CloudEvents SDK 、Webhook 等方式进行接入。
EventBridge事件驱动引擎连接了大量事件云和事件目标。其中事件云包括阿里云的管控事件、阿里云的数据类事件,也包括自定义应用、 SaaS 应用以及自建数据平台等;事件目标包括计算型、分析型、存储型以及通知型的目标,比如函数计算、消息服务、App网关、短信等。
在功能价值层面,EventBridge有四块核心能力:
① 能够大幅度减少用户的开发成本,用户无需额外开发即可轻松实现事件驱动架构。
② 支持原生的 CloudEvents,拥抱 cncf 社区,能够无缝对接社区 SDK,通过标准的协议统一了阿里云的事件规范。
③ 支持事件 schema 的自动探测和校验,source和 target 的schema 代码绑定等。
④ 全球事件日益互通,EventBridge组建了跨地域跨账户的事件网络,支持跨云、跨数据中心的事件路由。