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
优先确认实际峰值,弹性调整带宽。
如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~


浙公网安备 33010602011771号