物联网Java项目如何实现2万多TPS?

Java

1个回答

写回答

上世纪的

2026-02-04 04:30

+ 关注

MySQL
MySQL

2万个采集点,每秒采样一次,数据包10KB,通过influxDB接收,暂存Redis,每5秒同步落盘至MySQL数据库。难点在于数据库,MySQL可能难以承受,而付费的InfluxDB性能表现不错。我们的采集量远超你们,通过MQTT进入EMQX,再用Kafka接入InfluxDB可缓解压力。若存储到MySQL需分片处理,否则难以承受,建议使用非关系型数据库更佳。包的数据量可以采用protobuf进行处理,若条件允许,用Netty手动实现协议对接硬件也是不错的选择,直接利用protobuf进行数据压缩。如果数据仍然较大,可再挑选一种合适的压缩算法进行二次压缩,同时需注意控制CPU性能消耗。此外,最好将多个物联网设备的数据整合打包,例如把多台设备的数据汇聚到具备计算能力的边缘端设备中,之后通过分桶或分片的方式传输至服务器。若该边缘端还能将协议转换为所需的JSON格式,则更为理想。加一层吧,服务器不加,物理机也需加。不然就横向扩展多个数据库来硬扛。

目前我们架构的大概情况如下:

主要区别在于是否采用 InfluxDB 接入数据。Netty 在可控性和定制化方面更加灵活,性能表现也不错。目前我们刚开始引入 Fluss,未来计划用 Fluss 完全取代 Kafka。我们的业务查询大多发生在数据消费之后,而状态查询则切换为使用涛思。Kafka 在此仅充当桥梁角色。由于我们的工作偏研究性质,大规模的查询操作主要在湖仓中完成,日常场景下对这一部分需求并不高。相比追求高 QPS,如何稳定维护 QoS 才是我们面临的实际挑战。规模扩大后链条变长,各业务在每级均有查询需求,尽量从业务层面避免中间状态查询以解决问题。涛思数据采用付费模式,EMQX则为开源项目,在256核1024G的资源配置下,最高可达到38.4万QPS的峰值。

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号