Files
lingniu-vehicle-ingest/docs/ops/100k-capacity-baseline.md
2026-07-03 18:01:40 +08:00

3.2 KiB
Raw Blame History

100K 车辆接入容量基线

更新时间2026-07-03

目标

支撑 100,000 台车辆接入,入口服务在高连接数和高帧率下保持可观测、可背压、可恢复。

初始容量假设

目标
连接车辆数 100,000
平均帧间隔 10-30 秒
平均入口 FPS 3,000-10,000
短时 burst FPS 20,000
Gateway p99 parse + enqueue < 50ms
Redis 当前态延迟 < 3s
TDengine 历史写入 lag 可观测且 burst 后下降
MySQL 当前态 异步,不能阻塞 Redis

当前生产观测

当前 ECS 115.29.187.205 在低负载下健康:

  • JT808 连接约 242。
  • GB32960 连接约 2。
  • Kafka lag 为 0。
  • NATS ack pending 为 0。
  • Redis 写入约 0ms。
  • MySQL 投影约 1-2ms。
  • ECS load 约 0.09 / 0.15 / 0.21
  • 可用内存约 6.6GB。
  • 根分区使用约 37%。

当前已知缺口

  • net.core.somaxconn=128,无法作为 100K 连接生产基线。
  • Gateway 默认 TCP_MAX_CONNECTIONS 已调整为 120000,生产仍可通过环境变量覆盖。
  • 已新增可重复的 TCP 连接压测工具,后续需要用它跑 10K/50K/100K 阶段测试并记录结果。
  • 仍缺按协议维度的连接生命周期、读超时、parse/publish p95/p99 直方图。
  • TDengine history writer 当前逐消息插入,后续需要批量写入。
  • Kafka topic 当前 12 分区100K 目标下需要结合实际 FPS 再评估分区数。

ECS OS 参数建议

100K 连接目标需要至少以下系统参数作为起点:

sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sysctl -w net.ipv4.ip_local_port_range="10000 65000"
sysctl -w net.ipv4.tcp_tw_reuse=1

systemd gateway 已配置 LimitNOFILE=1048576,需要持续保持。

验收指标

指标 目标
Gateway vehicle_gateway_active_connections 能稳定到阶段目标连接数
Gateway vehicle_gateway_connection_rejections_total 容量目标内不增长
Gateway vehicle_gateway_publish_total{status="ok"} 持续增长
Gateway parse/publish duration p99 小于容量目标
NATS bridge vehicle_bridge_nats_consumer_ack_pending 稳态为 0
NATS bridge vehicle_bridge_nats_consumer_pending burst 后下降
Kafka consumers vehicle_*_kafka_lag 稳态为 0burst 后下降
Realtime Redis vehicle_realtime_store_update_duration_ms{store="redis"} 毫秒级
Realtime MySQL async queue depth 不持续增长

分阶段压测

压测入口:

cd /opt/lingniu-go-native/current/go/vehicle-gateway

# 100 连接 smoke test
go run ./cmd/load-sim \
  -protocol jt808 \
  -addr 127.0.0.1:808 \
  -connections 100 \
  -connect-rate 100 \
  -send-interval 10s \
  -duration 2m \
  -template 0200 \
  -send=false
  1. 100 连接 smoke test。
  2. 10,000 连接保持测试。
  3. 10,000 连接 + 1 FPS/连接短测。
  4. 50,000 连接保持测试。
  5. 100,000 连接保持测试。
  6. 按真实协议分布进行混合帧率测试。

每一阶段必须记录:

  • active connections
  • gateway frame/publish counters
  • NATS pending 和 ack pending
  • Kafka lag
  • Redis/MySQL/TDengine 写入耗时
  • CPU/load/memory/file descriptors
  • 错误日志