RocketMQ 之 IoT 消息解析:物联网需要什么样的消息技术?

作者:林清山(隆基)

前言:

从初代开源消息队列崛起,到 PC 互联网、移动互联网爆发式发展,再到如今 IoT、云计算、云原生引领了新的技术趋势,消息中间件的发展已经走过了 30 多个年头。

目前,消息中间件在国内许多行业的关键应用中扮演着至关重要的角色。随着数字化转型的深入,客户在使用消息技术的过程中往往同时涉及交叉场景,比如同时进行物联网消息、微服务消息的处理,同时进行应用集成、数据集成、实时分析等,企业需要为此维护多套消息系统,付出更多的资源成本和学习成本。

在这样的背景下,2022 年,RocketMQ 5.0 正式发布,相对于 RocketMQ 4.0,架构走向云原生化,并且覆盖了更多的业务场景。

物联网消息场景

我们先来了解一下物联网的场景是什么?消息在物联网里面有什么作用?

物联网肯定是最近几年最火的技术趋势之一,有大量的研究机构、行业报告都提出了物联网快速发展的态势:

首先,物联网设备规模爆发式增长,预测会在 2025 年达到 200 多亿台。

其次,物联网的数据规模快速增长,来自物联网的数据增速接近 28%,并且未来有 90% 以上的实时数据来自物联网场景。这也就意味着未来的实时流数据处理的数据类型会有大量物联网数据。

最后,边缘计算是一个重要的趋势,未来会有 75% 的数据在传统数据中心或者云环境之外来处理,这里的边缘指的是商店、工厂、火车等等这些离数据源更近的地方。由于物联网产生的数据规模很大,如果全部数据传输到云端处理,会面临难以承受的成本,应该充分利用边缘资源直接计算,再把高价值的计算结果传输云端;另一方面,在离用户近的地方计算直接响应,可以降低延迟,提升用户体验。

物联网的发展速度这么快,数据规模那么大,跟消息有什么关系呢?

我们通过这个图来看一下消息在物联网场景发挥的作用:

第一个作用是连接,承担通信的职责,支持设备和设备的通信,设备和云端应用的通信,比如传感器数据上报、云端指令下发等场景,作为支撑 IoT 的应用架构,连接云边端。

第二个作用是数据处理,物联网设备源源不断的产生数据流,有大量需要实时流处理的场景,比如设备维护,高温预警等等。基于 MQ 的事件流存储和流计算能力,可以构建物联网场景的数据架构。

图片

物联网消息技术

下面我们来看看在物联网场景里,对消息技术有什么诉求?

我们先从这个表格来对比,物联网消息技术跟之前讲过的经典消息技术的区别。

图片

经典的消息主要是为服务端系统提供发布订阅的能力,而物联网的消息技术是为物联网设备之间、设备和服务端之间提供发布订阅的能力。

我们来分别看一下各自场景的特点:

  • 经典消息场景

    消息 Broker、消息客户端都作为服务端系统的一部分,通常部署在 IDC 或者公共云环境中配置性能较高的服务器上,包括容器、虚拟机、物理机等形式。消息客户端和服务端通常部署在同一个机房,内网环境具有高带宽和稳定的网络质量。客户端数量通常与应用服务器数量相对应,规模较小,一般是数百到数千台服务器,只有超大型互联网公司才会达到百万级。从消息生产的角度来看,每个客户端的消息生产发送量一般对应到其业务的 TPS,能达到数百数千 TPS。在消息消费方面,通常采用集群消费,一个应用集群共享一个消费者 ID,共同分担该消费组的消息。每条消息的订阅比通常也不高,正常情况下不会超过 10 个。

  • IoT 消息场景

    很多条件都与经典消息场景不一样,甚至截然相反。IoT 的消息客户端通常是微型设备,其计算和存储资源都非常有限。消息服务端可能要部署在边缘环境中,使用的服务器配置也会比较低。另一方面,物联网设备通常通过公网连接,网络环境特别复杂,并且由于设备经常移动,有时会面临断网或处于弱网环境,网络质量差且不稳定。物联网场景中,消息客户端实例数对应到物联网设备数,可能达到亿级别,远远超过大型互联网公司的服务器数量。尽管每个设备的消息 TPS 不高,但是一条消息有可能同时被百万个设备接收,订阅比特别高。

RocketMQ - MQTT

由此可以看出,物联网需要的消息技术和经典的消息技术很不一样。接下来我们再来看,为了应对物联网的消息场景,RocketMQ 5.0 做了哪些事情?

RocketMQ 5.0 我们发布了一个子产品,叫做 RocketMQ - MQTT。它有三个技术特点:

