突破700万/秒,这个 MQTT 有点快
1、smart-mqtt 简介
smart-mqtt,是 smartboot 组织下面向物联网的首款解决方案,它使用 Java 语言开发,提供高效、可靠的MQTT Broker服务。
smart-mqtt 的独特优势在于大量设备接入的情况下,仍能保持低延迟和高吞吐量,满足物联网领域严苛的实时性需求。同时,smart-mqtt 为了最大限度地节省硬件成本,采用了高度优化的资源管理策略,降低了系统运行时的 CPU 和内存占用,使企业在保持高性能的同时,大幅降低运维成本。
另外,mqtt 协议天然适合IM场景,需要打造企业级 IM 应用,smart-mqtt 同样是一个非常好的选择。
smartboot开源组织,一个容易被误认为是在“重复造轮子”的低调组织。曾获得 2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。
该组织内的明星项目包括:
smart-socket
历时5年精炼出2千多行代码,轻松实现百万级长连接的 AIO 通信框架。smart-http
基于 smart-socket 实现的 HTTP/1.1 web服务。smart-servlet
基于 smart-http 实现的 Servlet 3.1 容器服务。smart-mqtt
基于 smart-socket 实现的 MQTT 3.1.1/5.0 Broker&Client 服务。smart-flow
一款具备可观测性的轻量级业务编排框架。组织地址:https://smartboot.tech/
代码仓库:https://gitee.com/smartboot
一键启动
docker run --name smart-mqtt
-p 18083:18083
-p 1883:1883
-d smartboot/smart-mqtt:latest
-
18083:Web管理后台服务端口 -
1883:mqtt 端口
2、 版本更新
在功能方面,smart-mqtt 的最新版本引入了共享订阅的新特性。该特性的主要优势在于它提供了订阅端的负载均衡功能,以一种更灵活、可扩展的消息分发机制,改善大规模消息系统中的性能问题。
在传统的MQTT订阅模式中,每个订阅了特定主题的客户端都会收到该主题下所有发布的消息,这可能导致消费能力较弱的客户端无法及时处理大量消息,从而成为系统的性能瓶颈。共享订阅通过允许一个主题的消息被多个订阅者共同消费,可以有效地分散这种压力,提高系统的整体效率和可靠性。
虽然共享订阅是 MQTT 5.0 规范的一部分,但 smart-mqtt 将此特性适配至低版本的MQTT协议,所以 MQTT 3.1/3.1.1 的客户端也能从中受益。
而在性能方面,smart-mqtt 再一次突破算力极限,TPS 峰值达到 738W/s。这样的表现,背后所依托的是与 smart-http 中相同原理的黑科技算法:字节树。
至于稳定性,有一组数据足以体现。smart-mqtt 于 2024-02-01 启动了一个 15000 个客户端的压测任务。然后,这个压测任务就被遗忘了,服务器足足被持续压了一个多月。最终连接状态、吞吐量、CPU、内存皆表现稳定。
本次更新内容:
-
降低控制台指标监控打印频次。 -
新增共享订阅特性。 -
调整 Topic 编解码算法。
3、性能测试报告
-
场景一:
10个publisher每隔1毫秒发送payload为128字节的消息,这些消息分布在128种topic下,有2000个subscriber订阅这些topic的消息。
smart-mqtt | v0.33 | v0.34 | v0.35 | v0.36 |
---|---|---|---|---|
QoS0 | 350W/s | 600W/s | 670W/s | 738W/s |
QoS1 | 220W/s | 280W/s | 320W/s | 310W/s |
QoS2 | 110W/s | 150w/s | 180W/s | 185W/s |
-
场景二:
2000个publisher每隔1毫秒发送10个payload为128字节的消息,这些消息分布在128种topic下。
smart-mqtt 企业版 | |
---|---|
QoS0 | 97W/s |
QoS1 | 63W/s |
QoS2 | 52W/s |
4、如何获取 smart-mqtt
源码
-
主仓库:https://gitee.com/smartboot/smart-mqtt -
镜像同步:https://github.com/smartboot/smart-mqtt