写点什么

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

作者:Claudio Masolo

  • 2024-10-09
    北京
  • 本文字数:1383 字

    阅读完需:约 5 分钟

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

在最近的一篇文章中,优步(Uber)分享了开发团队如何管理微服务的持续部署,以应对使用大型单一代码库(Monorepos)的挑战。


优步的微服务架构由数千个服务组成,需要一个可靠且高效的系统来部署更新、安全补丁和新特性。为了确保这一过程的安全性和及时性,优步采用了持续部署(CD),自动化部署到生产环境中。这对维护代码质量和最大限度地减少交付更改的延迟是至关重要的。然而,随着优步的代码库和服务需求的增长,现有的部署系统面临着与规模、标准化和安全性相关的挑战,尤其是在包含多个微服务的 Monorepos 中。


优步认识到需要一个更加精简且更加自动化的持续部署系统。2022 年,该公司开展了一个重新设计其 CD 流程的项目,旨在为部署微服务创建一个更加统一且更加自动化的解决方案。当时,优步在三个 Monorepos 上管理着大约 4500 个微服务,每周处理 5600 次提交和 7000 次部署。然而,这些服务中只有 7% 是使用 CD 自动部署的,许多部署需要人工干预。这种分散且高度灵活的系统导致了效率低下和安全风险,特别是由于有 100 多个独特的部署模板是没有公司范围内的标准的。


新设计的系统名为 Up CD,旨在提高自动化和安全性。它与优步的内部云平台和可观测性工具紧密集成,确保部署默认遵循标准化和可重复的流程。新系统优先考虑简单性和透明度,特别是在管理 Monorepos 方面。一个关键的改进是通过查看每次提交都会影响哪些服务来优化部署,而不是在每次代码更改时部署所有服务。这减少了不必要的构建,并使工程师更清楚地了解影响其服务的更改。


CD 系统架构

Up 为所有服务引入了统一的提交流,确保每个服务都会经过一系列的部署阶段,每个阶段都有自己的安全检查。检查条件包括时间延迟、部署窗口和服务报警,确保仅在安全的情况下才会触发部署。每个阶段都是独立运行的,在保持安全性的同时,可以灵活地定制部署流程。这种新方法减少了手动错误,并提供了更结构化的部署体验。


Up CD 成功的一个关键部分是其用户友好的界面,该界面使工程师能够直观地查看其服务的提交历史和部署状态。界面折叠了非必要的提交,使跟踪更改和识别潜在问题变得更加容易。工程师还可以看到部署状态的实时更新,使他们能够快速识别哪些提交已部署了,以及部署到了哪些环境中。


提交历史的折叠视图


自推出 Up CD 以来,优步在服务部署自动化方面有了大幅的提升。自动部署的服务比例在一年内从不到 10% 上升到近 70%。尽管部署的频率增加了,但每 1000 次代码更改的生产事故率下降了 50% 以上,这凸显了系统安全管理更频繁部署的能力。然而,部署更改的速度加快,特别是那些影响 monorepos 中共享代码的更改,这带来了新的风险。优步通过在服务层之间交错部署此类更改来解决这些问题,如果优先级较低的服务出现了问题,则停止部署。


使用 monorepos 具有挑战性,其他科技公司也开发了自己的内部工具来改进这一开发流程,比如 TikTok 发布了 Sparo 工具来优化大型 monorepos 的 git 操作性能。


总之,优步改进后的持续部署系统已经成功地实现了大规模的自动化和标准化部署,显著提高了部署微服务的安全性、效率和透明度。通过与现有工具紧密集成并优先考虑自动化,Up CD 使优步能够应对快速的增长,同时最大限度地减少生产事故。

作者介绍

Claudio Masolo 是一名云工程师。闲暇时,他喜欢跑步、阅读和玩老式电子游戏。


原文链接:

https://www.infoq.com/news/2024/09/uber-continuous-feployment/

2024-10-09 08:006796

评论

发布
暂无评论
发现更多内容

OpenHarmony 3.1 Beta版本关键特性解析——OpenHarmony图形框架

OpenHarmony开发者

OpenHarmony 动画效果

web前端培训nginx配置规则

@零度

nginx 前端开发

STI生态迎来新进展,登录Gate.io意味着什么?

西柚子

记一次CPU持续增长的问题解决

BUG侦探

Python py-spy CPU增长问题

java培训SpringBoot自动装配原理

@零度

JAVA开发 springboot

一张长图带你看懂物联网产业十数载“江湖风云”!

亚马逊云科技 (Amazon Web Services)

物联网

问题来了!拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗?

Java全栈架构师

程序员 架构 面试 计算机网络 底层知识

借品牌升级之际,谈一谈技术开发者为什么选择 InfoQ 写作社区

宇宙之一粟

4月月更 InfoQ写作社区2周年

亚马逊云科技 loT 百亿连接力量

亚马逊云科技 (Amazon Web Services)

亚马逊云

hash,bloomfilter,分布式一致性hash

Linux服务器开发

分布式 hash 后端开发 Linux服务器开发 C++后台开发

VNC中文是什么意思?全称是什么?

行云管家

运维 服务器 vnc

如何优雅的记录操作日志

flyhero

Java Spring Boot 后端 造轮子 4月月更

去中心化的 React Native 架构探索

Shopee技术团队

前端 去中心化 React Native

从趋势到必选项,探讨企业数字化转型方式方法

华为云开发者联盟

数据 数字化 企业数字化转型 业务数字化

恒源云(Gpushare)_自动化训练小技巧白送给你,不要吗?

恒源云

OSS SSH hy-tmp

STI即将登录Gate.io,我们有哪些期待?

小哈区块

多个私有云设施管理用什么云管理软件好?

行云管家

云计算 私有云 云管理 多有云

企业如何搭建一个有效的知识管理系统

小炮

企业知识管理 企业知识管理工具

腾讯二面:Linux操作系统里一个进程最多可以创建多少个线程?

Java全栈架构师

Linux 程序员 架构 面试 操作系统

大数据培训Hive如何控制map个数与性能调优参数

@零度

hive map 大数据开发

Sitemap的重要性

源字节1号

软件开发 网站优化

踩了个DNS解析的坑,但我还是没想通

捉虫大师

DNS 问题排查 4月月更

【高并发】一文秒懂Happens-Before原则

冰河

并发编程 多线程 协程 异步编程 精通高并发系列

科创中国开源创新榜单发布,EMQX 获评“年度优秀开源产品”

EMQ映云科技

开源 物联网 IoT emq emqx

云智慧10年资深架构师带你了解:普通程序员向架构师成长必经之路

云智慧AIOps社区

程序人生 架构师 Meetup 晋升 成长计划

用uniapp写一个内外循环的全选与反选,不会的赶紧围观

CRMEB

进阶篇|有了这招,用文本编辑器搞前端代码都能保证格式统一

Jianmu

运维 前端 自动化 工作流 格式化

48天打造你的专属 Twilio——浅谈运营商通信中台

网易云信

通信

看板的作用是什么?任务看板如何跟进

阿里云云效

云计算 阿里云 持续交付 看板 项目协作

省掉80%配置时间,这款Mock神器免费又好用

Liam

前端 前端开发 Postman 前端教程 web前端开发

初创企业需要CRM系统的原因

低代码小观

初创公司 企业管理系统 CRM系统 客户关系管理系统 初创型企业

Uber 持续部署优化:在大型 Monorepos 中自动化微服务_编程语言_InfoQ精选文章