smartboot 开源组织 smartboot 开源组织
首页
  • smart-socket
  • smart-http
  • smart-servlet
  • smart-mqtt
  • smart-license
  • feat
❤️开源捐赠
💰付费服务
🏠加入社区
  • Gitee (opens new window)
  • Github (opens new window)
首页
  • smart-socket
  • smart-http
  • smart-servlet
  • smart-mqtt
  • smart-license
  • feat
❤️开源捐赠
💰付费服务
🏠加入社区
  • Gitee (opens new window)
  • Github (opens new window)
  • 产品手册

    • 使用说明
    • 如何选择Broker产品
    • 我们的用户
    • 发版记录
  • 开发参考

    • 事件总线
    • 插件开发
    • 性能压测
      • 一、环境准备
      • 二、压测结果
        • 场景一:消息订阅
        • 场景二:消息发布
        • 场景三:海量连接
      • 三、压测过程
        • 2.1 压测场景
        • 2.2 压测步骤
      • 四、常见问题解答
    • 缓冲区调优
  • smart-mqtt
  • 开发参考
三刀
2022-12-08
目录

性能压测

很多用户比较关心 smart-mqtt 的性能表现,为了得出一个相对准确的结论。我们通过自研的压测工具分别对 smart-mqtt 和同类产品进行压测。

# 一、环境准备

一台装有 Docker 的 Linux服务器、Windows 或者 Macbook。

支持主流的 amd64 和 arm64 架构。

# 二、压测结果

# 场景一:消息订阅

场景设计:

  • MQTT Client订阅者数量:2000
  • Topic数量:128
  • 消息payload大小:128字节
消息质量 smart-mqtt emqx bifromq
QoS0 790W/s - -
QoS1 320W/s - -
QoS2 190W/s - -

# 场景二:消息发布

场景设计:

  • MQTT Client发布者数量:2000
  • Topic数量:128
  • 消息payload大小:128字节
消息质量 smart-mqtt emqx bifromq
QoS0 97W/s - -
QoS1 63W/s - -
QoS2 52W/s - -

# 场景三:海量连接

场景设计:

  • Topic订阅数:2个
  • 消息payload大小:128字节
连接量 smart-mqtt emqx bifromq
10万 - - -
30万 - - -
50万 - - -
80万 - - -
100万 - - -

# 三、压测过程

在 smart-mqtt 的仓库根目录下,我们提供了用于性能测试的 docker-compose.yml (opens new window) 文件。

在这个文件中包含了多款 MQTT Broker,对应的 docker 服务名皆为:mqtt-broker。 当需要对某个 broker 进行测试时,只需移除其注释,将另外的同名服务注释掉便可(即同时刻只能存在一个服务名为 mqtt-broker 的docker容器)。

目前以支持的有:

  • smart-mqtt
  • emqx
  • BifroMQ

# 2.1 压测场景

docker-compose.yml中的 smart-mqtt-bench 是用于压测的客户端服务,需要针对不同的压测场景配置压测参数。

  • 消息订阅

    services:
      smart-mqtt-bench:
        #省略其他配置...
        command: java -cp smart-mqtt-bench.jar  -Dhost=mqtt-broker -Dconnect=2000 -Dqos=2 -Dpublisher=10 -Dcount=1 -Dpayload=128 org.smartboot.bench.mqtt.Subscribe
    
    1
    2
    3
    4

    smart-mqtt-bench.command参数说明:

    参数名 参数描述
    host MQTT Broker地址,已针对压测对象配置完成,无需调整。
    port MQTT Broekr服务的端口号,默认:1883,不推荐调整。
    connect 压测客户端数量,默认:1000,可按需调整。
    payload 压测消息的 payload 字节数,默认:128,可按需调整。
    topic 压测订阅的Topic数量,默认:128,可按需调整。
    publisher 负责生产消息的客户端数量,默认:1。
    count 每个publisher周期内发送的消息数量,默认:1。

    每秒中发送的最多消息数为:publisher * count * 500,所以connect个订阅者产生订阅量理论值为:publisher * count * 500 * connect。

  • 消息发布

    services:
      smart-mqtt-bench:
        #省略其他配置...
        command: java -cp smart-mqtt-bench.jar  -Dhost=mqtt-broker -Dconnect=2000 -Dqos=0 -Dcount=10 -Dpayload=128 org.smartboot.bench.mqtt.Publish
    
    1
    2
    3
    4

    smart-mqtt-bench.command参数说明:

    参数名 参数描述
    host MQTT Broker地址,已针对压测对象配置完成,无需调整。
    port MQTT Broekr服务的端口号,默认:1883,不推荐调整。
    connect 压测客户端数量,默认:1000,可按需调整。
    payload 压测消息的 payload 字节数,默认:1024,可按需调整。
    topic 压测订阅的Topic数量,默认:128,可按需调整。
    count 每个publisher周期内发送的消息数量,默认:1。

    每秒中发送的最多消息数为:connect * count * 500。

# 2.2 压测步骤

  1. 在 docker-compose.yml 文件中设置压测场景参数,移除待压测的broker注释。
  2. 打开终端切换至docker-compose.yml所在目录执行命令:docker compose up -d
  3. 执行命令观察日志:docker compose logs -f。
  4. 当压测数据稳定后,退出日志观察,执行docker compose down销毁压测环境。

# 四、常见问题解答

  1. 为什么自研压测工具?
    早些时候也调研了一下市面上的MQTT压测工具,emqtt-bench是个相对不错的选择。 但是由于该工具只提供了 amd64 的 Docker 镜像,而本人的常用开发电脑是 ARM 架构,所以不太适用。

    况且开发一款压测工具也并非难事,干脆自己写一个 Java 版的 MQTT 压测工具:smart-mqtt-bench。

  2. 压测环境准备阶段需要多久?
    smart-mqtt-bench会在启动10秒后开始执行压测。因为emqx容器在启动初期还处于不可用状态,经测试10秒之后可以执行压测。

插件开发
缓冲区调优

← 插件开发 缓冲区调优→

Theme by Vdoing | Copyright © 2017-2025 三刀
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式