作者|绍舒

审阅&校正:年月、佳佳

修改&排版:雯燕

前言

音讯行列是分布式互联网架构的重要基础设施,在以下场景都有着重要的运用:

  • 运用解耦
  • 削峰填谷
  • 异步通知
  • 分布式事务
  • 大数据处理

并触及互动直播、移动互联网&物联网,IM 实时通信、Cache 同步、日志监控等多个范畴。

而本文首要围绕着商业版别的音讯行列 RocketMQ,和开源版别 RocketMQ 进行比较,并结合一些实践中的场景来展示大型分布式运用的上云最佳实践。

1.png

中心才能

商业版别音讯行列 RocketMQ 相比较开源版别 RocketMQ 和其他竞品,首要有以下几点优势。

  1. 开箱即用、功用丰厚
  2. 高性能、无限扩展才能
  3. 可观测、免运维才能
  4. 高 SLA 和安稳性确保

2.png

开箱即用、功用丰厚

音讯行列 RocketMQ 供给了守时、事务、次序等多类型音讯的支撑,且支撑广播、集群两种消费形式;别的在协议层面,供给 TCP/HTTP 多协议支撑,还供给了 TAG/SQL 特点过滤功用,极大程度地拓宽了用户的运用场景。

高性能、无限拓宽才能

音讯行列 RocketMQ 经受了阿里中心电商历年双十一洪峰的检测,支撑千万级 TPS 音讯收发和亿级音讯堆积的才能,而且可以为音讯供给毫秒级端到端推迟确保,别的还供给分级存储,支撑海量音讯的恣意保存时刻。

可观测、免运维才能

音讯行列 RocketMQ 供给了一个可观测性大盘,支撑细粒度数据大盘,供给了音讯全链路生命周期追寻和查询才能,对各个方针供给了相应的监控报警功用;此外,还供给了音讯回溯和死信行列功用,可以确保用户的音讯可以随时回溯消费。

高 SLA 和安稳性确保

音讯行列 RocketMQ 的安稳性是咱们一向、继续、安稳投入的重要范畴,供给了高可用布置和多副本写入功用;别的也支撑同城多 AZ 容灾和异地多活。

产品剖面

接下来,咱们会从以上的产品中心才能中挑选几个剖面,而且结合详细的场景和实践来做进一步的介绍。

多音讯类型支撑

高可用次序音讯

商业版别音讯行列 RocketMQ 运用的次序音讯咱们称之为高可用次序音讯。在介绍高可用次序音讯之前,首要扼要介绍下开源版别 RocketMQ 的次序音讯。

次序音讯分为两种类型,大局次序音讯和分区次序音讯。

  • 大局次序音讯:在 RocketMQ 存储层只会分配一个分区,也就是说大局次序 Topic 的可用性跟单一副本的可用性强相关,且不具有可扩展的才能。
  • 分区次序音讯:一切音讯依据 Sharding Key 进行分区。同一个分区内的音讯依照严格的 FIFO 次序进行发布和消费。Sharding Key 是次序音讯中用来区别不同分区的关键字段。

下图是分区次序音讯的运用场景,order ID 即为此刻次序音讯的 Sharding Key。

3.png

可以看到,无论是大局次序音讯仍是分区次序音讯,都依靠了单一分区天然的 FIFO 特性来确保次序,因而次序性也只能在同一个分区内确保,当此分区所在的副本不行用时,次序音讯并不具有重试到其他副本的才能,此刻音讯的次序性就难以得到确保。

为了处理这一问题,咱们规划并完结了高可用次序音讯。

高可用次序音讯有以下几个特色:

  • 一个逻辑次序分区(PartitionGroup)下有多个物理分区。
  • 其间恣意一个物理分区是可写的,那么整个逻辑分区是可写且有序的。
  • 咱们依据 happened-before 的准则规划了一套依据分区位点的排序算法。
  • 依据该算法,顾客在消费某一逻辑分区时,会从其所属的各个物理分区中拉取音讯并进行合并排序,得出正确的音讯次序流。

4.png

