压力测试

测试环境有限,在windows环境下,6核12线程。i5-10400F,16GB内存。
1、测试条件:
  • 不存储设备日志,存储告警、功能下发日志,每秒10000设备消息(非连接数,而是设备上报的消息数量)
  • 创建一个温度告警、并自动下发指令
  • mqtt_broker网络组件。
  • 动态温度参数,告警触发率大概30%
测试结果:成功,CPU平均占用40%,内存只占用2-3G。每秒插入告警和指令下发记录各3000条左右。
2、测试条件:
  • 存储设备日志,每秒2000设备消息(非连接数,而是设备上报的消息数量)
  • mqtt_broker网络组件。
测试结果:成功,CPU平均占用20%,内存占用2-3G。每秒插入2000条设备日志。
测试5000条数据时,Mysql数据库插入速度不够,和服务器性能有关。会造成消息队列满,数据丢失。但不会影响实时数据和告警,只影响日志记录。
如果一定要高性能并且数据一条不漏插入数据库,可将日志表改成TDengine时序数据库或者timescaleDB。企业版已经都支持。
从测试情况来看,程序本身占用内存并不高,瓶颈在于数据库。

总结

  • 1、瓶颈在于数据库,如果不存储日志数据或者协议中控制存储频率,一般的服务器配置完全可以满足每秒上万甚至几万设备消息。
  • 2、全量存储日志的情况下,需要数据库这台服务器的性能足够快。pgsql官方在16 vCPU / 32 GB RAM下测试每秒可达到9w多行。但实际情况影响因素过多,服务器配置足够的情况下,1w以上还是可以轻松达到。
  • 3、追求一般性能,又不想部署多个数据库请采用timescaleDB,企业版已经集成pgsql,自行安装即可,一般针对千万到几亿数据采用此方案,更多数据建议采用下面第四种方案。
  • 4、最求极致性能,请在配置文件中开启TDengine时序数据库存储,不仅速度更快,而且分开部署,有助于服务器缓解压力,测试中,即使云服务器2核2G也能支持每秒插入5000+数据,由于云服务器网络传输速度和硬盘写入速度没法更高测试,根据数据10核心16GB内存服务器,可以达到400w到500w数据插入,但一般硬盘写入速度不一定够,实际情况不一定符合。