Skip to content

常见概念问题解答

EMQX 与物联网应用的关系是什么?

典型的物联网应用包括设备硬件、数据采集、数据存储、分析、Web / 移动应用等。EMQX 位于数据采集这一层,分别与硬件和数据存储、分析进行交互,是物联网应用的核心:前端的硬件通过 MQTT 协议与位于数据采集层的 EMQX 交互,通过 EMQX 将数据采集后,通过 EMQX 提供的数据接口,将数据保存到后台的持久化平台中(各种关系型数据库和 NoSQL 数据库),或者流式数据处理框架等,上层应用通过这些数据分析后得到的结果呈现给最终用户。

EMQX 有哪些产品?

EMQX 产品系列目前主要包含以下 3 款产品,主要体现在支持的连接数量、产品功能和商业服务等方面的区别:

  • EMQX:EMQX 开源版,提供 MQTT 协议、CoAP 和 LwM2M 等常见物联网协议的支持;

  • EMQX Enterprise:EMQX 企业版,在开源版基础上,增加了数据持久化 Redis、MySQL、MongoDB 或 PostgreSQL,Sink 转发 Kafka,LoRaWAN 支持,监控管理,Kubernetes 部署等方面的支持;支持百万级并发连接;

  • EMQX Cloud:EMQX Cloud 是 EMQ 公司推出的一款面向物联网领域的 MQTT 消息中间件产品。作为全球首个全托管的 MQTT 5.0 公有云服务,EMQX Cloud 提供了一站式运维代管、独有隔离环境的 MQTT 消息服务。在万物互联的时代,EMQX Cloud 可以帮助您快速构建面向物联网领域的行业应用,轻松实现物联网数据的采集、传输、计算和持久化。

EMQX 与 NB-IoT、LoRAWAN 的关系是什么?

EMQX 是一个开源的 MQTT 消息服务器,并且 MQTT 是一个 TCP 协议栈上位于应用层的协议;而 NB-IoT 和 LoRAWAN 在 TCP 协议层处于物理层,负责物理信号的传输。因此两者在 TCP 协议栈的不同层次上,实现不同的功能。

MQTT 协议与 HTTP 协议相比,有哪些优势?

HTTP 协议是一个无状态的协议,每个 HTTP 请求为 TCP 短连接,每次请求都需要重新创建一个 TCP 连接(可以通过 keep-alive 属性来优化 TCP 连接的使用,多个 HTTP 请求可以共享该 TCP 连接);而 MQTT 协议为长连接协议,每个客户端都会保持一个长连接。与 HTTP 协议相比优势在于:

  • MQTT 的长连接可以用于实现从设备端到服务器端的消息传送之外,还可以实现从服务器端到设备端的实时控制消息发送,而 HTTP 协议要实现此功能只能通过轮询的方式,效率相对来说比较低;

  • MQTT 协议在维护连接的时候会发送心跳包,因此协议以最小代价内置支持设备 “探活” 的功能,而 HTTP 协议要实现此功能的话需要单独发出 HTTP 请求,实现的代价会更高;

  • 低带宽、低功耗。MQTT 在传输报文的大小上与 HTTP 相比有巨大的优势,因为 MQTT 协议在连接建立之后,由于避免了建立连接所需要的额外的资源消耗,发送实际数据的时候报文传输所需带宽与 HTTP 相比有很大的优势,参考网上第三方评测,发送一样大小的数据,MQTT 比 HTTP 少近 50 倍的网络传输数据,而且速度快了将近 20 倍。另一个 第三方评测 显示,在接收消息时,MQTT 协议的耗电量为 HTTP 协议的百分之一,而在发送数据时, MQTT 协议的耗电量为 HTTP 协议的十分之一;

  • MQTT 提供消息质量控制(QoS),消息质量等级越高,消息交付的质量就越有保障,在物联网的应用场景下,用户可以根据不同的使用场景来设定不同的消息质量等级。

什么是 WebSocket?什么情况下需要通过 WebSocket 去连接 EMQX 服务器?

WebSocket 是一种基于 TCP 协议实现的,用于实现 Web 应用与 Web 服务端之间双向实时通信的协议。EMQX 支持 MQTT over WebSocket 连接,用户可以将 Web 浏览器、微信/抖音小程序接入 EMQX,实现主题订阅、消息发布等操作。

EMQX 是如何实现支持大规模并发和高可用的?

高并发和高可用是 EMQX 的设计目标,为了实现这些目标 EMQX 中应用了多种技术,比如:

  • 利用 Erlang/OTP 平台的软实时、高并发和容错;
  • 全异步架构;
  • 连接、会话、路由、集群的分层设计;
  • 消息平面和控制平面的分离等。

在精心设计和实现之后,单个 EMQX 节点就可以处理五百万连接。

EMQX 支持多节点集群,集群下整个系统的性能会成倍高于单节点,并能在单节点故障时保证系统服务不中断。

EMQX 的主题数量有限制吗?

主题使用没有数量限制,主题数量增长对性能影响不大,可以放心使用。

EMQX 向订阅者转发消息时能否保证原始顺序?

EMQX 会保证来自同一客户端的相同主题的消息按照到达顺序被转发,这与消息的 QoS 等级无关,QoS 等级不会影响转发顺序。不管消息丢失还是重复,也都不会导致消息失序。这也是 MQTT 协议所要求的。

但对于不同主题的消息,EMQX 不会提供转发顺序保证,我们可以将他们视为进入了不同的通道,比如主题 A 的消息先于主题 B 的消息到达 EMQX,但最终可能主题 B 的消息会更早被转发。