MQTT消息服务器-EMQ X
2021-05-16 08:38:47 阿炯

EMQ X R3.2 (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 语言平台开发,支持大规模连接和分布式集群,发布订阅模式的开源 MQTT 消息服务器,在Apachev2协议下授权使用,其开发团队还派生出了Hamler语言。这是一款完全开源,高度可伸缩,高可用的分布式 MQTT 消息服务器,适用于 IoT、M2M 和移动应用程序,可处理千万级别的并发。


从 3.0 版本开始,EMQ X 完整支持 MQTT V3.1/V3.1.1/V5.0 版本协议规范,向下兼容 MQTT V3.1 和 V3.1.1,并支持 MQTT-SN、CoAP、LwM2M、WebSocket 和 STOMP 等通信协议。EMQ X 3.0 单集群可支持千万级别的 MQTT 并发连接与多节点分布式集群。


EMQ X  消息服务器为大规模设备连接(C1000K+)的物联网、车联网、智能硬件、移动推送、移动消息等应用,提供完全开放源码、安装部署简便、企业级稳定可靠、可弹性扩展、易于定制开发的 MQTT 消息服务器。




最新版本:4.3
2021年5月16日,EMQ X 发布4.3.0 版本,修复了一些已知问题并新增了诸多特性,在通配符订阅性能、路由表内存占用、规则引擎性能以及大量客户端离线处理性能方面做了较大改进,同时将 多语言扩展底层通信方式由 erlport 更换为更为灵活的 gRPC 通信。

该版本是 4.x 最后一个次要版本,旨在于为用户提供一个功能丰富、性能稳定的 MQTT 服务器,推荐所有 4.x 用户升级到此版本,此后 4.x 版本将进入维护状态,EMQ X Team 将进入到后续 5.0 版本开发工作中。

性能改进
多语言扩展功能底层实现方式由 erlport 改为 gRPC
多语言扩展允许用户使用其它编程语言如 Python、 Java 等直接向 EMQ X 挂载钩子进行业务处理,接收并处理监听器字节数据报文实现自定义协议的解析。多语言扩展能以用户熟悉的编程语言处理客户端连接生命周期,快速集成到物联网应用中;接入任意的私有协议,享受由 EMQ X 带来的诸多性能和功能优势。此前 EMQ X 多语言扩展基于 erlport 进行跨语言通信,考虑到语言支持层面不广、性能水平不足且会与 EMQ X 自身功能产生资源竞争问题。在此版本中我们将底层方式更换为 gRPC,能够更好的实现跨语言和跨平台工作,提供更高的性能和清晰的管理能力,有效改善用户开发和维护难度。

提升规则引擎的性能
此前我们为规则引擎添加了所有可用的钩子,即使没有创建规则 EMQ X 触发任何事件时都会尝试去匹配规则,导致不必要的开销。此版本中进行了改进,仅为已创建的规则添加必要的钩子,有效降提升了规则引擎性能。

支持路由表压缩,减少内存占用
并增强订阅性能,但发布性能会略受影响,因此提供了关闭选项。

优化通配符订阅性能
优化 EMQ X 集群条件下通配符订阅性能,比之前版本提升了 10 倍以上。

提升大量客户端同时离线时的处理性能
此前下线消息和新上线消息会在 Broker 进程堆积,我们修复该问题实现了性能提升。

新增特性
规则引擎新增更新资源逻辑,可以在不删除规则的情况下更换动作使用的资源
规则引擎 SQL 函数支持 unix 时间戳与 rfc3339 格式时间之间的转换
保持对 EMQ X Broker 启动后连接失败的资源进行重试,避免资源短暂宕机恢复之后规则无法恢复使用

运维管理
支持 observer_cli,在 console 启动模式下输入 observer_cli:start(). 可查看 Erlang VM 实时运行详细状况
Prometheus 支持集群指标
支持单行日志输出,并支持 rfc3339 时间格式
支持 IPv6 自动探测
所有发行版都支持环境变量覆盖配置文件(以前仅适用于 Docker)
开源版支持 Dashboard 上传证书文件(以前仅适用于企业版)

MQTT 增强
共享订阅分发策略配置为 round_robin 时随机选择起始点
共享订阅支持按源主题的 Hash 分发消息,设备与共享订阅之间可以有固定的分发通道

其他功能
WebSocket 连接支持获取真实 IP 与 Port
Websocket 监听器支持从 subprotocols 列表中选择支持的 subprotocol
支持 MySQL 8.0 的默认认证方法 caching_sha2_password
支持 Mnesia 认证信息的导入导出
允许使用 Base64 编码的客户端证书或者客户端证书的 MD5 值作为用户名或者 Client ID
支持重启监听器,某些在监听器设置无需重启 EMQ X 即可更新
仅在正式版本中启用数据遥测功能
支持清除所有 ACL 缓存
Redis 哨兵模式支持 SSL 连接
emqx_auth_clientid 与 emqx_auth_usernmae 合并为 emqx_auth_mnesia。请参考 文档 将数据到旧版本导出,并导入到 4.3 中
Docker 默认输出日志到控制台,设置 EMQX_LOG__TO=file 使日志输出到文件
支持输出 JSON 格式的日志,某些日志分析系统如 ELK 可以更好的进行配置使用

安全性提升
保护 EMQ X Broker 免受跨站点 WebSocket 劫持攻击
SSL 支持 verify 与 server_name_indication 配置项
SSL 支持证书链最大长度以及私钥文件密码配置项
JWT 认证支持 JWKS

开发构建
升级到 Erlang/OTP 23 版本,为提高特性更新和错误修复速度,EMQ X fork 并维护了 Erlang/OTP 项目,默认使用 http://github.com/emqx/otp 进行构建
新安装包仅支持 macOS 10.14 及以上版本
项目调整为 umbrella 结构
项目结构调整之后降低了依赖管理的复杂度,同依赖之间互相关联的修改原子性得到保障;同时 review 和测试复杂度降低,对社区开发者更加友好
支持使用 Elixir 编译插件

错误修复
MQTT 协议
修复 MQTT 心跳报文的处理
修复 MQTT 报文接收计数问题
限制飞行窗口的最大长度为 65535
修复 Server Keep Alive 生效情况下 Dashboard 中 Keep Alive 字段的值未同步的问题

网关
修复 CoAP 连接中 ACL 配置不生效的问题
修复使用相同 ClientID 的 CoAP 客户端可以同时接入的问题
修复 MQTT-SN 睡眠模式不可用的问题
修复 MQTT-SN 网关在睡眠模式下会丢弃 DISCONNECT 报文的问题
修复 LwM2M 网关将数字编码、解码为无符号整型的问题
修复 Clean Session 为 false 的 MQTT-SN 连接在非正常断开时没有发布遗嘱消息的问题

资源
修复 MySQL 认证 SSL/TLS 连接功能不可用的问题
修复 Redis 重连失败问题

其他修复
修复 ekka_locker 在极端条件下内存可能无限增长的问题
修复 MQTT 桥接功能中 max_inflight_size 配置项不生效的问题
修复 MQTT 桥接飞行窗口的问题
修复 MQTT 桥接功能中指标统计错误和 retry_interval 字段进行了多次单位转换的问题
修复告警持续时间计算错误的问题
修复过长的 Client ID 无法追踪的问题
修复查询客户端信息可能出现崩溃的问题
修复主题重写与 ACL 在发布订阅时执行顺序不一致的问题
修复 WebSocket 连接无法使用对端证书作为用户名的问题
修复认证数据无法导入的问题
修复 Docker 中 EMQ X 可能启动失败的问题
修复 OOM 时快速杀死连接进程

最新版本:5.0
2022年7月上旬,全球领先的开源物联网数据基础设施软件供应商 EMQ 映云科技宣布,旗下核心产品开源分布式物联网 MQTT 消息服务器 EMQX 5.0 版本正式发布!5.0 是 EMQX 自发布以来最重要的版本之一,由欧洲、中国以及全球的社区和团队开发完成。它是有史以来支持 MQTT 并发连接规模最大、同时也是全球首个实现 MQTT over QUIC 的 MQTT Broker,在消息传输的可靠性、产品体验的易用性等方面也进行了大幅优化升级,这也标志着 EMQX 再次凭实力巩固了其作为物联网消息平台领导者的地位。

EMQ 创始人兼 CEO 李枫表示:“EMQX 5.0 是 MQTT 领域的一个里程碑式的成果。它不仅是全球首个单集群支持 1 亿连接的分布式 MQTT 消息服务器,也是首个将 QUIC 引入 MQTT 的开创性产品。EMQ 始终关注前沿技术趋势,通过不断加速的产品迭代开发保持世界领先的技术竞争力,与我们的全球客户与合作伙伴一同,应对与日俱增的物联网设备部署规模及日益重要的车联网等关键业务场景带来的巨大挑战。”

EMQX 5.0:为亿级物联网连接的时代而生
随着 5G 和物联网技术在各行各业的深度融合,全球物联网应用和设备正面临爆发式增长,将真正迎来亿级万物互联的新时代。据 IoT Analytics 最新发布的《2022 年春季物联网状况》研究报告显示,到 2022 年,物联网市场预计将增长 18%,达到 144 亿活跃连接。在如此大规模的物联网需求下,海量的设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了巨大的挑战。EMQX 自 2013 年在 GitHub 发布开源版本以来,获得了来自 50 多个国家和地区的 20000 余家企业用户的广泛认可,累计连接物联网关键设备超过 1 亿台。

作为全球下载量超 2000 万的开源云原生分布式 MQTT 消息服务器,EMQX 多年来历经 200 多个版本迭代升级,凭借着支持亿级连接和千万级消息吞吐的超高性能,为超大规模的物联网项目及应用提供高效、可靠、安全的物联网数据基础设施解决方案;同时与开源工业协议网关软件 Neuron、轻量级 MQTT 消息服务器 NanoMQ、流数据库 HStreamDB 等 EMQ 旗下产品组合探索物联网云边协同应用场景,打造云 - 边 - 端物联网海量数据的接入、存储、实时处理与分析的一站式管理。

全球最具扩展性的 MQTT 消息服务器 ——EMQX 5.0 重大革新功能一览
面对高速发展的物联网产业和不断增长的用户规模,EMQX 持续致力于为「面向未来的物联网应用」打造可靠、安全的数据基础设施。全新发布的 EMQX 5.0 将有以下重大的升级迭代:

可扩展性及可靠性显著提升,首个实现单集群 1 亿 MQTT 连接
通过采用 Erlang 的 Mnesia 数据库的新 Mria 扩展,以及即将在后续 5.1 版本中提供的基于 RocksDB 的会话持久化,EMQX 5.0 的横向扩展能力及消息传输可靠性得到了指数级提升。最新的性能测试表明,EMQX 5.0 可以轻松支持单个集群的 1 亿 MQTT 连接 —— 比以前的版本增加了 10 倍,这使得 EMQX 5.0 成为目前全球最具扩展性的 MQTT Broker,能够轻松承载超大规模的物联网应用。

全球首个实现 MQTT over QUIC 的消息服务器
EMQX 5.0 也是首个引入 QUIC 支持的 MQTT Broker。QUIC 是下一代互联网协议 HTTP/3 的底层传输协议,与 TCP 协议相比,它在减少连接开销与消息延迟的同时,提升了整体吞吐量和移动连接的稳定性。基于 QUIC 这些极适用于物联网消息传输场景的优势,EMQX 5.0 设计了独特的消息传输机制和管理方式,以不断的技术革新持续为行业、社区和客户提供最先进、最具竞争力的 MQTT 消息服务器。

安全保障持续增强
EMQX 基于 MQTT over TLS/SSL 和 QUIC 确保数据安全,支持基于国密算法的传输加密认证集成方案。提供用户名 / 密码、LDAP、JWT、PSK 和 X.509 证书等多种身份认证功能。提供 ACL 机制以及动态 ACL 规则更新能力,能够灵活地实现物联网设备发布 / 订阅权限控制。在 EMQX 5.0 中,各项安全能力均得到显著增强,且用户在 Dashboard 中即可为整个集群启用客户端连接认证和权限控制,拥有更灵活、易用的操作体验。

更强大的数据集成,实现 “南北向” 数据流统一处理
EMQX 5.0 版本利用统一接口来管理南北向数据流,用户可以结合更强大的规则引擎和数据桥接功能,来实现数据处理与集成。相比之前版本,EMQX 5.0 拥有更丰富的数据处理能力,并能够通过规则处理云端到设备的南向消息。同时,EMQX 为数据集成提供了可视化查看能力(Flows),通过 Dashboard 页面,用户可以清晰看到物联网数据如何通过规则处理,以及数据如何流向外部数据服务或设备。

后续版本中,我们将支持在 Dashboard 上以拖拽的方式编排规则和数据桥接,通过可视化界面将物联网硬件数据流轻松连接在一起。更多功能更新:
全新极简配置,易用性大幅提升:全新的 Dashboard 菜单栏为不同角色的使用者进行了更加清晰的功能聚合,同时以简洁易读的 HOCON 格式配置文件、符合 OpenAPI 3.0 规范的 REST API 文档为开发者带来更好的使用体验;
全新网关架构,更方便扩展协议:在对 MQTT 3.1、3.1.1、5.0 协议的完整支持之外,也为 CoAP/LwM2M、STOMP、MQTT-SN 等其他主流物联网协议提供独立的管理接口和安全认证能力;
可操作性与可观测性大幅提升:在 Dashboard 上提供长达 7 天的详细监控指标,可以一键集成 Prometheus 与 Grafana、Datadog/StatsD 等指标监控告警系统。提供更多的诊断工具如慢订阅、在线追踪帮助用户快速排查生产环境中的问题,提供更友好的结构化日志以及 JSON 格式日志支持;
更灵活的拓展定制方式:引入全新的插件架构,用户可用独立插件包的形式编译、分发、安装自己的拓展插件对 EMQX 进行自定义扩展;

以 EMQX 为核心迎接面向未来的全连接时代
在全球物联网规模激增的今天,需要的是能够支撑更大规模单体物联网应用、产品伸缩能力与云底层能力深度适配的物联网数据基础设施。EMQX 5.0 在集群扩展性、产品稳定性等方面的技术突破,将为物联网关键业务提供更加高效可靠的海量设备连接、高性能的消息与事件流数据实时处理。新版本对产品可操作性、可观测性以及易用性的提升,则可以帮助企业解决物联网业务开展过程中面临的管理与培训成本、网络安全等问题。随着物联网业务在更多行业中开展落地,愈发丰富的场景和多样的需求是很难靠单一的技术和产品满足实现的。EMQ 以 EMQX 为核心,结合自身从边缘到云端的完整产品矩阵,可以实现实时数据的统一连接、移动、处理与分析,将为全行业赋予物联网数据价值发掘与转化的能力,为未来世界构建坚实的创新数字基座。


项目主页:https://www.emqx.com/zh/products/mqttx