像几个人同时调一只空调:有人要降温,有人要省电,若都直接按按钮,系统就会反复拉扯。Uber 的 Kubernetes 平台也遇到类似问题——常规部署系统和故障转移系统都要调整服务容量,可能覆盖彼此决策。Kubernetes 是管理容器化应用的平台;自动扩缩容则会按负载增减应用实例。
据 InfoQ 报道,Uber 新增 ServiceScale 和统一控制器 SSC。各编排器不再直接操作工作负载,只提交自己想达到的容量目标,再由 SSC 合并意图并执行。目标直接保存在 Kubernetes 中,工程师能查清“谁要求了什么”,恢复时也不用从日志重建状态。区域故障发生后,平台还可缩减低优先级任务,把容量让给高优先级服务,而不必长期保留大量闲置资源。
真正棘手的是并发写入。Uber 曾发现两个控制器同时更新资源会造成配置漂移,甚至让工作负载卡住;缓存延迟也可能让控制器误判状态。团队为此加入版本校验、监测和自动修复。方案历时一年上线;InfoQ 称,过程中没有造成客户可感知的中断。