并发服务部署前的配置核对
并发服务部署前的配置核对并发服务在本机运行正常进入容器后可能因为 CPU、内存、连接和队列边界不同而表现失常。部署前的配置核对并不能代替压测却能让团队知道运行时究竟看到了哪些限制、哪些参数由谁负责以及出错后怎样复现。关键不在于把所有设置调到最大而是让运行时、容器限制和应用并发模型彼此一致。先记录真实运行边界部署清单应包括运行时与依赖版本、镜像构建方式、CPU 与内存 request/limit、并发入口、连接池、队列长度和预期负载。对于 Go 服务还应记录当前GOMAXPROCS、内存限制设置和是否使用 CGO对于其他运行时同样要说明线程池或事件循环的边界。不要根据宿主机核心数推断容器可用 CPUcgroup 配额、节点策略和平台版本都会影响实际行为。资源限制也不能只写在 YAML 里就算完成。应用启动时可以读取并记录可见限制若检测不到或发现不合理值应给出诊断而不是自行把参数调到某个“安全比例”。内存上限要为运行时堆外分配、缓存、网络缓冲和 sidecar 留空间具体比例应由应用类型和实测决定不能照搬固定百分比。资源限制 → 运行时可见值 → 应用并发与队列 → 受控压测 → 记录结果与回退方式这个顺序可以暴露常见错配容器 CPU 很小但工作线程很多、连接池远大于下游容量、任务队列无界、或者重试与超时叠加后持续占用资源。它们不一定是代码 bug却会在负载到来时放大为延迟、节流或 OOM。队列、连接与取消要一起设计无缓冲 channel、固定大小 channel 或外部队列各有适用场景不能简单认为一种更快。要明确生产者在队列满时是等待、拒绝、降级还是转后台并给用户一个可理解的状态。无限积压通常会把短暂高峰变成长时间故障过小的队列则可能在正常波动中频繁拒绝。容量来自任务耗时和目标延迟的测量而不是从 worker 数量直接推导。连接池也要和数据库、下游 API 的并发承受能力对齐。每层都单独设置大池和重试时尖峰容易被放大。为请求传递 deadline 和取消信号确保超时后不会留下继续占用连接或 goroutine 的后台工作。写操作需要幂等设计避免客户端重试造成重复执行。不要把调优写成自动副作用运行时参数、文件描述符限制和内核设置会影响同机或同 Pod 的其他进程。将它们纳入镜像、部署清单或平台策略由变更流程审查不要在应用启动时擅自修改宿主环境。部分设置在容器中根本无权生效或由集群管理员统一管理应用应在检测到限制时说明影响并交由负责方处理。性能调整需要对照测试。固定输入、并发模型、预热方式和统计窗口记录成功率、延迟分布、CPU 节流、内存峰值和错误日志一次只修改一个变量。若没有能重复的结果就只能把改动当作候选方案不应对外称为性能优化。测试还要覆盖失败和恢复下游变慢、队列接近上限、容器被节流后服务是否能停止接收过量任务并恢复正常。最后把启动参数、资源限制和已知风险写进运行手册。发布时保留灰度范围和回退入口出现异常能迅速回到已验证配置。这样的核对清单不会替团队做容量规划却能让每次部署的假设可见、可测也更容易在环境变化后重新验证。