Aliware-MQ消息队列技术架构与最佳实践

简介: 在阿里云生态日,阿里巴巴中间件产品专家不铭分享了《Aliware-MQ消息队列》。他从功能特性、技术架构、最佳实践、案例分析四个方面进行了分享。在分享中,他主要介绍了Aliware-MQ的线性扩展技术、存储模型、负载均衡、数据流、刷盘策略、高可靠/高可用方案进行了介绍,并通过案例进行了具体实践分享。

在阿里云生态日,阿里巴巴中间件产品专家不铭分享了《Aliware-MQ消息队列》。他从功能特性、技术架构、最佳实践、案例分析四个方面进行了分享。在分享中,他主要介绍了Aliware-MQ的线性扩展技术、存储模型、负载均衡、数据流、刷盘策略、高可靠/高可用方案进行了介绍,并通过案例进行了具体实践分享。

 

以下内容根据直播视频整理而成。

 

功能特性

Aliware-MQ是什么?它是企业级互联网架构的核心产品,基于高可用分布式集群技术,支持海量高并发,支持万亿级消息流转(双十一的万亿数据),支持海量的消息堆积,支持高可靠/高可用方案,提供运维、监控等一套完整的配套服务。

41ccf1512d6df423e188ab1660fc7e3e17731ce3

Aliware-MQ的功能特性如上图所示。它支持四种消息:普通消息、顺序消息、定时消息、事务消息。管理方面支持消息查询、消息回溯、全链路轨迹(消息发出到接收经过的链路)、监控报警机制。熔断机制是指把有问题的节点自动熔断,发送到可靠性最高的机器上。消息重投机制是指发送失败后重新投递消息,最多支持十六次的重投。

ba9357911b6cbb9051d13f24cd6272e99166eac8

Aliware-MQ的功能架构图如上图所示。左边是控制台的管理,右边的接入方式支持TCP协议、HTTP协议和MQTT协议(面向手机终端的协议)。服务端包括了消息发送和订阅。

Open API是MQ提供给用户的管控方式,用于实现一系列资源管理和运维功能。把控制台功能包装成API对外提供,用户可以通过Open API查询所需要的任何东西,主要用来做运维管控。

56024cdbc629f428d35551ff146f4fde8dd9bbc0

上图是今年推出的Aliware-MQ移动物联网套件。之前的客户端,不管上游、下游发或收都不面向用户端,而是面向服务器。而移动互联网套件可以直接面向手机、汽车等移动设备,可以直接通过网关把消息系统打通。

技术架构

消息系统是基于队列的。队列要保证数据安全,要支持高并发、高性能读写,要足够大,要支持足够多数量。

708a37cefb3a416b43afb0b37491f716c082ec33

上图中Producer是消息发送集群,下游是Consumer消费者集群,Broker是服务器,所有的消息都发送到服务器上,Name Server集群和VK功能类似,用来做服务发现。消息发送需要从Name Server获取到,订阅Topic时需要知道消息从哪里取同样需要Name Server。Broker上的Topic信息会定时向Name Server注册,Producer和Consumer在交互之前会从Name Server上获取目标。其中,master是主机,slave是备机,主备之间会做数据同步(异步和同步两种方式),一个master可以布多个节点。如果扩容的话,直接布一台master即可,它会自动将Topic注册到Name Server上。

45ec0f2f823b87273571e9946ff8d8b59e9db64a

Aliware-MQ所有数据存储在Commit Log里,实现上就相当于一个文件夹,每次会生成一个1G的文件,不管哪个Topic写消息都会直接存入这个文件中,直到存满。做索引的目的是为了区分每个Topic。上图中有5个队列,每个队列会生成定长的文件,会告诉我们这个Topic在哪个文件中。

6f3832906dc09e4d41f276ce065e2cb3a3274f82

Aliware-MQ的负载均衡比较简单。如果有5个队列,在消息量比较大的时候会平均分配到这5个队列中。消费负载均衡策略也比较简单,如果有两个订阅者,而总共有5个队列,那么其中一个消费两个,另一个消费三个。当队列数量小于订阅者数量时,需要根据业务实际情况手动将队列数量调大。

e583905738b114caeb14aa816a5b0dbd7a771221

消息写进来先放在Java堆里,然后再到内存。对于用户,如果消息都在内存里,那么直接读走。但是有一种可能,消息堆积比较久,已经存储在了磁盘中,此时就需要从磁盘里加载数据,然后从内存中读取出来。如果一台机器上的用户量比较大,都在读取磁盘,磁盘IO占用比较高(可能达到100%),所以针对堆积比较多的业务需要单独划出来保证业务上不互相影响。

e849271f6af1c59450cfb6ca03b2555025302440

Aliware-MQ的刷盘策略包括两个:异步写,没有刷盘就返回成功;同步写,一定是消息刷到磁盘中才会返回成功。

40f14f1bde4d31aafc7c1e41feef22d483d08715

Aliware-MQ的高可靠方案如上图所示。主备机有两种方案:一是备机不切,如果主机挂掉了,备机上有主机挂掉之前的全部数据,所有在主机上还未消费的事情都可以在备机上来读,备机不会切换成主机,只对外提供读的方案;二是备机可切,当主机挂掉之后,备机会切换为主机同时对外提供读和写的功能。主备同步的方案也有两种:一是同步;二是异步地同步,在主机宕机后可能出现一定的消息丢失。

最佳实践

对于Producer,有消息的失败补偿机制,一台机器发送失败之后会默认往另外两台机器再尝试,如果三次都失败了才会把最终的失败结果传回;可追踪机制,通过trace功能把整条链路追踪出来;One-way发送,没有返回接口,发出来是不可靠的,发出来就算成功。对于Consumer,需要做幂等性,没办法保证消息完全不重复,所以将其交给用户来做;做批量处理和并发性。

