优化Uber的持续部署:在大型Monorepo中自动化微服务

Uber的微服务持续部署系统优化

Uber近期分享了其开发团队如何管理微服务的持续部署(Continuous Deployment, CD),尤其是在处理大型单一代码库(monorepos)时面临的挑战。

背景与挑战

Uber的微服务架构包含数千个服务,需要一个可靠且高效的部署系统来更新、修复安全漏洞和发布新功能。为了确保这一过程的安全性和及时性,Uber采用了持续部署(CD),自动化了生产环境的部署。然而,随着代码库和服务需求的增长,现有的部署系统在规模、标准化和安全性方面遇到了挑战,特别是在包含多个微服务的大型单一代码库中。

旧系统的局限性

2022年,Uber管理着约4,500个微服务,分布在三个单一代码库中,每周处理5,600次提交和7,000次部署。然而,只有7%的服务通过CD自动部署,许多部署需要手动干预。这种分散且高度灵活的系统导致了低效和安全风险,尤其是有超过100种独特的部署模板,缺乏公司范围内的标准。

新系统的设计与实施

Uber重新设计了其CD系统,命名为Up CD,旨在提高自动化和安全性。该系统与Uber的内部云平台和可观测性工具紧密集成,确保部署过程标准化且可重复。新系统简化了流程,通过优化部署,仅部署受提交影响的服务,而不是每次代码变更都部署所有服务,从而减少了不必要的构建,并让工程师更清晰地了解变更对服务的影响。

关键改进

  1. 统一的提交流程:每个服务通过一系列部署阶段,每个阶段都有独立的安全检查,如时间延迟、部署窗口和服务警报,确保仅在安全时触发部署。
  2. 用户友好界面:提供了直观的服务提交历史和部署状态视图,简化了跟踪变更和识别潜在问题的过程。
  3. 实时更新:工程师可以实时查看部署状态,快速识别哪些提交已部署到哪些环境。

成果与影响

自Up CD推出以来,Uber的服务自动部署比例从不到10%提升至近70%。尽管部署频率增加,但每1,000次代码变更的生产事故率下降了50%以上,显示了系统在安全管理高频部署方面的能力。然而,更快的部署速度也带来了新的风险,Uber通过分阶段部署共享代码的变更来应对这一问题。

与其他公司的对比

其他科技公司也在开发内部工具以优化大型单一代码库的开发流程,如TikTok发布的Sparo工具,旨在优化git操作的性能。

结论

Uber重新设计的持续部署系统成功实现了大规模部署的自动化和标准化,显著提高了微服务部署的安全性、效率和透明度。通过与现有工具的紧密集成和优先考虑自动化,Up CD使Uber能够应对快速增长,同时最小化生产事故。

阅读 34
0 条评论