通过这样的规划,高可用次序音讯处理了下列几点问题:

  • 可用性问题:高可用次序音讯将具有与一般音讯一致的可用性,在某副本不行用时,可快速重试至其它副本。
  • 可扩展性问题:一般次序音讯,特别是一般大局次序音讯,不具有良好的扩展才能,只能固定在特定的副本中。高可用次序音讯的逻辑次序分区可以将物理次序分区别散在多个副本中。
  • 热门问题:一般次序音讯依据 Key 将一类音讯 Hash 至同一个分区中,热门 Key 会导致热门分区,高可用次序音讯具有横向扩展才能,可以为逻辑次序分区添加多个物理分区来消除热门问题。
  • 单点问题:一般大局次序音讯,仅包括单分区,极易呈现单点毛病,高可用次序音讯可以消除大局次序音讯的单点问题。

特别需求留意的是热门问题,在阿里巴巴内部某电商事务大促时,因发送到次序 Topic 的某一特定的 ShardingKey 数量过多,集群中一个副本接收到了很多该 ShardingKey 的音讯,导致该副本超出其负荷上限,造成了音讯的推迟和堆积,必定程度上影响了事务。在运用了高可用次序音讯之后,因为其在多物理分区中的负载均衡特性,提升了集群次序音讯的承载才能,然后避免了热门问题的呈现。

秒级精准守时音讯

守时音讯,是指客户端其时发送但希望在未来的某个时刻内收到的音讯。守时音讯广泛运用于各类调度体系或许事务体系之中。比如支付订单,发生一个支付音讯,体系通常需求在一守时刻后处理该音讯,判别用户是否支付成功,然后体系做相应处理。

开源版别的 RocketMQ 只支撑几个指定的推迟等级,并不支撑秒级精度的守时音讯。而面向集团内和云上多样化的需求,开源版别的守时音讯并不能满意咱们的需求,因而咱们推出了秒级精准守时音讯。

5.png

如下图所示,咱们依据时刻轮规划并完结了支撑恣意守时时刻的秒级精准守时音讯,一起满意以下特性:

  • 恣意守时时刻
  • 超长守时时刻
  • 海量守时音讯
  • 删去守时音讯
  • 高可用
  • 高性能

6.png

内部某用户有这样的场景,希望在未来的某一分钟的 30s 时刻处理这样一个守时恳求,开源版别的守时音讯并不契合其需求,而秒级精准守时音讯在确保高可用、高性能的一起,满意了其事务需求。

分布式事务音讯

如下图所示,在传统的事务处理中,多个体系之间的交互耦合到一个事务中,造成全体的相应时刻长,回滚过程复杂,然后潜在影响了体系的可用性;而 RocketMQ 供给的分布式事务功用,在确保了体系松耦合和数据终究一致性的前提下,完结了分布式事务。

7.png

音讯行列 RocketMQ 供给的事务音讯处理步骤如下:

  • 发送方将半事务音讯发送至音讯行列 RocketMQ 版服务端。
  • 音讯行列 RocketMQ 版服务端将音讯持久化成功之后,向发送方返回 Ack 确认音讯现已发送成功,此刻音讯为半事务音讯。
  • 发送方开始履行本地事务逻辑。
  • 发送方依据本地事务履行成果向服务端提交二次确认(Commit 或是 Rollback),服务端收到 Commit 状况则将半事务音讯标记为可投递,订阅方终究将收到该音讯;服务端收到 Rollback 状况则删去半事务音讯,订阅方将不会接受该音讯。

依据这样的完结,咱们通过音讯完结了分布式事务特性,即本地事务的履行成果会终究反应到订阅方是否能接收到该条音讯。

8.png

音讯行列 RocketMQ 的分布式事务音讯广泛地运用于阿里巴巴中心买卖链路中,通过分布式事务音讯,完结了最小事务单元;买卖体系和音讯行列之间,组成一个事务处理;下流体系(购物车、积分、其它)彼此阻隔,并行处理。

分级存储

背景

