SMQTT测试报告

更新

【release-1.0.8版本测试】2021年10月:作者引入了规则引擎,可以过滤pub消息并将消息转发到日志、http和各种mq队列,以及一些已知bug处理。
【release-1.0.7版本测试】2021年8月:资源优化了一个量级,文中单机3的测试,原来cpu 55,现在只用到5,是原来的1/10,内存只有480Mb,原来1G的一半。(主要原因,作者把topic暴力轮询改成匹配树,点赞!)

背景

早先是用老外的moquette(主要是因为要定制开发,还有我们主要用Java语言),实际开发碰到了一些问题,想换个综合比较好的框架,恰巧发现了smqtt,但是也得经过测试才能换呀,本文就是对测试结果做个介绍,方便想选smqtt的小伙伴。
碰到的问题可以参考:https://zhuanlan.zhihu.com/p/352861858
SMQTT地址:https://github.com/quickmsg/smqtt

摸石头过河

刚开始没摸着门路,瞎测试,碰到了不少问题,建议大家先根据自己的公司的当前业务与将来发展预期的业务,做个估算,先定个预期目标,再开始测试。

首先:我用Coolpy7_benchmark测试,但是一定要去看下他的测试代码,基本他的测试逻辑不会是你想要的(作者不要骂我哈,这个工具是相当好,我得提醒下其他小伙伴逻辑的一些问题),但是你可以改动它。
Coolpy7_benchmark地址:https://github.com/Coolpy7/coolpy7_benchmark

比如这里:
在这里插入图片描述
假设你设置的链接1万个,就是workers=1万,它会整1万个线程,每个线程给1万个链接发消息,那就是一下子有1亿消息,我设置了2.8万发布者和2.8万订阅者,打崩smqtt了(单机,cpu4核内存8G,达到cpu400%),确实是这个测试代码的问题,因为我还去测试了算比较稳定的emqx,也是把cpu打到400%,内存都还好。

这里可以看我修改后,[ps:为此我学了go的基础语法,基础不难,你也可以。]
地址:https://gitee.com/leafseelight/coolpy7_benchmark/tree/master/test_all_cus
在这里插入图片描述
这边有代码也有编译好的文件,可以自己选,如果你跟我一样是首次接触go,编译自己写的代码没有响应,其实是仓库无法访问,运行:go env -w GOPROXY=https://goproxy.cn即可,具体可以参考这篇文章:点这里

假定测试目标

假订一个场景,我们这个业务用在单车上,当前业务假定4000台设备,假定设备逐年翻倍增长。
第1年 4000
第2年 8000
第3年 1.6万
第4年 3.2万
第5年 6.4万
预先支撑个3-4年的发展就够了,就是说4万个,应该是足够。

那我们就假定有40000个设备,同一时间,设备通常只有1个人在操作,可以不考虑授权的用户,同样假定40000个用户。

这样子设备端就有40000个链接,订阅40000个topic,设备被操作一次,会反馈2条消息(运行中,成功),针对高峰期App端12000条/小时,这里应该是24000/条小时(400条/小时,6.6条/秒)

而APP高峰期假设1小时有25%的用户,就是10000个链接(bugly看的,高峰最高不超过25%,低的时候只有千分之五)
那App就是10000个链接,订阅10000个topic(设备的topic),部分用户可能重复操作,假设20%用户,消息就有12000条/小时,每秒3.3条。

综合:高峰期总链接数是,5万个,topic:4万个,消息是36000条/小时(600条/每分钟,10条/秒)

开始测试

因为我们准备做集群,而集群通过nginx的stream模块来统一提供地址和端口,也就是压力是可以平均分给集群下的机器,我们这边假定要集群部署2台,那单机只要测试上面目标的一半就够了。

另外,服务器(mqtt服务器端)参数调优,客户端(测试端)参数调优,参考cp7文档即可。文档地址:点这里

不过这里有个重要的东西,所有云服务都是禁用虚拟ip的,就是你设置了,实际不能生效。但是,你必须设置最少1个(代码可能有点问题),不然测试代码跑不起来。就是说云服务你也只能当做单机测试,最多支持发起6.4万左右的链接。这里还有一个要说明,公司电脑测试可能是行不通的,除非你公司的网络是千兆万兆网络,路由器工业级别,不然因为路由器是有链接数限制的,我们公司的我之前测试2千多个链接,结果所有人都上不了网了。汗!

单机测试

环境

3台阿里云服务器,其实2台就可以,这里走云服务器内网,可以忽略服务器带宽。
第1台,4核8G内存,装smqtt
第2台,4核8G内存,装cp7,执行设备端模拟
第3台,4核8G内存,装cp7,APP端模拟

单机1-模拟执行情况QOS为0

第2台,设备端模拟:2万链接,2万订阅者,2万topic,5千发布者,12000条/小时===>12000/5000=2.4条/小时,每个发布者2.4条/小时(算3条,就是20分钟一条消息),每条消息44字节

nohup ./cp7

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leafseelight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值