0
点赞
收藏
分享

微信扫一扫

【云原生】阿里云MQTT和RocketMQ的对比


目录

  • ​​一、简介​​
  • ​​MQTT​​
  • ​​RocketMQ​​
  • ​​二、背景信息​​
  • ​​三、适用场景对比​​
  • ​​组合使用场景示例​​
  • ​​场景示例一​​
  • ​​场景示例二​​
  • ​​四、选型指导​​

一、简介

本文介绍微消息队列MQTT版和传统消息中间件的关联和区别,并针对实际应用场景下的产品选型给出建议。

MQTT

​​微消息队列MQTT版​​是阿里云推出的一款面向移动互联网以及物联网领域的轻量级消息中间件。如果说传统的消息队列中间件一般应用于微服务之间,那么适用于物联网的微消息队列MQTT版则实现了端与云之间的消息传递和真正意义上的万物互联。本文介绍微消息队列MQTT版的消息收发模型、产品优势和应用场景。

【云原生】阿里云MQTT和RocketMQ的对比_java-rocketmq

RocketMQ

​​消息队列RocketMQ版​​是阿里云基于Apache RocketMQ构建的低延迟、高并发、高可用、高可靠的分布式“消息、事件、流”统一处理平台,面向互联网分布式应用场景提供微服务异步解耦、流式数据处理、事件驱动处理等核心能力。

【云原生】阿里云MQTT和RocketMQ的对比_mqtt_02

二、背景信息

传统的消息中间件,例如消息队列RocketMQ版、消息队列Kafka版等都是面向微服务大数据等领域,负责消息的存储和转发,消息的生产者和消费者都是服务端应用。

这种设计很适合服务端技术栈固定、语言平台固定的场景。而移动互联网和IoT领域则有所不同,这类场景更侧重于多语言多平台的海量设备接入,消息的生产和消费过程的业务属性很突出,传统的消息中间件并不适合这些领域。

秉承单一职责的原则,微消息队列MQTT版在设计上是一个面向移动互联网和IoT领域的无状态网关,只关心海量移动端设备的接入、管理和消息传输,消息数据的存储则都会路由给后端存储产品,例如传统的消息中间件消息队列RocketMQ版、消息队列Kafka版等产品。

在这种职责划分下,终端设备将消息发送到微消息队列MQTT版后,消息会根据微消息队列MQTT版绑定的存储产品被路由到指定产品,云端应用依然可以维持传统的微服务开发方案,通过对接云端存储产品即可和终端设备进行互动,两者之间通过微消息队列MQTT版实现了数据互通能力。

三、适用场景对比

在一个业务场景中,可能包含多种不同类型的应用组件,每个组件承担不同的角色。因此,在方案选型时如需要使用到消息产品,需要先了解微消息队列MQTT版和传统消息中间件的关联和区别,合理搭配使用,比如组件A的消息收发使用微消息队列MQTT版,组件B的消息收发使用消息队列RocketMQ版。

下文将根据场景举例描述微消息队列MQTT版和传统的消息中间件的区别,为方便描述,传统的消息中间件以消息队列RocketMQ版为例,其他产品例如消息队列Kafka版和消息队列RabbitMQ版同理。

表 1. 适用场景对比

产品名

适用场景

微消息队列MQTT版

面向移动端场景,移动端场景一般都具备海量设备,单设备数据较少的特点。因此,微消息队列MQTT版适用于拥有大量在线客户端(很多企业设备端过万,甚至上百万),但每个客户端消息较少的场景。

消息队列RocketMQ版

面向服务端的消息引擎,主要用于服务组件之间的解耦、异步通知、削峰填谷等,服务器规模较小(极少企业服务器规模过万),但需要大量的消息处理,吞吐量要求高。因此,消息队列RocketMQ版适用于服务端进行大批量的数据处理和分析的场景。

组合使用场景示例

场景示例一

在物联网IoT场景中,成千上万(甚至数百万)规模的设备传感器可使用微消息队列MQTT版上传数据,需做数据分析的服务端(即部署在服务器上的应用)则可以通过消息队列RocketMQ版完成数据的分析与处理。

场景示例二

在车联网场景中,上百万辆车需要上传车辆信息数据到云端(服务端),云端同时也会下发指令到任意车辆或广播到所有的车辆。车辆可以通过MQTT SDK连接到微消息队列MQTT版实现数据上报以及指令接收,监管系统(数据分析系统)可以通过消息队列RocketMQ版的SDK进行消息订阅以及指令下发。如下图所示。

【云原生】阿里云MQTT和RocketMQ的对比_消息队列_03


基于以上区别,推荐您在移动端设备上使用微消息队列MQTT版,而在服务端应用中则使用消息队列RocketMQ版(或者其他消息产品)。

功能对比

微消息队列MQTT版和消息队列RocketMQ版的具体功能特性的对比如下:

表 2. 功能对比

功能特性

微消息队列MQTT版

消息队列RocketMQ版

支持协议

TCP、WebSocket、MQTT

TCP、HTTP、AMQP

客户端连接数

客户端规模庞大,百万甚至千万级

一般服务器规模较小,极少数万级

单客户端消息量

单个客户端需要处理的消息少,一般定时收发消息

单个客户端处理消息量大,注重吞吐量

部署场景

移动设备、App软件、H5页面等

服务端应用

消费模式

支持广播模式

支持​​集群消费和广播消费​​

顺序支持

只支持上行顺序,不支持下行顺序(后续开放)

支持上行和下行顺序

多语言/系统支持(TCP协议)

支持Java、C、C++、.NET、Android、iOS、Python、JS、Go等多种语言和系统

5.0版本:支持Java、C++、.NET,4.0版本支持:多语言

访问凭证

支持​​RAM主子账号授权​​​和MQTT Token的临时访问模式,详细信息,请参见​​鉴权概述​​。

支持​​RAM主子账号授权​​​和​​通过RAM角色实现跨云账号授权​​(STS临时授权访问)

注:以上多语言/系统支持仅对比TCP协议,RocketMQ4.0版本支持多语言的http协议SDK

四、选型指导

基本原则总结如下:

对于部署在服务器上的应用,推荐使用消息队列RocketMQ版接入。
对于部署在移动终端、App或浏览器页面等平台上的应用,推荐使用微消息队列MQTT版接入。
针对常见的应用场景,建议的微消息队列MQTT版和消息队列RocketMQ版选型如下:

表 3. 选型推荐

【云原生】阿里云MQTT和RocketMQ的对比_java-rocketmq_04


说明:

√表示建议使用该消息队列产品;×表示不建议使用该消息队列产品。

参考链接:
​​​https://help.aliyun.com/document_detail/175700.html​​​​https://mp.weixin.qq.com/s/spJ40hn2vTiq9Uew2T9o_g​​​​https://cloud.tencent.com/developer/article/1024641​​​​https://help.aliyun.com/document_detail/42419.html​​​​https://help.aliyun.com/document_detail/29532.html​​


举报

相关推荐

0 条评论