第一,它采用标准的物联网协议 MQTT,该协议面向物联网弱网环境、低算力的特点设计,协议十分精简。它还提供丰富的特性,支持多种订阅模式,多种消息 QoS,比如“最多一次”、“最少一次”和“当且仅当一次”。其领域模型设计也是基于“消息、主题、发布订阅”等概念,与 RocketMQ 高度兼容,为构建一个云端一体化的 RocketMQ 产品形态奠定了坚实的基础。

第二,它采用存算分离的架构。RocketMQ Broker 作为存储层,MQTT 相关的领域逻辑都在 MQTT Proxy 层实现,并面向海量连接、订阅关系、实时推送进行深度优化,Proxy 层可以根据物联网业务负载提供独立的弹性扩展,例如增加连接数只需新增 Proxy 节点。

第三,它采用端云一体化的架构。因为领域模型接近,并且以 RocketMQ 作为存储层,每条消息只需存储一份,这份消息既能被物联网设备消费,也能被云端应用消费。另外,RocketMQ 本身是天然的流存储,流计算引擎可以无缝对 IoT 数据进行实时分析。

图片

接下来我们再从几个关键的技术点,来深入了解 RocketMQ 的物联网技术实现。

(一)IoT 消息存储模型

1. 读放大为主,写放大为辅

首先要解决的是物联网消息的存储模型,在发布订阅的业务模型里,一般会采用两种存储模型,一种是读放大,每条消息只写到一个公共队列,所有消费者读取这个共享队列,维护自己的消费位点;另外一种是写放大,每个消费者有自己的队列,每条消息都分发到目标消费者的队列中,消费者只读自己的队列。

因为在物联网场景里,一条消息可能会有百万级的设备消费,所以,很显然,选择读放大的模型能显著降低存储成本、提高性能。

但是,只选择读放大的模式没法完全满足要求,MQTT 协议有其特殊性,它的 Topic 是多级 Topic,且订阅方式既有精准订阅,也有通配符匹配订阅。比如家居场景,我们定义一个多级主题,如“家/浴室/温度”,有直接订阅完整多级主题的“家/浴室/温度”,也有采用通配符订阅只关注“温度”的,还有只关注一级主题为“家”的所有消息。

对于直接订阅完整的多级主题消费者可以采用读放大的方式直接读取对应多级主题的公共队列;而采用通配符订阅的消费者无法反推消息的 Topic,所以需要在消息存储时根据通配符的订阅关系多写一个通配符队列,这样消费者就可以根据其订阅的通配符队列读取消息。

这就是 RocketMQ 采用的读放大为主,写放大为辅的存储模型。

图片

2. 端云一体化存储

基于前文的分析,我们设计了 RocketMQ 端云一体化的存储模型,见下图。

图片

消息可以来自各个接入场景(如服务端的 RMQ/AMQP,设备端的 MQTT),但只会写一份存到 Commitlog 里面,然后分发出多个需求场景的队列索引,比如服务端场景(MQ/AMQP)可以按照一级 Topic 队列进行传统的服务端消费,设备端场景可以按照 MQTT 多级 Topic 以及通配符订阅进行消费消息。这样我们就可以基于同一套存储引擎,同时支持服务端应用集成和 IoT 场景的消息收发,达到端云一体化。

(二)队列规模问题

我们都知道像 Kafka 这样的消息队列每个 Topic 是独立文件,但是随着 Topic 增多,消息文件数量也增多,顺序写就退化成了随机写,性能明显下降。RocketMQ 在 Kafka 的基础上进行了改进,使用了一个 Commitlog 文件来保存所有的消息内容,再使用 CQ 索引文件来表示每个 Topic 里面的消息队列,因为 CQ 索引数据比较小,文件增多对 IO 影响要小很多,所以在队列数量上可以达到十万级。但是,这个终端设备队列的场景下,十万级的队列数量还是太小了,我们希望进一步提升一个数量级,达到百万级队列数量,所以,我们引入了 Rocksdb 引擎来进行 CQ 索引分发。

图片

面向 IoT 的百万级队列设计

Rocksdb 是一个广泛使用的单机 KV 存储引擎,有高性能的顺序写能力。因为我们有了 Commitlog 已具备了消息顺序流存储,所以可以去掉 Rocksdb 引擎里面的 WAL,基于 Rocksdb 来保存 CQ 索引。在分发的时候,我们使用了 Rocksdb 的 WriteBatch 原子特性,分发时把当前的 MaxPhyOffset 注入进去,因为 Rocksdb 能够保证原子存储,后续可以根据这个 MaxPhyOffset 来做 Recover 的 checkpoint。最后,我们也提供了一个 Compaction 的自定义实现,来进行 PhyOffset 的确认,以清理已删除的脏数据。

图片

(三)IoT 消息推送模型

介绍了底层的队列存储模型后,我们再详细描述一下上层的消息实时推送(匹配查找和可靠触达)是怎么做的?

