亿级万物互联新时代的物联网消息中间件 EMQX 调研

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 我们身边越来越多的硬件设备正在被嵌入芯片、注入软件,从而实现各种各样的新应用、新功能,比如智能门锁,智能音箱等,前几年炒的火热的智能家居,物联网万物互联等概念,现在正在潜移默化的影响着所有人,了解一些物联网知识对我们了解这个新时代有所帮助。

简介

最近去某餐厅吃饭,进门时智能门自动打开房门同时来一句"欢迎光临",然后伸手到门口的洗手台,水管无接触自动出水,端起菜盘走向台子选择自己喜欢的菜品,最后将菜盘放在智能结账机上,智能结账机通过图形识别算法识别到选了什么菜,然后计算出应该付多少钱,最后小编摘下口罩刷一刷人脸钱就付过去了,整个过程无需其他人的参与,也无需带任何物品包含手机。可能你也已经感受到了,我们身边越来越多的硬件设备正在被嵌入芯片、注入软件,从而实现各种各样的新应用、新功能,比如智能门锁,智能音箱等,前几年炒的火热的智能家居,物联网万物互联等概念,现在正在潜移默化的影响着所有人,了解一些物联网知识对我们了解这个新时代有所帮助。

根据 IoT Analytics 最新发布的《2022 年春季物联网状况》研究报告显示,到 2022 年,物联网市场预计将增长 18%,达到 144 亿活跃连接。全球物联网应用和设备正面临爆发式增长,将真正迎来亿级万物互联的新时代。亿万级的物联网设备连接该需要多少服务器支撑呢?接下来看一款受全球广大物联网开发者开发使用的物联网消息中间件 EMQX。

EMQX

EMQX 简介

EMQX 是什么?根据官网的介绍 EMQX 是一款「随处运行,无限连接,任意集成」的云原生分布式物联网接入平台。

EMQX 提供一体化的分布式 MQTT 消息服务和强大的 IoT 规则引擎,为高可靠、高性能的物联网实时数据移动、处理和集成提供动力,助力企业快速构建关键业务的 IoT 平台与应用。

EMQ 创始人兼 CEO 李枫表示:「EMQX 5.0 是 MQTT 领域的一个里程碑式的成果。它不仅是全球首个单集群支持 1 亿连接的分布式 MQTT 消息服务器,也是首个将 QUIC 引入 MQTT 的开创性产品。

物联网通信

详细分析 EMQX 之前先来了解一些物联网通信的知识,首先来看物联网通信的特点:物联网设备很大可能工作在不可靠、高延迟的网络环境中。

比如共享单车,使用 NB-IoT 这样的通信技术,本身的通信速率就只有不到几十 Kbps;要是被人停在城市的角落里,信号可能很不稳定。

假设使用 HTTP  协议,就需要单车先发出连接请求,然后等待服务器的响应(下发开锁指令)。这样一来,受网络通信质量的影响,很可能连接经常中断,而需要单车与服务器交互多次,那用户可能就要等很长时间。

对于这种场景来说,不只是 HTTP,其他跟 HTTP 一样单向的、同步的网络协议,都不是理想的技术方案。  物联网系统中,设备数量多,而且交互非常复杂, 比如环境监测,温度、湿度、光照、二氧化碳、甲醛含量……这些都需要不同的设备测量,而且每个房间用到的设备也不同。

硬件设备在不同的环境网络可能不太稳定,这个时候就需要借助中间层代理 Broker 帮助缓冲连接与暂时无法分发到 Client 的消息。所以物联网系统在选择网络通信的协议时,一般使用发布订阅模式来进行缓冲与解耦合,发布 - 订阅模式包含三个角色,分别是:

  • 发布者(Publisher)、
  • 经纪人(Broker)
  • 订阅者(Subscriber),

它们的关系如下图所示。


网络异常,图片无法展示
|


MQTT 协议

说到物联网的发布订阅模式就要说一下为这种物联网设备而生的 MQTT 协议,MQTT(MQ Telemetry Transport)协议,是 IBM 公司在 1999 年开发的轻量级网络协议,它有三个主要特点:

  • 采用二进制的消息内容编码格式,所以二进制数据、JSON 和图片等负载内容都可以方便传输。协议头很紧凑,
  • 协议交互也简单,保证了网络传输流量很小。
  • 支持 3 种 QoS(Quality of Service,服务质量)级别,便于应用根据不同的场景需求灵活选择。(下面主要说明下什么是 QoS。它是指通信双方关于消息传送可靠程度的协商)
    QoS 0:消息只发送一次,消息可能丢失;

网络异常,图片无法展示
|


  • QoS 1 :发送方会接收反馈,保证消息的送达,但是可能消息会重复。


网络异常,图片无法展示
|


  • QoS 2 :通过发送方和接收方的多次交互,保证消息有且只有一次。


网络异常,图片无法展示
|




