当前位置: 首页 > 网络应用技术

大型分布式应用程序基于消息队列RocketMQ最佳实践

时间:2023-03-09 00:02:54 网络应用技术

  消息队列是分布式Internet体系结构的重要基础架构。它在以下场景中具有重要的应用程序:

  它还涉及交互式实时广播,移动互联网和物联网,IM真实 - 时间通信,缓存同步,日志监视和其他字段。

  与RocketMQ的开源版本相比,本文主要关注RocketMQ的商业版本,并结合了一些练习场景,以显示大型分布式应用程序上部云的最佳实践。

  与RocketMQ和其他竞争产品的开源版本相比,业务版消息队列RocketMQ与以下优点相比。

  插件-in -out,功能丰富

  消息队列RocketMQ提供了多种类型的消息,例如时间,交易,序列等,并支持两种消费模式:无线电和群集。此外,在协议级别上,它提供了TCP/HTTP多协议支持,还提供了标签/SQL属性过滤函数。极大地扩大了用户的使用情况。

  高性能,无限扩展功能

  邮件队列RocketMQ经历了Ali核心E -Commerce时期的测试。在过去的一年中,双十一次洪芬的能力支持TPS消息发送和接收的能力以及1亿级消息的积累。

  观察,豁免和维护能力

  消息队列RocketMQ提供了一个观察到的更广泛的市场,支持精细的零件大小数据市场,提供了跟踪和查询完整的链接生命周期的能力,并为每个指标提供相应的监视和警报功能。字母队列功能可以确保这些用户的消息可以随时追溯到消费。

  高SLA和稳定保证

  消息队列RocketMQ的稳定性是我们一致,连续和稳定投资的重要领域。它提供了高度可用的部署和多复制写作功能;此外,它还支持同一个AZ灾难耐受性和广泛工作。

  接下来,我们将从上述产品的核心功能中选择一些配置文件,并结合特定的场景和实践以进一步引入。

  多 - 梅塞奇类型支持

  高可用订单消息

  业务版新闻新闻队列RocketMQ的顺序称为高可用订单消息。在介绍高可用性的顺序之前,首先简要介绍了RocketMQ的开源新闻的订单新闻。

  顺序消息分为两种类型:全局顺序消息和分区顺序消息。

  下图是分区顺序消息的应用程序方案。订单ID是此时顺序消息的分类密钥。

  可以看出,无论是全球顺序和分区的顺序,它都取决于单个分区的自然FIFO特征以确保秩序。因此,消息没有重试其他副本的能力,此时很难保证新闻的顺序。

  为了解决这个问题,我们设计并实现了高可用性的顺序。

  高可用性顺序有几种特征:

  通过此设计,高可用订单消息解决了以下问题:

  特别是要注意的是热门问题。当促进了阿里巴巴内部的某些E-商业业务时,由于发送到某个主题的大量shardingkey,该集群中的副本副本收到了Shardingkey的许多新闻,从而获得了副本的副本。其负载的上限导致消息的延迟和积累,这在一定程度上影响业务。使用高可用订单消息,由于其多物理分区中的负载平衡特征,群集订单信息得到了改善,从而避免了热门问题的出现。

  状态 - 级别的精度正时消息

  时间消息是指当前发送客户端,但希望将来收到的新闻。Time消息在各种调度系统或业务系统中广泛使用。例如,支付订单生成付款消息。系统通常需要在一段时间后处理消息,以确定用户是否成功付款,然后进行相应处理。

  RocketMQ的开源版本仅支持一些指定的延迟级别,并且不支持第二级准确度的时间表。对于组和云的各种需求,开源版本的时机新闻不满足我们的需求,因此,我们启动了第二级精确的计时新闻。

  如下图所示,基于时间旋转设计,并实现了支持任何时间 - 时间时间的第二个级别准确的时序消息,同时符合以下特征:

  内部用户有这样的方案,希望将来在30年代的时间内处理这样的计时请求。开源版本的定时消息无法满足其需求。满足其业务需求。

  分布式事务消息

  如下图所示,在传统的交易处理中,多个系统之间的相互作用耦合到一个交易中,导致整体相应的时间变得复杂,这可能会影响系统的可用性。RocketMQ提供的RockETMQ提供的分布在系统松动耦合和数据的最终一致性的前提下实现了交易函数的类型。

  消息队列RocketMQ提供的事务消息处理步骤如下:

  基于此实施,我们通过消息实现了分布式交易,也就是说,本地事务的执行结果最终将反映订户是否可以接收消息。

  消息队列RocketMQ的分布式交易被广泛用于阿里巴巴的核心交易链接中。通过分布式交易,实现了最小交易单位;在交易系统和消息队列之间,形成交易处理;下游系统(购物车(购物车,点,其他)并行处理。

  背景

  随着云上越来越多的客户数量,存储逐渐成为RocketMQ操作和维护的重要瓶颈,其中包括并且不限于:

  基于上述状态,出现了层次存储方案。

  建筑学

  分类存储的总体体系结构如下:

  通过这种设计,我们意识到了消息数据的热和冷分离。

  要使用的场景

  基于评分存储,我们进一步扩展了用户的用法方案:

  稳定

  消息队列RocketMQ的稳定性是我们一致,连续和稳定的投资的重要领域。在引入最新的稳定工作之前,首先将所有人带回RocketMQ高可用性架构的发展路线。

  高 - 可用的建筑演化路线

  2012年,RocketMQ成为新一代阿里巴巴,然后向社区开放。第一代RocketMQ High-ovailable Architecture也诞生了。如下图所示,第一代高可用性架构当时采用了流行的主奴隶主奴隶体系结构。主节点不可用时,可以通过读取整个副本组时,将写入流量同步到从属节点。

  2016年,RocketMQ云产品正式开始商业化,并且经常设计云时代的单点故障。因此,RocketMQ启动了第二代多复制体系结构。控制器组件的介绍负责监视代理状态和主状态机器的转换。当耶和华不可用时,它会自动切换到主人。第二代架构是新闻云产品规模的核心高可用性体系结构,它为云产品的规模做出了贡献。

  在2018年,RocketMQ社区非常热情地向Paxos和Raft推出分布式协议。RocketMQ R&D团队根据开源社区的RAFT协议推出了Dledger存储引擎,该协议支持Raft Multi -Copy。

  RocketMQ High -ovailable架构已经经历了三代人。在该小组的实践中,公共云和专有云的多样性,我们发现这三组高可用性体系结构存在一些缺点:

  为了应对云的不断增长,更严格的SLA要求以及复杂且可更改的专有云部署环境,当前消息系统需要简单的体系结构,简单的操作和维护以及基于当前的解决方案建筑着陆路径。我们将其称为第二级RTO多复制体系结构。

  新一代第二级RTO多复制体系结构

  第二级RTO多复制体系结构是消息中间件团队的设计实现的新一代高度可用的体系结构,包括复制组成机制,故障转移机制以及对现有组件的侵入性修改。

  整个副本组具有以下特征:

  在上述副本组的概念下,可以重复使用故障转移以完成当前的RocketMQ客户端机制。如下所示:

  健康板

  我们还在观察方面做了很多工作,为用户提供了有关消息系统的健康数据磁盘。如下图所示,用户可以清楚地看到实例级别,主题级别和组级别的各种监视数据,可以监视和诊断各个方面的问题。

  消息链接跟踪

  此外,我们还基于消息轨迹提供了消息跟踪功能。如下图所示,用户可以从消息,存储和消费中看到完整的消息生命周期,从发送,存储和消费从安慰。可以完全记录整个链接。

  应用程序方案

  客户痛点:基于新闻轨迹进行取样数据的用户需要积累的消费积累。经过全面的分析,他们可以大致判断问题的原因并调查困难。

  核心价值:提高在线操作问题的效率以及问题定位的准确性。Quicklys在健康市场上发现最冒险的话题和小组,并根据每个指标的更改迅速定位原因。例如,如果消息,请处理时间太长,它可以扩展消费机或优化消费者业务逻辑。如果故障率太高,您可以快速查看日志消除错误的原因。

  事件驱动器

  每个人都必须非常熟悉Gartner。在2018年的评估报告中,Gartner将事件驱动的模型列为未来十大战略技术趋势之一,并做出了两个预测:

  同年,CNCF基金会还提出了拟议的Cloudevents,该Cloudevents打算调节不同云服务之间的通信协议标准。因此,CloudEvents还发布了多个中间件绑定的消息。

  可以看出,事件驱动因素是未来业务系统的重要趋势,并且新闻自然具有事件的亲密关系。因此,新闻队列RocketMQ绝对拥抱活动。

  当涉及到消息和事件时,这里的一个简单说明:消息和事件是两种不同形式的抽象,这也意味着满足不同的方案:

  2020年,阿里巴巴云(Alibaba Cloud)发布了活动巴士Eventbridge。它的任务是将云产品和云应用程序与标准化的CloudEvents 1.0协议联系起来,提供集中的事件治理和驱动功能,以帮助用户轻松放松一个松散且分布式的事件驱动的架构;此外,阿里巴巴云外的云市场中还有大量的垂直SaaS服务。EventBridge将具有出色的跨产品,跨组织和横界集成和集成能力。HELP客户创建一个完整的,事故的驱动,高效率和高效的上元新界面。

  通过事件总线Eventbridge提供的事件,我们可以向事件的链接打开消息,以便消息队列RocketMQ具有事件驱动器的动力,以便拥抱整个事件生态。情况,如下图所示,向您显示此功能。

  创建消息队列RocketMQ主题

  创建目标服务

  我们快速根据容器服务创建事件驱动的服务。如下计算负载部署的YAML。该服务可以响应事件并将结果打印为标准输出。

  转到“容器服务控制台”,输入服务和路由服务页面,创建专用网络访问类型服务,然后进行良好的端口映射。

  创建活动巴士Eventbridge自定义巴士

  我们来到Event Bus EventBridge控制台,创建一个自定义的总线演示-With-K8。

  创建事件总线Eventbridge自定义巴士规则

  我们为BUS DEMO-WITH-K8S创建规则,然后选择HTTP作为事件目标,选择专有网络类型,选择相应的VPC,VSWWITCH和安全组,然后指定目标URL,如下图所示。:

  创建活动巴士事件桥事件源

  我们添加了自定义事件总线的自定义事件源的消息队列RocketMQ版本。

  发送RocketMQ消息

  接下来,我们回到了消息队列RocketMQ控制台,并通过控制台的快速体验消息生产功能向相应的主题发送了Hello Eventbridge的内容。

  接下来,我们可以发现此RocketMQ消息以CloudEvent的形式传递到相应的服务,我们可以打开事件的消息。在同一时间,基于上面提到的层次存储函数,Message Queue RocketMQ已转变为一个数据仓库,该仓库可以不断提供事件,为整个事件生态学提供更广泛的场景。

  活动驱动因素是未来业务组织和业务系统的重要趋势,新闻队列RocketMQ将牢固地拥抱这一趋势并将信息整合到活动的生态中。

  我们已经选择了消息队列RocketMQ的几个产品配置文件,从多种消息类型,层次存储到稳定性,观察到未来的事件,并与开源RocketMQ进行比较以及对特定应用程序方案的分析以及分析对特定应用程序方案的分析以及特定应用程序方案的分析。向您展示消息队列RocketMQ上基于云的RocketMQ的最佳实践。

  作者:Shao Shu

  资料来源:阿里巴巴云