消息队列(MQ)可应用在多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。近期,消息队列(MQ)推出顺序消息消息、MQTT移动物联套件、Kafka企业级消息服务。下述内容将解析消息队列(MQ)顺序消息、车联网、Kafka企业级消息服务的应用场景。
1. 消息类型及多种场景
消息队列支持多种消息类型:
- 普通消息:最大4M,消息越小,性能越高
- 事务消息:两阶段提交、解决分布式事务问题
- 定时消息:消息的延时或者定时投递;最长40天
- 顺序消息:全局顺序、分区顺序;严格保证消息的顺序
通用场景
一对多、多对多异步解耦
基于发布订阅模型,分布式应用异步解耦,可以增加应用的水平扩展性,增加前端应用快速客户反应能力。
削峰场景
大促等流量洪流突然来袭时,MQ可以缓冲突发流量,避免整个系统崩溃。
日志监控
做为重要日志的监控通信管道,将应用日志监控对系统性能影响降到最低。
性能报告
消息队列秉持开放、共享的原则拥抱开源生态,无技术绑定,2016年阿里巴巴正式宣布将 MQ 内核引擎 RocketMQ 捐赠给 Apache 软件基金会;与此同时,全面融合 kafka 生态,做到无缝迁移,打造更安全、更可靠、更易运维的 kafka 企业级消息服务。
此次我们总结了几款业界主流消息中间件产品的对比报告:
项目 | 消息队列(MQ) & Kafka 企业级消息服务 | Apache RocketMQ(开源) | Apache Kafka(开源) | RabbitMQ(开源) |
---|---|---|---|---|
安全防护 | √ | × | × | × |
主子账号支持 | √ | × | × | × |
Low Latency | √ | × | × | × |
定时消息 | √(支持秒级,最长可支持40天) | √(只支持18个固定Level) | × | √ |
事务消息 | √(支持HA) | √(不支持HA) | × | × |
全链路消息轨迹 | √ | × | × | × |
消息堆积查询 | √ | √ | × | × |
消息回溯 | √ | √ | × | × |
可靠性 | 非常好,99.99999999% | 好 | 一般 | 一般 |
可用性 | 非常好,99.99%,Always Writable | 好 | 好 | 好 |
性能(常规 < 128字节 ) | 非常好 ~= 50w/sec | 非常好 ~= 50w/sec | 非常好 ~= 23w/sec | 一般 ~= 6w/sec |
性能(万级Topic场景) | 非常好 | 非常好 | 低 | 低 |
性能(海量消息堆积场景) | 非常好 | 非常好 | 低 | 低 |
最大队列数(理论值) | ~= 10w | ~= 10w | ~= 1k | ~= 1k |
服务支持 | 阿里云平台统一运维 | 用户运维成本高 | 用户运维成本高 | 用户运维成本高 |
2. MQTT移动物联套件
消息队列(MQ)提供 MQ-MQTT 移动物联套件,连接端(如移动设备、智能家电、汽车、机器人等)和云,实现双向通信,可支撑亿级设备连接与百万消息并发;
一般来说车联网系统是一个端到云的多层体系,其数据流主要分为2类:
- 数据上行采集:安装在车辆等执行部件上的传感器采集状态数据后,定期上传到服务端进行分析和应用。其特点是,车辆和传感器种类众多,基数大,移动数据网络大多走4G,不如固定网络稳定。
- 指令下行推送:远程服务端根据设定,下行推送控制指令数据,控制指定的客户端进行某些行为。
为什么选择消息队列 MQTT 移动物联套件
- 接入简单:提供了标准的 MQTT 物联网协议,支持多语言跨平台,接入更简单。
- 多协议支持:支持自定义协议,包括车联网领域众多终端协议,例如国标808,新能源国标协议等等。
- 安全灵活:支持设备级身份校验和SSL加密,数据传输更安全。同时可支持第三方认证体系,更灵活。
- 服务稳定:消息队列服务于整个阿里巴巴集团已超过8年,经过阿里巴巴交易核心链路反复打磨与历年双十一严苛考验,是个低延迟、高并发、高可用、高可靠,可支撑万亿级数据洪峰的分布式消息中间件。
- 生态丰富:消息队列拥抱开源,无技术绑定,无缝对接 kafka 生态以及各种流计算引擎与监控系统,实现大数据分析与运营。
3. 顺序消息的典型应用场景
下面,将介绍消息队列(MQ)新推出的顺序消息的应用场景:
场景一:全局顺序
在金融行业中,外汇/证券交易有一个顺序性原则:1. 价格优先 2.时间优先,价格不同则价格优先,价格相同则时间优先;很明显,在这种情况下,买卖交易双方都是有严格顺序性的。消息队列的顺序消息可以很好的处理此类场景。
比如外汇交易中,可以指定不同的Topic对应不同的外汇兑换币种交易,同一类外汇兑换币种交易时采用全局顺序消息。
场景二:分区顺序
在电商领域里面,每天都会有大量的交易发生,万万亿条数据已无法通过单一实例数据库进行处理,因此都会对数据库进行拆分,根据特定的key进行分库分表。为了提高数据更新与查询的效率,尽可能的避免全库全表扫描,买家库会根据买家ID进行拆分,卖家库则需要根据卖家ID进行拆分。那么,由此就会产生多种不同维度的数据异构复制的场景。
异构数据复制的过程中,目标数据库的数据必须严格按照源数据库中数据的增、删、改顺序才能保证数据的正确性。消息队列的分区顺序就可以很好的解决此类场景。
全局顺序为了严格保证顺序,消息的发布与订阅都必须是单并发,这会导致性能受到单并发的影响。而分区顺序则则可以根据分区的数量进行并发处理,从而提高整体的性能。由于在订单交易过程中,不同卖家的交易订单是不会有顺序关联的,只有在相同卖家、相同订单的情况下才必须保证顺序。因此,我们可以根据 seller_id 进行分区。
4. 消息队列(MQ)现已提供 Kafka 企业级消息服务
消息队列提供的 Kafka 企业级消息服务包括以下特点:
无缝迁移
业务系统基于现有的 Kafka 代码与生态进行开发,无需任何改造,即可无缝迁移到阿里云消息队列(MQ)提供的 Kafka 消息服务。
更安全
消息队列(MQ)提供的 Kafka 消息服务利用 SASL 机制对用户身份进行认证,并利用 SSL 对通道进行加密,提供更加安全的消息服务;
高可靠/高可用
消息持久化落盘到消息队列,支持数多副本以及主备自动切换,可靠性达99.99999999%,服务可用性高达99.9%。
高性能
支持在万级Topic,以及海量的消息堆积的情况下,也始终保持超高的性能。
统一运维
提供一整套包括资源申请、资源授权、消息堆积查询、消息全链路轨迹、监控告警等运维服务,提升用户的产品体验。
消息互通
用户可以通过 Kafka Client 发送消息,MQ Client 订阅消息,反之亦然,真正做到消息队列(MQ)与 Kafka 消息完全互通。