主要观点:Uber 公布了控制大规模单库变更部署的方法,以应对大规模持续部署的关键挑战。其工程团队面临单库提交影响数千服务的问题,通过引入跨服务部署协调层和服务分层等措施来降低风险,平衡速度与安全,并已在多种场景中得到验证和应用。
关键信息:
- Uber 工程栈依赖几个主编程语言的单库,共包含数百或数千服务,基于主干开发和主分支发布,但存在单提交影响超预期服务的风险。
- 分析 500,000 次 Go 单库提交发现,1.4%影响超 100 个服务,0.3%影响超 1000 个服务,早期安全架构不足。
- 引入跨服务部署协调层,通过轻量级异步状态机实现,按服务层级分阶段部署,先部署低危服务,失败超阈值则停止部署并通知作者。
- 为平衡速度与安全,设定 24 小时解锁所有队列的窗口,通过模拟器预测部署时长并调整阈值和队列分组。
- 该协调功能不仅支持安全关键的大规模变更,还可用于其他场景,如批量配置部署等。
重要细节: - 文中提及 Google、Pinterest 和 Airbnb 等公司也运营大型单库并采用不同策略。
- 协调方法的核心是服务分层,从 0(最关键)到 5(最不关键)。
- 状态机用于大规模部署的协调,定期作业跟踪受影响服务的部署结果。
- 初始参数选择较谨慎导致系统常滞后,影响功能交付。
- 大规模变更部署后验证了模拟的准确性,增强了对该方法的信心。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。