突破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、内存皆表现稳定。

本次更新内容

  1. 降低控制台指标监控打印频次。
  2. 新增共享订阅特性。
  3. 调整 Topic 编解码算法。

3、性能测试报告

  1. 场景一:
    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
  1. 场景二:

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

阅读剩余
THE END