Nano MQTT 消息服务器

面向物联网边缘计算场景的下一代轻量级高性能
MQTT 消息服务器

面向物联网边缘计算场景的下一代轻量级高性能 MQTT 消息服务器

亮点

MQTT 5.0 + NanoMQ/NNG

MQTT Bridges (Cloud + Edge)

Embedded Rule Engine

Message backup in edge

介绍

NanoMQ 目标致力于为不同的边缘计算平台交付简单且强大的消息中心服务;站在物联网的十字路口,努力弥和硬件开发与云计算的隔阂;从开源社区出发,连接物理世界和数字智能;从而普及边缘计算应用,推动万物互联的世界,服务于人类社会和未来。

NanoMQ 与 NNG 深度合作,NanoMQ 基于 NNG 异步 IO 和多线程模型面向 MQTT 协议深度优化后诞生。依靠 NNG 出色的网络 API 设计,所以 NanoMQ 自身可以专注于 MQTT 服务器性能和更多的拓展功能。

快速开始

Docker :

docker run -d --name nanomq nanomq/nanomq:0.3.2

Compile :

mkdir build ; cd build; cmake .. ; make

功能特性

占用资源性价比高 & 适用于边缘嵌入式平台

只依赖原生 POSIX & 极高兼容性

纯 C/C++ 开发 & 高度可移植性

全异步 IO 支持和多线程支持

对 SMP 有良好支持

低延时 & 高吞吐

NanoMQ 目标在不同边缘计算平台做到高性价比:达到尽可能高的性能和吞吐量的情况下,保持尽量少的资源消耗占用。现在,NanoMQ 能够以仅仅200Mb的内存消耗支持超过80万条每秒的消息吞吐。(详情可查阅白皮书中的 测试报告 )

目前,基于 POSIX API 的操作系统是最受欢迎也是最广泛使用的。为了最大化 NanoMQ 的兼容性,我们最小化了其对于第三方 API 的依赖性,避免功能拓展时受限于依赖库。从项目诞生之初,NanoMQ 就只依赖原生 POSIX API 开发,因此,社区用户能够更简单的自定义 NanoMQ 或将其的二次开发用于不同的边缘计算应用。

NanoMQ 项目的一个关键目标是做到高可移植性,用户只需要极小的工作量,简单修改 CMake 即可移植到别的硬件架构上。为了能够在各种不同的边缘计算架构平台良好运行,我们继承了NNG的平台抽象层,未来还将支持 OpenWRT 和 Yocto 等类 Linux 构建系统。通过最小化依赖库和使用纯净 C/C++ 开发,NanoMQ 能够简单方便的移植到各类平台。

从数据中心到服务器,从桌面端到移动端,从云到边缘。硬件配置在不停的进步演化。许多之前用在数据中心和移动平台的 CPU 架构如今在边缘端广泛使用。我们相信 CPU 多核化是行业的发展方向。NanoMQ的异步 IO 框架和多线程优化使其能够在多核 CPU 平台具有强大性能优势。

SMP(对称多处理)技术越来越受到关注。NanoMQ 基于 NNG 的异步 I/O 框架,所以也继承了其能够最大化利用多核能力。在此基础上我们针对 Linux 平台和 MQTT 协议优化后,成功将负载平均分配到每个 CPU 核。因此 NanoMQ 在现代 SMP 系统能够以更少的 CPU 资源占用去承担高达一百万每秒的消息吞吐压力。

在50万每秒的消息吞吐压力的测试场景中,所有 pub/sub 请求均成功的情况下,内存占用200兆,90%平均响应延时仅有0.2ms。(详情可查阅白皮书中的 测试报告 )

源代码编译

编译 NanoMQ 需要支持 C99 和 C++ 11 标准的编译环境和高于 3.13 的 CMake 版本

如果您有交叉编译的需求,我们建议您从源代码编译服务使用,基本上你只需要跟随以下简单的步骤即可编译和安装 NanoMQ:

$PROJECT_PATH/nanomq$ mkdir build & cd build ; cmake -G Ninja .. ; ninja

$PROJECT_PATH/nanomq$ mkdir build & cd build ; cmake .. ; make

若需要更多的编译时可设置的 CMake 配置信息和调优方法,请参阅 README 文档

社区

更多社区即将到来

The highlights is the projected path of NanoMQ, which means they are still under development.