随着云上客户的不断增多,存储逐渐成为 RocketMQ 运维的重要瓶颈,这包括而且不限于:

  • 内存大小有限,服务端不能将一切用户的数据全部缓存在内存中;在多租户场景下,当有用户拉取冷数据时,会对磁盘造成较大 IO 压力,然后影响同享集群的其他用户,亟需做到数据的冷热别离。
  • 云上有单租户定制化音讯存储时长的需求。而 RocketMQ Broker 中一切用户的音讯是放在一个接连文件中进行存储的,无法针对任何单一用户定制存储时长,即现有的存储结构无法满意这样的需求。
  • 如果能对海量数据供给更低本钱的存储方式,可以大幅降低云上 RocketMQ 的磁盘存储本钱。

依据以上现状,分级存储计划应运而生。

架构

分级存储的全体架构如下:

  1. connector 节点担任将 broker 上的音讯实时同步到 OSS 上
  2. historyNode 节点将用户对冷数据的拉取恳求转发至 OSS 上
  3. 在 OSS 中是依照 Queue 粒度来安排文件结构的,即每个 Queue 会由独立的文件进行存储,然后确保了咱们可以针对于租户界说音讯的存储时长。

9.png

通过这样的规划,咱们完结了音讯数据的冷热别离。

10.png

运用场景

依据分级存储,咱们进一步拓宽了用户的运用场景:

  1. 自界说存储时刻:在音讯数据的冷热别离之后,咱们将冷数据存储到 OSS 这样的存储体系中,可以完结用户自界说的存储时刻。
  2. 音讯审计:在音讯的存储之间从数天扩展到自界说后,音讯的特点从一个临时性的中转数据变成了用户的数据财物,而音讯体系也从数据中枢改变成了数据仓库;用户可以依据数据仓库完结更多样的审计、剖析、处理功用。
  3. 音讯回放:在流核算场景中,音讯回放是十分重要的一个场景;通过拓宽音讯的存储时刻之后,流核算可以完结愈加丰厚的核算剖析场景。

安稳性

音讯行列 RocketMQ 的安稳性是咱们一向、继续、安稳投入的重要范畴。在介绍咱们在安稳性的最新作业之前,首要带咱们回顾下 RocketMQ 高可用架构的演进道路。

高可用架构演进道路

2012 年,RocketMQ 作为阿里巴巴全新一代的音讯引擎问世,并随后开源至社区,第一代 RocketMQ 高可用架构也随之诞生。如下图所示,第一代高可用架构采取其时流行的 Master-Slave 主从架构,写流量通过 Master 节点同步至 Slave 节点,读流量也通过 Master 节点并将消费记载同步至 Slave 节点。当 Master 节点不行用时,整个副本组可读不行写。

11.png

2016 年,RocketMQ 云产品正式开始商业化,云时代单点毛病频发,云产品需求彻底面向失败而规划,因而 RocketMQ 推出了第二代多副本架构,依托于 Zookeeper 的分布式锁和通知机制,引进 Controller 组件担任 Broker 状况的监控以及主备状况机转换,在主不行用时,备自动切换为主。第二代架构是音讯云产品规模化进程中的中心高可用架构,为云产品规模化立下了丰功伟绩。

2018 年,RocketMQ 社区对 Paxos 和 Raft 引进分布式协议有极大的热心,RocketMQ 研制团队在开源社区推出了依据 Raft 协议的 Dledger 存储引擎,原生支撑 Raft 多副本。

RocketMQ 高可用架构现已走过了三代,在集团、公有云和专有云多样场景的实践中,咱们发现这三套高可用架构都存在一些坏处:

  • 第一代主备架构只起到了冷备的作用,且主备切换需求人工介入,在大规模场景下有较大的资源浪费以及运维本钱。
  • 第二代架构引进了 Zookeeper 和 Controller 节点,架构上愈加复杂,在主备切换做到了自动化,但毛病搬运时刻较长,一般是 10 秒左右完结选主。
  • 第三代 Raft 架构目前暂未在云上和阿里集团内大规模运用,且 Raft 协议就决定了需求选主,新主还需求被客户端路由发现,整个毛病搬运时刻依然较长;别的,强一致的 Raft 版别并未支撑灵敏的降级战略,无法在可用性和可靠性之间做灵敏的权衡。

