优步分享在影响 3000 多个微服务的单体仓库变更中控制风险的策略

主要观点:Uber 公布了控制大规模单库变更部署的方法,以应对大规模持续部署的关键挑战。其工程团队面临单库提交影响数千服务的问题,通过引入跨服务部署协调层和服务分层等措施来降低风险,平衡速度与安全,并已在多种场景中得到验证和应用。
关键信息:

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