案例分析

Aliware-MQ的普通消息最大4M,消息越小,性能越高;定时消息可以实现消息的延时或者定时投递,最长40天;事务消息可以两阶段提交、解决分布式事务问题;顺序消息可以采用全局顺序、分区顺序,严格保证消息的顺序。

Aliware-MQ的使用场景包括:系统间异步解耦、分布式事务、异构数据复制与分发、双十一大促的削峰填谷、大规模机器的Cache同步、日志服务、IM实时通信、实时计算分析。

削峰填谷

3982ad7c13b77e197d30ee94fbb2e8dacd197d60

双十一时有一个案例:内部有一个系统TP是做交易的,每一次下单都会在TP里面创建一笔订单,创建好订单后会调用物流LC接口,物流订单创建成功后又会调用交易接口。此过程中,交易TP和菜鸟LC是耦合的,但是从业务角度来看,实际上物流订单的创建是可以有一定延迟的。所以消息系统需要解耦,订单创建完成之后发一条消息到MQ,LC根据自己的业务需求去MQ来拉消息,这样就可以用少量的机器完成任务。

MQ顺序消息

MQ顺序消息分为两种情况:全局顺序,对于指定的一个Topic,所有消息将按照严格的先入先出的顺序,进行顺发布和顺序消费;分区顺序,对于指定的一个Topic,所有消息根据shardingkey进行区块分区,同一个分区内的消息将按照严格的先入先出的顺序,进行顺发布和顺序消费,可以保证一个消息被一个进程消费。

a2d60a075cd3ebc4552c5956dd5a6e097501b371

其中一个应用是,双十一要做买卖家的消息同步,即把买家数据同步到卖家库,具体来说根据seller_id做hash写到MQ的不同队列里面去,消费方来拉取每一个seller_id的消息,找到自己对应的卖家库进行同步。

分布式事务

97a89137c74782a533899e3941843b932875e9ad

一个交易系统下单之后,会发一条消息到MQ里面,购物车会接收消息把购物车里的状态清空。如果此时消息发送失败,购物车就没法清空。面对这种情况,开始时先发送一条半事务消息,交易系统开始下单,所有事情做完之后再将半事务提交,只有主动提交成功消息队列才会将这条消息实际发送给用户。如果下单过程失败可以主动回滚这条消息,购物车和消息队列可以做到没有脏数据。

大规模机器的Cache同步

双十一大促时,各个分会场会有玲琅满目的商品,每件商品的价格都会实时变化。使用缓存技术也无法满足对商品价格的访问需求,缓存服务器网卡跑满。访问较多次商品价格查询影响会场页面的打开速度。此时需要提供一种广播机制,一条消息本来只可以被集群的一台机器消费,如果使用广播模式,那么这条消息会被所有节点消费一次,相当于把价格信息同步到需要的每台机器上,取代缓存的作用。

实时计算

主要是做一个消息总线,业务系统自动采集数据,把消息分发达下游的实时计算系统中,根据实时计算结果给业务方做服务。

MQ应用案例

add25b8c900c688b52b913b093497d743fcfd9cd

上图是管易用户通过MQ来做订单的流转、商品库存、实时监控的案例。

e3791e40683b9d4d1b3bc0139f61709b1a132fb8

车联网的平台利用MQTT把车辆上的所有信息搜集起来通过内置在车辆上的模块发送到MQ的服务端,服务端可以给下游做推送订阅服务,也可以进行实时的数据分析处理。
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
24天前
|
消息中间件 存储 Java
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
|
23天前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
63 5
|
17天前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
20天前
|
监控 Cloud Native 持续交付
云原生架构下微服务的最佳实践与挑战####
【10月更文挑战第20天】 本文深入探讨了云原生架构在现代软件开发中的应用,特别是针对微服务设计模式的最优实践与面临的主要挑战。通过分析容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,阐述了如何高效构建、部署及运维微服务系统。同时,文章也指出了在云原生转型过程中常见的难题,如服务间的复杂通信、安全性问题以及监控与可观测性的实现,为开发者和企业提供了宝贵的策略指导和解决方案建议。 ####
42 5
|
20天前
|
Kubernetes Cloud Native 持续交付
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
|
19天前
|
监控 安全 Serverless
"揭秘D2终端大会热点技术:Serverless架构最佳实践全解析,让你的开发效率翻倍,迈向技术新高峰!"
【10月更文挑战第23天】D2终端大会汇聚了众多前沿技术,其中Serverless架构备受瞩目。它让开发者无需关注服务器管理,专注于业务逻辑,提高开发效率。本文介绍了选择合适平台、设计合理函数架构、优化性能及安全监控的最佳实践,助力开发者充分挖掘Serverless潜力,推动技术发展。
41 1
|
1月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
63 7
|
21天前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
|
22天前
|
监控 安全 Java
构建高效后端服务:微服务架构深度解析与最佳实践###
【10月更文挑战第19天】 在数字化转型加速的今天,企业对后端服务的响应速度、可扩展性和灵活性提出了更高要求。本文探讨了微服务架构作为解决方案,通过分析传统单体架构面临的挑战,深入剖析微服务的核心优势、关键组件及设计原则。我们将从实际案例入手,揭示成功实施微服务的策略与常见陷阱,为开发者和企业提供可操作的指导建议。本文目的是帮助读者理解如何利用微服务架构提升后端服务的整体效能,实现业务快速迭代与创新。 ###
56 2
|
29天前
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践

相关产品

  • 云消息队列 MQ