引言
Mosquitto 和 NanoMQ 都是用 C/C++ 开发的快速轻量的开源 MQTT Broker,完全支持 MQTT 3.1.1 和 5.0。
虽然 Mosquitto 和 NanoMQ 都具有轻量级和低资源消耗的特点,但它们的架构设计却截然不同。Mosquitto 采用单线程模式,而 NanoMQ 则基于 NNG 的异步 I/O 实现了多线程并行。
两者都很适用于工业物联网和嵌入式设备等资源受限的场景。本文将从功能、性能、技术细节和应用场景等方面对这两款 Broker 进行详细的对比分析。
Mosquitto 简介
Mosquitto 是由 Roger Light 在 2013 年开发的开源 MQTT 消息 Broker(EPL/EDL 许可证),后来捐赠给了 Eclipse 基金会。
Mosquitto 设计简洁高效,以单线程守护进程的形式运行,并支持 epoll。它能够接收某个套接字传入的数据,然后将其转发给其他套接字。
Mosquitto 虽然易于实现,但也存在一些局限性。由于它采用了单线程的架构,无法利用多核 CPU 来处理更多的 MQTT 并发连接。而且,随着消息吞吐量的增长,它的延迟也会随之增加。
优点:
- 上手简单
- 支持 MQTT 5.0 协议
- 资源占用少,运行速度快
- 拥有活跃的开源社区
缺点:
- 扩展性有限(<10万)
- 不支持集群
- 缺少企业级功能
- 有限的云原生支持
NanoMQ 简介
NanoMQ 是 EMQ 于 2020 年发布的一个开源项目(MIT 许可证),旨在为物联网边缘场景提供轻量级、快速、支持多线程的 MQTT Broker。该项目计划在 2023 年 Q3 之前捐赠给 LF Edge 基金会。
与 Mosquitto 的单线程设计不同,NanoMQ 基于 NNG 的异步 I/O 构建,内置 Actor 多线程模型。这使得 NanoMQ 能够充分发挥现代 SMP 系统的多核优势。
NanoMQ 还可以用作边缘消息总线,可以将 DDS、NNG、ZeroMQ 等协议转换为 MQTT,然后通过 MQTT 或者 QUIC 在 Broker 之间或从边缘到云之间桥接 MQTT 消息。
它具备高度的可移植性,可以部署在任何支持 POSIX 标准的平台上,并且可以在多种 CPU 架构上运行,包括 x86_64、ARM、MIPS 和 RISC-V 等等。
社区情况
Mosquitto 是目前最流行的 MQTT Broker 之一,以其轻量级的设计而闻名,适合在嵌入式硬件上部署。
NanoMQ 作为一个 2020 年才启动的项目,虽然还处于早期阶段,但发展势头强劲。在过去的一年里,该项目已经完成了 1000 多次代码提交。
这两个开源项目都托管在 GitHub 上,其社区相关指标如下:
功能特性
Mosquitto 和 NanoMQ 均完整支持 MQTT 3.1/3.1.1/5.0 协议,包括遗嘱消息、保留消息、共享订阅等功能。
在传输方面,两者都支持 MQTT over TCP、TLS/SSL 和 WebSocket。NanoMQ 作为一个 2020 年设计的 Broker,还引入了 MQTT over QUIC,使其桥接功能具有多路复用以及快速建立和连接地址迁移的优势。
此外,NanoMQ 还提供了一系列管理和集成功能,如 HTTP API、WebHook、上线/下线事件钩子和规则引擎等。边缘计算领域用户可以基于 NanoMQ 产品组合获取很多实用功能,从而为边缘应用的开发节省更多时间。
扩展性和性能
NanoMQ 是一款专为边缘计算打造的现代 MQTT Broker,可以满足不断增长的性能、扩展性、空间参数、并发和延迟等方面需求。NanoMQ 内置先进的 Actor 线程模型,可以有效利用多核 CPU 的算力资源,在保证高吞吐量的同时能够实现低延时。这给了用户自由选择的空间:无论是性能、CPU 核心还是功能集,都可以随着需求变化而轻松调整和迁移。无论是用它来构建智能家居网关、工业机器人、无人机,还是复杂的智能车辆,NanoMQ 都能够胜任。
Mosquitto 针对的是传统嵌入式场景,这意味着它更加节省资源,消耗更少的内存和 CPU。因此,Mosquitto 更适用于物联网传感器和低处理能力设备,而 NanoMQ 则更适合高性能网关和服务器。此外,Mosquitto 的悠久的开源历史,保证其具有很高的稳定性,当用户对性能和功能的要求不高,并且项目有紧迫的时间表,需要快速完成时,它依然是最佳选择。
易用性
Mosquitto 和 NanoMQ 的安装包都很小巧,安装起来很方便。但它们都缺少一些高级的管理和监控功能,比如 Dashboard。
Mosquitto 的配置文件采用键值格式,使得配置过程很直观。它还拥有完善的文档和活跃的用户社区。
相比之下,NanoMQ 对配置的要求更高,可能会让初学者花费一些时间。但对于有经验的用户来说,它提供了更多的控制和定制选项。
桥接到 EMQX Cloud
EMQX Cloud 是基于开源分布式 MQTT Broker EMQX 构建的高度可扩展的 MQTT 消息服务。我们可以轻松地将物联网边缘的 Mosquitto 或 NanoMQ 桥接至 EMQX Cloud 服务。
未来展望
Mosquitto 2.0 版本新增了 epoll 支持,旨在解决 c10k 连接扩展问题。
NanoMQ 正在引领 MQTT over QUIC 技术,这是自 2017 年发布 MQTT 5.0 规范以来 MQTT 协议最具创新性的进展。MQTT over QUIC 通过多路复用、更快的连接建立和迁移等特性,有望成为下一代 MQTT 标准。通过实现基于 QUIC 的 QoS 优先级和流-主题配对等创新功能,NanoMQ 正在不断加速 QUIC 的普及。
结语
总的来说,Mosquitto 和 NanoMQ 都是优秀的轻量级 MQTT Broker,适用于物联网边缘的消息传递。用户可以根据自身需求,将它们部署在低功耗传感器、嵌入式硬件和工业物联网等多种场景中。
版权声明: 本文为 EMQ 原创,转载请注明出处。原文链接:https://www.emqx.com/zh/blog/mosquitto-vs-nanomq-2023-mqtt-broker-comparison