Fork me on GitHub

20万TCP设备整点上行数据服务器选型

20万TCP设备服务器选型:整点上报

20万设备,整点上报,每包300字节,服务器选型


背景

设备数:200,000
单包:300 Byte
周期:整点上报(假设10秒内全量到达)

平均负载(1800秒周期):

PPS = 200,000 ÷ 1800 ≈ 111 包/秒
带宽 = 111 × 354 字节 × 8 ÷ 1,000,000 ≈ 0.3 Mbps

单包354字节 = 300字节载荷 + 54字节TCP/IP头

极低,2核4G都能跑。

峰值(整点集中上报,10秒):

PPS = 200,000 ÷ 10 = 20,000 包/秒
带宽 = 20,000 × 354 字节 × 8 ÷ 1,000,000 ≈ 57.6 Mbps

峰值是真正的挑战


整点上报 vs 时间打散对比

指标 整点上报 时间打散
10秒峰值PPS 20,000 111
10秒峰值带宽 57.6 Mbps 0.3 Mbps
所需带宽余量 200 Mbps 10 Mbps

结论:整点上报需要20倍的带宽余量。


实际流量验证

老系统20万设备的实际流量只有10 MB/s(远低于理论峰值57.6 Mbps)。

可能原因:

  • 每包实际大小小于300字节(心跳包/确认包更小)
  • 整点上报时间有微小偏差,没有完全重叠
  • 部分设备上报失败后过段时间会继续上报数据

核心选型参数

CPU

接入层所需核心数 ≈ (PPS峰值 × 单包处理时间) / 1000
                ≈ (20000 × 0.001) / 1000
                ≈ 2 核

实际建议 × 2 倍余量:

场景 推荐CPU
纯接入层 4 核
接入+简单业务 8 核

内存

20万连接内存消耗(估算):
- Socket缓冲区:9.2 GB
- Epoll实例:0.6 GB
- Netty ByteBuf:3 GB
- 业务数据:1.2 GB
合计:约 15 GB
场景 推荐内存
纯接入层 16 GB
接入+业务 32 GB

带宽

按实际流量观察(几 MB/s ≈ 几十 Mbps):

保守估计:50-100 Mbps 够用
按理论峰值:57.6 Mbps → 100-200 Mbps
带宽选择 说明
5-10 Mbps 设备上行失败继续上传
50-100 Mbps 按实际流量,建议值
100-200 Mbps 按理论峰值,留足余量

建议在整点时刻用 sar -n DEV 1 实际观察流量,确认峰值后再定带宽。

网卡

千兆网卡(1 Gbps)完全够用
PPS能力远超20,000的峰值需求

完整配置方案

方案A:整点上报,轻量级

参数 配置 说明
CPU 4 核 接入层足够
内存 16 GB 重点关注DirectMemory
系统盘 500 GB NVMe SSD 日志存储
带宽 10-20 Mbps 按实际流量灵活选择
网卡 千兆(1 Gbps) 够用

方案B:接入+业务分离

组件 配置 说明
接入服务器 4核16G / 20Mbps Netty纯接入
业务服务器 4核8G 业务逻辑处理
Kafka(可选) 2核8G / 500GB SSD 削峰解耦

两条核心建议

1. 带宽按实际流量选

按实际观察(几 MB/s ≈ 几十 Mbps),不需要按理论峰值选带宽。

错误做法:按理论峰值57.6Mbps选 → 200Mbps → 浪费
正确做法:按实际流量选 → 50-100Mbps → 省钱

建议先用 sar -n DEV 1 实际测量整点峰值,确认后再定带宽。

2. 尽量推动时间打散

如果能推动设备端加随机偏移(±5分钟),效果:

峰值带宽:57.6 Mbps → 0.3 Mbps(降低200倍)
带宽成本:200 Mbps → 10 Mbps(节省95%)
服务器规格:4核16G → 2核4G(降低)

总结

按实际流量(几 MB/s)≈ 按十几 Mbps 选带宽 → 5-10 Mbps + 4核16G

按理论峰值(57.6 Mbps)≈ 按 100-200 Mbps 选带宽 → 200 Mbps + 4核16G

优先确认实际峰值,弹性调整带宽。
posted @ 2026-04-16 21:26  秋夜雨巷  阅读(8)  评论(0)    收藏  举报