# 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 连接目标需要至少以下系统参数作为起点: ```bash 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` | 稳态为 0,burst 后下降 | | Realtime Redis | `vehicle_realtime_store_update_duration_ms{store="redis"}` | 毫秒级 | | Realtime MySQL | async queue depth | 不持续增长 | ## 分阶段压测 压测入口: ```bash 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 ``` 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 - 错误日志