为了应对云上日益增长的事务规模、更严苛的 SLA 要求、复杂多变的专有云布置环境,其时的音讯体系需求一种架构简略、运维简略、有依据其时架构落地路径的计划,咱们将其称作秒级 RTO 多副本架构。

新一代秒级 RTO 多副本架构

秒级 RTO 多副本架构是音讯中间件团队规划完结的新一代高可用架构,包括副本组成机制、Failover 机制、对现有组件的侵入性修改等。

整个副本组有以下特色:

  • Strong Leader/No Election:Leader 在布置时确定,整个生命周期内不会发生切换,但可在毛病时被替换。
  • 仅 Leader 支撑音讯写入:每一个副本组仅 Leader 接受音讯写入,Leader 不行用时,整个副本组不行写入。
  • 一切的副本支撑音讯读取:尽管 Leader 上拥有全量的音讯,Follower 上的音讯量不对等,但一切的副本都支撑音讯的读取。
  • 灵敏的副本组数量:可以依据可靠性、可用性和本钱自由挑选副本组的数量。
  • 灵敏的 Quorum 数量:终究一切的音讯都会同步到整个副本组上,但副本组内可以灵敏配置写成功最小副本数。例如 2-3 形式,3 副本情况下,2 副本成功即为写成功。一起,在副本不行用的情况下,Quorum 数量也可以动态自行降级。

在上述副本组的概念下,毛病搬运可以复用其时 RocketMQ 客户端的机制来完结。如下图所示:

12.png

  1. Producer 在主不行用时,灵敏快速地切换至另一个副本组。
  2. Consumer 在某个副本不行用时可快速切换至同副本组另一个副本上进行音讯消费。

可观测性

健康大盘

咱们在可观测性方面也做了很多的作业,为用户供给了一个音讯体系的可观测性健康数据大盘。如下图所示,用户可以明晰的看到实例等级、topic 等级、group 等级的各种监控数据,可以全方面地监控、确诊问题。

13.png

音讯链路追寻

别的咱们还依据音讯轨道供给了音讯全链路轨道追寻功用。如下图所示,用户可以在操控台上看到完好的音讯生命周期、从音讯的发送、存储、到消费,整个链路都能被完好地记载下来。

14.png

运用场景

客户痛点:事务呈现消费堆积的用户需求依据音讯轨道抽样数据,综合剖析后才能大致判别引起问题原因,排查困难。

中心价值:进步线上运转问题排查的效率,和问题定位的准确性。直接在健康大盘上快速发现危险最高的 Topic 和 Group,并依据各个方针的改变情况快速定位原因。例如音讯处理时刻过长可以扩容顾客机器或优化消费事务逻辑,如果是失败率过高可以快速检查日志扫除过错原因。

事情驱动

咱们必定十分了解 Gartner,在2018年的一个评价陈述里,Gartner 将 Event-Driven Model,列为了未来10大战略技能趋势之一,而且,做出了两个预测:

  • 2022年,超越 60% 的新式数字化商业处理计划,都会选用事情通知的软件模型。
  • 2022年,超越 50% 的商业安排,将会参与到EDA生态体系当中去。

同一年,CNCF 基金会也提出了 CloudEvents,意在规范不同云服务之间的事情通讯协议规范。到目前为止,CloudEvents也现已发布了多个音讯中间件的绑定规范。

可见事情驱动是未来事务体系的一个重要趋势,而音讯天然具有和事情的接近性,因而音讯行列 RocketMQ,是坚决拥抱事情驱动的。