在 RocketMQ 的经典消费模式里,消费者是直接采用长轮询的方式,从客户端直接发起请求,精确读取对应的 Topic 队列。而在 MQTT 场景里,因为客户端数量、订阅关系数量规模巨大,无法采用原来的长轮询模式,消费链路的实现更加复杂,所以,这里采用的是推拉结合的模型。

下图展示的是一个推拉模型,物联网终端设备通过 MQTT 协议连到 Proxy 节点。消息从服务端(MQ/AMQP/MQTT)发送过来,存到 Topic 队列后,会有一个 notify 逻辑模块来实时感知这个新消息到达,然后会生成消息事件(就是消息的 Topic 名称),把这个事件推送至 Proxy 节点,Proxy 节点根据它连上的终端设备订阅情况进行内部匹配,找到哪些终端设备能匹配上,然后会触发 pull 请求去存储层读取消息,再推送到终端设备。

一个重要问题,就是订阅关系的匹配查找。一般有两种方式:第一种,简单的广播事件;第二种,集中存储在线订阅关系(比如图里的 lookup 模块),然后进行匹配查找,再精准推送。

事件广播机制看起来有扩展性问题,但是其实性能并不差,因为我们推送的数据很小,就是 Topic 名称,而且相同 Topic 的消息事件可以攒批推送,RocketMQ 5.0 就是默认采用的这个方式。集中存储在线订阅关系,这个也是常见的一种做法,如保存到 RDS、Redis 等等,但要保证数据的实时一致性也是有难度的,而且要进行匹配查找对整个消息的实时链路 RT 开销也会有一定的影响。下图模型中可以看到,在 Proxy 节点还会引入一个 Cache 模块,用来做消息队列 Cache,避免在广播场景下每个终端设备都向存储层发起读数据的情况。

图片

总结

本文分三个部分深入探讨了 RocketMQ 5.0 关于物联网消息技术的应用与优化,第一部分概述一个典型的物联网技术架构,并重点阐述消息队列在此架构中的关键作用。第二部分,探讨了物联网场景对消息技术的特殊要求,并分析这些要求与服务端应用中的消息技术之间的差异。第三部分,深入介绍了 RocketMQ 5.0 的 MQTT 子产品,阐释其如何有效应对物联网领域的技术挑战。旨在为大家提供一个全面的视角,理解消息队列在物联网中的重要性及其解决方案。

图片

我们将持续为您带来深度剖析 RocketMQ 5.0 的系列文章,欢迎点击此处进入官网了解更多详情,也欢迎填写表单进行咨询:https://survey.aliyun.com/apps/zhiliao/bzT3AfPaq

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/313353.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图神经网络推荐系统

链接(何向南教授):https://hexiangnan.github.io/papers/wsdm22-tutorial-proposal.pdf 摘要: 近年来,图神经网络(graph neural network, GNN)以其强大的结构化数据处理能力和对高阶信息的挖掘能力,成为许…

【Go语言快速上手(二)】 分支与循环函数讲解

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Go语言专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多Go语言知识   🔝🔝 Go快速上手 1. 前言2. 分支与循环2.1…

libtorch+cuda12.0cmake编译失败“Failed to find nvToolsExt”解决办法

博主已安装cuda12.0以及对应的libtorch。 这里可以直接通过安装cuda11.6(cuda11.8也可以)中的【Nsight NVTX】解决。 1、下载CUDA11.6 cuda下载链接 蓝色箭头根据电脑系统win10还是win11自行选择,其余均按图中所以选择。 2、安装 下载完…

集合体系java

Collection:单列集合:每个元素只包含一个值 Collection集合存储的是地址 Collection的三种遍历方法如下 //迭代器是用来遍历集合的专用方式(数组没有迭代器),在java中迭代器的代表是Iterator //boolean hasNext():询问当前位置…

图书管理系统概述

自友图书馆管理系统解决方案适用于中小学、大中专院校以及企事业单位中小型图书馆的自动化管理需求,其功能覆盖了图书馆自动化集成管理业务流程所包括的所有环节。《图书馆管理系统》首先应该按照我国图书馆行业通用CNMARC格式及《中图法第四版》行业标准开发而成,支…

Swift Publisher 5 for mac:打造精美版面

Swift Publisher 5 for mac:打造精美版面 Swift Publisher 5是一款专业的版面设计和编辑工具,为Mac用户提供了强大的设计功能和直观的操作界面。以下是关于Swift Publisher 5的功能介绍: 直观易用的界面:用户能够轻松地使用Swift …

甘特图:项目管理者的必备神器,如何提高工作效率?

甘特图是什么?项目管理者大多都熟悉甘特图,它是一种直观展示项目计划执行过程的工具。通过条形图来显示项目、任务的时间安排,以及实际进度与计划进度的对比情况。 在我个人的项目管理实践中,甘特图确实帮助我提高了工作效率&am…

