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

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

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

在阿里云生态日,阿里巴巴中间件产品专家不铭分享了《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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2天前
|
监控 关系型数据库 持续交付
构建高效微服务架构:后端开发的最佳实践
【5月更文挑战第30天】随着现代应用的复杂性日益增加,微服务架构已成为众多企业和开发者的首选。本文将深入探讨如何构建一个高效的微服务系统,包括关键的设计原则、技术栈选择、以及确保系统稳定性和扩展性的实践方法。我们将通过实际案例分析,揭示后端开发中实现敏捷性和可维护性的策略,为追求卓越的软件工程师提供实用的指导。
|
3天前
|
监控 Devops 持续交付
构建高效微服务架构:后端开发的最佳实践
【5月更文挑战第29天】 在当今快速迭代和竞争激烈的软件市场中,构建一个既高效又可扩展的后端系统至关重要。本文深入探讨了如何通过采用微服务架构模式来优化后端开发流程。文章将介绍微服务的核心概念,分析其优势与挑战,并提供实现微服务架构的一系列策略,包括服务的拆分、独立部署、以及持续集成/持续交付(CI/CD)的实践。此外,我们还将讨论确保系统稳定性和性能监控的关键步骤。通过实际案例分析,本文旨在为后端开发人员提供一套全面的指南,帮助他们在不断变化的技术环境中保持竞争力。
|
3天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的最佳实践
【5月更文挑战第29天】 在当今快速迭代和持续部署的开发环境中,微服务架构已成为许多组织的首选解决方案。本文将深入探讨如何通过一系列后端开发最佳实践来构建和维护一个高效的微服务系统。我们将从服务的划分与设计原则出发,讨论如何确保系统的可扩展性、灵活性以及容错能力,并最终实现一个既满足业务需求又能适应未来变化的后端架构。
|
3天前
|
消息中间件 数据管理 开发者
构建高效微服务架构:后端开发的最佳实践
【5月更文挑战第29天】 在现代软件开发的浪潮中,微服务架构已经成为了众多企业和开发者的首选解决方案。它通过将应用程序拆分为一系列小型、独立的服务来提高系统的可扩展性、弹性和维护性。本文将深入探讨构建高效微服务架构的关键要素,包括服务的划分策略、通信机制、数据管理以及持续集成和部署。我们将从理论出发,结合实际案例,为后端开发提供一套行之有效的最佳实践,帮助开发者在构建和维护微服务系统时避免常见的陷阱,提升系统的整体性能和稳定性。
|
4天前
|
消息中间件 存储 网络协议
手写消息队列(基于RabbitMQ)
手写消息队列(基于RabbitMQ)
|
4天前
|
监控 数据管理 持续交付
探索现代微服务架构的最佳实践
【5月更文挑战第28天】 随着软件开发的复杂性增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构应运而生,提供了模块化、独立部署的解决方案。本文将深入探讨微服务设计的核心原则,分析其优缺点,并分享构建和维护微服务系统的最佳实践,包括服务划分、通信机制、数据管理等关键领域。通过实例分析和经验总结,旨在为开发者和企业提供可靠的技术指导,以实现系统的可扩展性、弹性和易维护性。
|
4天前
|
运维 监控 Devops
构建高效稳定的云基础设施:DevOps与自动化运维的融合构建高效微服务架构的最佳实践
【5月更文挑战第28天】 在数字化转型的浪潮中,企业对于云基础设施的依赖日益增加。为了应对不断变化的市场需求和提供不间断的服务,传统的IT运维模式已不再适应现代业务的发展。本文将探讨如何通过结合DevOps理念和自动化工具,实现云基础设施的高效稳定运营。我们将分析自动化运维在提升效率、降低成本以及增强系统稳定性方面的关键作用,并展示实践案例以验证其效果。
|
9天前
|
消息中间件 数据采集 Serverless
云消息队列 RocketMQ 版-消息集成-概述
消息集成是助力企业数字化转型的全栈式消息与数据集成平台,简化流程,支持云上云下、跨区域集成。它提供低代码的事件流服务,具备数据源集成、数据清洗、Serverless自定义处理等功能,支持丰富的数据源和跨端连接。然而,使用时存在如单个任务数据限制、任务名称长度等约束。消息流入(Source)负责从各种数据源获取数据,消息流出(Sink)将数据分发到目标,数据处理(Transform)允许数据转换和分析,而任务(Task)则结合这些组件执行实际的集成操作。
24 3
|
17天前
|
消息中间件 存储 Apache
MQ产品使用合集之有RocketMQ arm架构的镜像吗
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
207 1
|
17天前
|
消息中间件 存储 运维
为什么选择云消息队列 RocketMQ 版
为什么选择云消息队列 RocketMQ 版
20 1

热门文章

最新文章

相关产品

  • 云消息队列 MQ
  • http://www.vxiaotou.com