谈到音讯和事情,这里做一个简略的论述:音讯和事情是两种不同形态的笼统,也意味着满意不同的场景:

  • 音讯:音讯是比事情更通用的笼统,常用于微服务调用之间的异步解耦,微服务调用之间往往需求等到服务才能不对等时才会去通过音讯对服务调用进行异步化改造;音讯的内容往往绑定了较强的事务特点,音讯的发送方对音讯处理逻辑是有清晰的预期的。
  • 事情:事情相对于音讯愈加具像化,代表了事情的发送、条件和状况的改变;事情源来自不同的安排和环境,所以事情总线天然需求跨安排;事情源对事情将被怎么呼应没有任何预期的,所以选用事情的运用架构是更彻底的解耦,选用事情的运用架构将愈加具有可扩展性和灵敏性。

在2020年,阿里云发布了事情总线 EventBridge 这一产品,其任务是作为云事情的枢纽,以规范化的 CloudEvents 1.0 协议衔接云产品和云运用,供给中心化的事情管理和驱动才能,帮助用户轻松构建松耦合、分布式的事情驱动架构;别的,在阿里云之外的云市场上有海量垂直范畴的 SaaS 服务,EventBridge 将以出色的跨产品、跨安排以及跨云的集成与被集成才能,助力客户打造一个完好的、事情驱动的、高效可控的上云新界面。

而凭借事情总线 EventBridge 供给的事情源功用,咱们可以打通音讯到事情的链路,使得音讯行列 RocketMQ 具有事情驱动的动力,然后拥抱整个事情生态。接下来咱们将凭借一个事例,如下图所示,为咱们展示这一功用。

15.png

创立音讯行列 RocketMQ 主题

16.png

创立方针服务

咱们依据容器服务快速创立一个事情驱动的服务,核算负载 Deployment 的 yaml 如下,该服务可以呼应事情并将成果打印到规范输出中。

apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: eventbridge-http-target-deployment
  labels:
    app: eventbridge-http-target
spec:
  replicas: 2
  selector:
    matchLabels:
      app: eventbridge-http-target
  template:
    metadata:
      labels:
        app: eventbridge-http-target
    spec:
      containers:
      - name: eb-http-target
        # 下述镜像暴露了一个 HTTP 地址(/cloudevents)用于接收 CloudEvents,源码参阅:https://github.com/aliyuneventbridge/simple-http-target
        image: registry.cn-hangzhou.aliyuncs.com/eventbridge-public/simple-http-target:latest
        ports:
        - containerPort: 8080

前往容器服务操控台,进入服务与路由的服务页面,创立一个私网访问类型的 Service,并做好端口映射。

17.png

创立事情总线 EventBridge 自界说总线

咱们来到事情总线 EventBridge 操控台,创立一个自界说总线 demo-with-k8s。

18.png

创立事情总线 EventBridge 自界说总线规则

咱们为总线 demo-with-k8s 创立一个规则,并挑选 HTTP 作为事情方针,挑选专有网络类型,选中对应的 VPC、 VSwitch 以及安全组,并指定方针URL,如下图所示:

19.png

创立事情总线 EventBridge 事情源

咱们为该自界说事情总线添加音讯行列 RocketMQ 版的自界说事情源。

20.png

发送 RocketMQ 音讯

接下来咱们回到音讯行列 RocketMQ 操控台,通过操控台的快速体会音讯出产功用发送一条内容为 hello eventbridge 的音讯到对应的主题中去。

21.png

接下来咱们就可以发现,这条 RocketMQ 音讯,以 CloudEvent 的形式被投递到了对应的服务中去,咱们然后打通了音讯到事情的链路。一起,依据咱们上述提到的分级存储功用,音讯行列 RocketMQ 改变成了一个可以连绵不断供给事情的数据仓库,为整个事情生态供给了愈加宽广的场景。

事情驱动是未来商业安排和事务体系的重要趋势,而音讯行列 RocketMQ 会坚定地拥抱这一趋势,将音讯融入到事情的生态中。

总结

咱们选取了音讯行列 RocketMQ 的几个产品剖面,从多音讯类型、分级存储到安稳性、可观测性,再到面向未来的事情驱动,并结合与开源 RocketMQ 的比照,及详细运用场景的剖析,为咱们展示了依据音讯行列 RocketMQ 的大型分布式运用上云最佳实践。