MQTT 轻量级的发布/订阅传输机制,非常适合为远程连接设备提供可靠的消息通信服务。目前 MQTT 协议被广泛应用于自动驾驶、工业、通信等领域。


EMQX 架构

了解了物联网设备通信的一些知识,再回过来头看 EMQX 就会相对容易一些,EMQX 一共有两个主要的产品一个是开源版,一个是企业版,开源版基于 Apache License 2.0 开放源码协议,可以免费使用,下面主要基于开源版本来说,接下来先看一下 EMQX 的整体架构是如何来实现物联网消息中间件的        


网络异常,图片无法展示
|


可以看到 EMQX 整体的架构就是前面我们说的生产者消费者模型的一个实现,外加 MQTT 协议支持,让 EMQX 成为了目前阶段非常标准的物联网消息中间件,仅仅是这些功能的实现还远远不够达到优秀的消息中间件,接下来就从功能的设计与实现来看下如何用 EMQX 实现物联网通信。

为了实现这一目标消息的转发和发布,EMQX 维护着与之相关的几个数据表:

  • 订阅表
  • 路由表
  • 主题树

了解这几个数据表之前先来了看几个关键词

  • node: 部署的 emqx 服务
  • topic:主题一般用于数据类型的标识,比如客户端要上报温度,可以将数据上报给温度 topic,服务器端订阅温度 topic 用来接收数据
  • clientid: 客户端 id 在物联网设备中一般一个设备会有一个唯一设备 id 用来标识客户端

消息分发流程

在 EMQX 一个消息发布者客户端发布消息到 EMQX 代理,然后转发消息到消费者客户端的整个流程如下:

  • 发送消息的客户端找到连接的服务端: 一个 MQTT 客户端发布消息到所连接的服务端节点。
  • 找到消费者连接的服务端:服务端节点接收到消息后会检索路由表。并根据消息主题将消息转发到相关节点。
  • 发送给消费者: 相关节点检索本地订阅表,并将消息发送至相关的订阅者。

如果实现有状态的长连接消息的转发可以看下 EMQX 实现的几个数据结构订阅表、路由表、主题树。

订阅表:主题-订阅者

当一个 MQTT 客户端订阅一个主题时,EMQX 会维护一个订阅表。为主题->订阅者的映射。该订阅表记录只存在于订阅者所在的 EMQX 节点上,在 EMQX 中一个主题可以同时被多个客户端订阅,可以用于使用主题查找客户端,比如说:

节点node1:主题topic1 -> 客户端client1, 客户端client2主题topic2 -> 客户端client3节点node2:主题 topic1 -> 客户端client4

复制代码

路由表:Topic-Node

例如,同一集群中的所有节点将复制 一个主题到节点的映射表,可以用于使用主题匹配节点。

topic1 -> node1, node2topic2 -> node3topic3 -> node2, node4

复制代码

主题树:主题匹配通配符

除了路由表之外,EMQX 集群中的每个节点还维护一个 主题树,可以用于通过客户端设备 id 查找主题下面是一个主题-订阅关系的例子:

Client Node Subscribed topicclient1 node1 t/+/x, t/+/yclient2 node2 t/#client3 node3 t/+/x, t/a

复制代码

当所有的订阅完成后,EMQX 会维护以下主题树和路由表。

可以看到 EMQX 通过空间换时间,然后使用特定的算法实现有状态的长连接客户端的转发和信息查询。    

安装与部署服务

Erlang 简介

安装部署之前可以简单了解下 EMQX 实现的编程语言 Erlang,这个适用于消息与即时通讯领域的小众语言应该很多人都没听说过,下面可以看下这个语言的特性:

Erlang 诞生于上世纪 80 年代,最初由瑞典的爱立信公司专门为通信应用设计。爱立信工程师 Joe Armstrong 在设计这门语言时充分考虑了电信领域的通讯需求:同时有百万用户并行通讯,对故障事件几乎是零容忍。这也使得 Erlang 在并行通讯能力上远胜其它语言。

Erlang 凭借着强大的并行处理能力、容错机制和扩展性而闻名,支持高性能和大规模可扩展的分布式系统。

Erlang 使用 OTP 框架封装实现了完善的 Actor 模型,天然分布式,程序运行在 Erlang VM 内存管理虚拟机上。如果不对 EMQX 进行二次开发可以简单了解下 Erlang 即可,如果要二次开发或者深入优化可以研究下这个并行通讯的编程语言。

安装部署

继续看安装部署,官方提供了几种部署方案有如下安装方式:

  • docker compose
  • RPM/DEB 包安装 (Linux)
  • tgz 压缩包安装
  • 通过 Helm 安装并集群 (K8S、K3S)
  • 源码编译安装