goproxy 简单介绍 及一键安装脚本

goproxy 官网 https://goproxy.cn/ GoProxy 是一项用于 Go 模块的高性能代理服务,旨在为 Go 开发人员提供更快速、更可靠的模块下载体验。它提供以下主要功能: 全球分布式代理服务器: GoProxy 在全球多个地区部署了代理服务器,例如拉斯维加…

威纶通触摸屏与S7-1200进行标签通信(符号寻址)的具体方法示例

威纶通与S7-1200进行标签通信(符号寻址)的具体方法示例 前面和大家分享了威纶通与S7-1200通过绝对地址进行以太网通信的具体方法,具体内容可参考以下链接中的内容: 威纶通触摸屏与S7-1200以太网通信的具体方法和步骤(非常详细) 如下图所示,打开博途软件,新建一个项目,…

MCU最小系统的电源模块设计和复位模块的设计

最小操作系统就是一个电路,这个电路里面必须要的东西(如人需要喝水吃饭温度等情况,才能或者) 现在我们要解决这三个问题 这里V开头的,都是电源管脚 这里解释一下: 这里要注意哪些是电路电压,哪…

机器学习和深度学习--李宏毅 (笔记与个人理解)Day 16

Day 16 deep Learning – 鱼与熊掌兼得 最近在减重, 昨天跑了个一公里,然后今天上午又打了个篮球,真是老胳膊老腿了,运动完给我困得不行 Review 见前面的笔记 这里说dl 会提供一个足够大的模型, 来使得Dall loss 足够小…

C# 自动填充文字内容到指定图片

目录 需求 开发运行环境 方法设计 实现代码 AddText方法 图片转Base64 调用示例 小结 需求 在我们的一些发布系统项目应用中,会经常发布一些链接图标,该图标基本上以模板背景为主,并填充项目文字内容。解决方式一般会让美工进行制作…

设计模式胡咧咧之策略工厂实现导入导出

策略模式(Strategy Pattern) 定义: 定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。 本质: 分离算法,选择实现 应用场景 何时使用 一个系统有许多类,而区分他们的只是他们直接…

动手学大模型应用开发--Chapter 01 大模型概念

文章目录 前言一、学习知识点概要1.1 LLM1.3 ChatGPT1.3 RAG1.3.1 RAG解决的问题1.3.2 RAG的主要流程: 1.4 LangChain 前言 本学习笔记为datawhale动手学大模型应用开发的学习内容,学习链接为: https://datawhalechina.github.io/llm-univer…

计算机视觉实验五——图像分割

计算机视觉实验五——图像分割 一、实验目标二、实验内容1.了解图割操作,实现用户交互式分割,通过在一幅图像上为前景和背景提供一些标记或利用边界框选择一个包含前景的区域,实现分割①图片准备②代码③运行结果④代码说明 2.采用聚类法实现…

浅析ARM Contex-CM3内核架构

目录 概述 1. Cortex-M3类型MCU 1.1 MCU 架构 1.2 实时性系统概念 1.3 处理器命名法 1.4 MCU的一些知识 2. Cortex-M3 概览 2.1 Cortex-M3综述 2.2 寄存器组 2.3 操作模式和特权极别 2.4 内建的嵌套向量中断控制器 2.5 存储器映射 2.6 总线接口 2.7 存储器保护单元…

小型CNC数控机床深受到韩国客户青睐

随着公司的快速发展,育菁科研成果的不断突破和自主创新能力的提高,育菁小型CNC机床迎合了国际化大市场的需求,吸引了众多国外客户的眼球,近日,韩国客户工程师和CEO到我司进行实地考察交流 在胡经理和外贸同事陪同下&am…

异构超图嵌入的图分类 笔记

1 Title Heterogeneous Hypergraph Embedding for Graph Classification(Xiangguo Sun , PictureHongzhi Yin , PictureBo Liu , PictureHongxu Chen , PictureJiuxin Cao , PictureYingxia Shao , PictureNguyen Quoc Viet Hung)【WSDM 2021】 2 Co…

哪个品牌蓝牙耳机好?掌握六大选购逻辑,选准不选贵!

​随着科技的不断进步,蓝牙耳机已经成为了我们生活中不可或缺的一部分。它不仅摆脱了有线的束缚,还提供了极大的自由度。然而,面对市场上琳琅满目的蓝牙耳机,挑选一款性价比高的产品确实需要一些技巧。作为一名资深的耳机用户&…

民族运动饮料之父『健力宝』×企企通正式启动SRM项目,打造饮料行业采购数字化应用标杆

近日,为推进采购阳光化、数字化和智能化,提升管理效率与质量,企企通与中国电解质饮料的领军品牌广东健力宝股份有限公司(以下简称“健力宝”)成功签约并召开项目启动会。健力宝行政副总裁赵总、CIO李总、采购本部总监杨…