引言
物联网开发者须要为本人的物联网项目选择适合的 MQTT 音讯产品或服务,从而构建牢靠高效的根底数据层,保障下层物联网业务。目前市面上有很多开源的 MQTT 产品,在性能性能等方面各有长处。本文将选取目前最为风行的两个开源 MQTT Broker:EMQX 和 Mosquitto,从技术架构、性能、性能、社区状况等多维度进行 1v1 比照,帮忙读者更加深刻理解这两个产品。
Mosquitto 简介
Mosquitto 我的项目最后由 IBM 和 Eurotech 于 2013 年开发,起初于 2016 年捐献给 Eclipse 基金会。Eclipse Mosquitto 基于 Eclipse 公共许可证 (EPL/EDL license) 公布,用户能够收费应用。作为寰球应用最广的 MQTT 协定实现之一,截至 2023 年 3 月,Mosquitto 的 GitHub Star 数超过了 7.1 K。
Mosquitto 用 C/C++ 编写,采纳单线程架构。Mosquitto 反对 MQTT 协定的 5.0、3.1.1 和 3.1 版本,同时反对 SSL/TLS 和 WebSockets。轻量级设计使其适宜部署在嵌入式设施或资源无限的服务器上。
长处:
- 易于装置应用
- 反对 MQTT 5.0 协定
- 轻量高效
- 踊跃的社区反对
毛病:
- 可扩展性无限(<100k)
- 没有集群反对
- 短少企业性能
- 无限的云原生反对
EMQX 简介
EMQX 我的项目于 2012 年底在 Github 公布,许可证为 Apache2,现在已成为世界上最具扩展性的 MQTT 音讯服务器,被广泛应用于物联网、车联网、工业物联网等各类要害业务场景。
EMQX 采纳 Erlang/OTP 编写,这是一种用于构建大规模可扩大软实时零碎的编程语言。与 Mosquitto 不同,EMQX 在设计之初即采纳了分布式集群架构,能够轻松实现弹性程度扩大,从而稳固承载大规模的 MQTT 客户端接入。最新版本 EMQX 5.0 可在 23 个节点的单集群中建设 1 亿个并发的 MQTT 连贯。
长处:
- 反对大规模部署
- 高可用性
- 横向可扩展性
- 高性能和高牢靠
- 丰盛的企业性能
- 率先采纳 MQTT over QUIC
毛病:
- 上手简单
- 难以无效治理
社区状况
EMQX 是 GitHub 上评估最高、最沉闷的 MQTT Broker 我的项目,在过来 12 个月里有 11.4K 个 Star 和超过 3000 个 Commit。
Mosquitto 以其轻量级的单线程架构在部署上比 EMQX 更广泛,特地是在资源无限的嵌入式设施上。
注:Mosquitto 我的项目最后由 Roger Light 在 2008 年创立,起初在 2013 年被 Eclipse 基金会接管。
性能与可扩展性
Mosquitto 作为一个轻量级 MQTT 消息中间件有着比拟优良的单节点性能,单机能够撑持 10w 级别的设施并发连贯。但不反对集群架构。
EMQX 作为可集群部署的大规模音讯服务器,单节点能够反对百万级并发连贯,单集群反对亿级并发连贯。但 CPU 和内存使用率更高。
EMQX 是如何反对单集群亿级 MQTT 并发连贯的?点击查看具体测试过程 →
协定反对
Mosiquitto 作为 MQTT Broker 提供了残缺的 MQTT 3.1/3.1.1/5.0 协定反对,反对协定标准中的遗嘱音讯、保留音讯、共享订阅等能力,同时也反对 MQTT over WebSocket,能够满足大多数 MQTT 设施接入需要。
EMQX 同样残缺反对 MQTT 3.1/3.1.1/5.0 以及 MQTT over Websocket 协定。同时 EMQX 5.0 开创性地引入了下一代互联网协议 HTTP/3 的底层传输协定 QUIC 的反对,以解决简单网络环境下的通信问题,晋升整体吞吐量和挪动连贯的稳定性。此外,EMQX 也扩大反对 MQTT-SN、CoAP、LwM2M、STOMP 以及其余协定扩大。
安全性
安全性对于物联网设施连贯以及设施之间、设施与云服务之间的数据交换至关重要。Mosquitto 和 EMQX 都反对基于 TLS/SSL 的平安连贯。此外,EMQX 还反对 QUIC 传输、OCSP Stapling、Audit Logs 和 Black Duck 源代码扫描。
认证与鉴权
在客户端认证权限与访问控制方面,Mosiquitto 提供了动静平安插件,通过灵便的形式解决用户名 / 明码身份验证和访问控制。Mosiquitto 反对匿名与用户名明码形式认证,并能够通过动静平安插件提供的自定义组群和角色的形式管制音讯主题的拜访权限。
EMQX 反对多种认证机制,如用户名明码认证、JWT 认证以及基于 MQTT 5.0 协定的加强认证。EMQX 反对与多种数据存储形式集成,包含内置数据库、文件、MySQL、PostgreSQL、MongoDB 和 Redis。
此外,EMQX 为用户提供了黑名单性能,用户能够通过 Dashboard 和 HTTP API 将指定客户端退出黑名单以回绝该客户端拜访,除了客户端标识符以外,还反对间接封禁用户名甚至 IP 地址,不便用户灵便治理客户端的连贯与拜访。
数据集成
Mosquitto 默认通过 MQTT 客户端音讯订阅形式实现内部系统对数据的生产。此外,Mosquitto 提供了多个 Mosquitto 之间的数据桥接能力,能够用于多个 broker 之间的分布式部署与数据买通。
EMQX 在数据集成方面提供了 WebHook 形式将客户端音讯和事件推送到内部零碎中。EMQX 也同样提供了相似于 Mosquitto 的 MQTT 数据桥接性能,能够连贯多个 EMQX 集群或其余规范 MQTT 服务。EMQX 在企业版中重点加强了数据集成能力。EMQX 企业版能够通过规定引擎对接各类支流型数据库、音讯队列以及云服务,在数据可靠性与架构设计灵活性上大大加强。
规定引擎
为了用户更加不便地实现高性能数据预处理与基于业务需要的数据路由,EMQX 内置了基于 SQL 的规定引擎组件,搭配数据桥接应用,无需编写代码即可实现一站式的 IoT 数据提取、过滤、转换、存储与解决,以减速利用集成和业务翻新。
可操作性与可观测性
Mosquitto 提供了根本的日志和调试性能,用于监控代理状态和故障排除。然而,它不足先进的治理和监控性能,使用户难以从其运行状态取得更多洞察进行性能优化。
EMQX 通过 HTTP API 和 Dashboard 提供丰盛和可视化的监控性能,使其更容易监控和治理。此外,EMQX 反对与 Prometheus、StatsD 和 Datadog 的集成,使运维团队可能轻松应用第三方监控平台。
云原生部署与 K8s 反对
Mosquitto 反对基于 docker 的容器化部署。EMQX 在此基础上提供了基于 Kubernetes Operator 和 Terraform 云原生主动部署能力,更加不便在容器环境下的部署与运维。
EMQX Kubernetes Operator: 点击查看
桥接 Mosquitto 到 EMQX
尽管 EMQX 和 Mosquitto 作为 MQTT Broker 有着很多不同之处,但它们能够通过 MQTT 桥接的形式实现完满联合。
咱们能够在物联网边缘的嵌入式硬件或网关上部署 Mosquitto,实现小规模边缘数据接入,而后通过桥接形式与云端的 EMQX 集成,实现大规模的云端数据汇聚接入。
桥接 Mosquitto MQTT 音讯至 EMQX
结语
通过以上比照,咱们能够看出:Mosquitto 作为单节点的轻量级 MQTT 消息中间件,更加适宜部署在工业网关、工控机、小型服务器中,实现中小规模的 MQTT 设施连贯场景下疾速高效的数据接入与音讯路由。而 EMQX 作为反对高可用集群的大规模 MQTT 音讯服务器,更适宜部署在数据中心、私有云或公有云环境,为较大规模数据接入以及对高可用有需要的用户提供服务。
您能够抉择 Mosquitto 用于嵌入式硬件和 IoT 边缘部署,并应用 EMQX 作为云中高度可扩大、高可用的 MQTT 音讯服务。
此外,对于有更大规模设施连贯与大吞吐数据接入需要,且对数据完整性、数据长久化以及数据集成灵活性有较高要求的用户,咱们建议您应用 EMQX 企业版本。
版权申明:本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/emqx-vs-mosquitto-2023-mqtt-broker-comparison