这里主要看下 tgz 压缩包安装的方式:

  1. 访问 emqx.io (opens new window)或 Github (opens new window)下载要安装的 EMQX 的 tar.gz 包。解压程序包tar -zxf emqx-full-package-name.tar.gz  
  2. 启动 EMQX Broker
    cd ./emqx ./bin/emqx start ./bin/emqx_ctl status
  3. 停止 EMQX Broker./bin/emqx stop  
  4. 卸载 EMQX Broker 直接删除 EMQX 目录即可

可以看到安装 EMQX 和启动不需要了解底层编程语言,只需要一个命令即可。

MQTTX 客户端

服务端启动完成了就可以使用 MQTT 协议与服务端通信了,如果没有客户端需要测试 MQTT 协议的时候可以使用 EMQ 公司开源的 MQTTX 工具,MQTT X 是一个强大的跨平台 MQTT 5.0 桌面和 CLI 客户端,使学习、探索和开发 MQTT 变得快速而简单。


网络异常,图片无法展示
|


这里可以看一下 MQTTX 的界面还是比较友好的,如果做测试足够用。

EMQX 还有丰富的功能,如果感兴趣可以在官方文档中查阅即可。如果对 EMQX 物联网消息中间件感兴趣可以关注《中间件源码》公众号一起交流哈一起交流。


网络异常,图片无法展示
|

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
2月前
|
存储 边缘计算 物联网
阿里云物联网平台:推动万物互联的智能化解决方案
随着物联网技术的快速发展,阿里云物联网平台为企业提供了一体化的解决方案,包括设备接入、数据管理和智能应用等核心功能。平台支持海量设备接入、实时数据采集与存储、边缘计算,并具备大规模设备管理、高安全性和开放生态等优势。广泛应用于智能制造、智慧城市和智能家居等领域,助力企业实现数字化转型。
217 5
|
3月前
|
传感器 物联网 人机交互
物联网:物联网,作为新一代信息技术的重要组成部分,通过智能感知、识别技术与普适计算等通信感知技术,将各种信息传感设备与互联网结合起来而形成的一个巨大网络,实现了物物相连、人物相连,开启了万物互联的新时代。
在21世纪,物联网(IoT)作为新一代信息技术的核心,正以前所未有的速度重塑生活、工作和社会结构。本文首先介绍了物联网的概念及其在各领域的广泛应用,强调其技术融合性、广泛的应用范围以及数据驱动的特点。接着,详细阐述了物联网行业的现状和发展趋势,包括政策支持、关键技术突破和应用场景深化。此外,还探讨了物联网面临的挑战与机遇,并展望了其未来在技术创新和模式创新方面的潜力。物联网行业正以其独特魅力引领科技发展潮流,有望成为推动全球经济发展的新引擎。
|
2月前
|
存储 安全 物联网
|
3月前
|
传感器 搜索推荐 物联网
5G与物联网:构建万物互联的未来世界
【9月更文挑战第11天】5G与物联网的融合正引领我们进入一个万物互联的未来世界。在这个世界中,各种设备将通过网络紧密相连,实现数据的实时传输和处理。这不仅将极大地方便人们的生活和工作,还将推动社会向智能化、数字化迈进。我们有理由相信,在不久的将来,一个更加智能、便捷、高效的世界将呈现在我们面前。
|
3月前
|
传感器 Cloud Native 物联网
Micronaut在物联网中的应用探索:轻盈架构赋能万物互联新时代
【9月更文挑战第6天】Micronaut是一个现代、轻量级的Java框架,以其高效、易用及对云原生环境的支持,在物联网开发中展现出独特优势。它通过AOT编译技术优化应用,减少内存消耗,适合资源受限的设备。Micronaut支持反应式编程和HTTP/2,提升并发处理能力和网络传输效率。本文通过一个温度传感器数据收集服务的例子,展示了如何利用Micronaut简化物联网应用开发,使其成为该领域的理想选择。
61 3
|
7月前
|
人工智能 边缘计算 物联网
未来科技前沿:人工智能、物联网、边缘计算引领新时代
在当今数字化快速发展的时代,人工智能、物联网和边缘计算等前沿技术正成为引领未来发展的关键。本文将探讨这些技术的最新趋势及其在各行业的应用,展望未来科技发展的无限可能性。
|
消息中间件 负载均衡 物联网
在Linux服务器上安装EMQX平台:构建高性能的开源物联网消息中间件
EMQX是一个开源的物联网消息中间件平台,提供高性能、高可用性的MQTT和CoAP协议支持,适用于大规模物联网应用场景。本文将详细介绍在Linux服务器上安装EMQ X平台的步骤,帮助开发者快速搭建功能强大的物联网消息中间件。
3526 1
|
消息中间件 存储 JSON
从零开始搭建物联网平台(四)EMQ-X消息中间件
从零开始搭建物联网平台(四)EMQ-X消息中间件
1050 0
|
24天前
|
存储 安全 物联网
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
92 50
|
24天前
|
安全 物联网 物联网安全
制定统一的物联网技术标准和规范的难点有哪些?
制定统一的物联网技术标准和规范的难点有哪些?
33 2