在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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:007108

评论

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

Python OpenCV 图像的 最近邻插值 与 双线性插值算法 优化迭代

梦想橡皮擦

Python 7月日更

开跑!Mobileye自动驾驶汽车路测落地纽约

E科讯

经典好文!BAT大厂Android面试真题锦集干货整理

欢喜学安卓

android 程序员 面试 移动开发

校友资料登记平台小程序开发笔记一-系统整体设计

CC同学

校友登记小程序 校友资料小程序

Vue进阶(五十七):ES数组操作:find(), findIndex(), filter(), forEach(), some(), every(), map(), reduce()

No Silver Bullet

Vue ES 7月日更 数组操作

价值连城 知名深度强化学习Pieter Abbeel的采访 John 易筋 ARTS 打卡 Week 56

John(易筋)

ARTS 打卡计划

腾讯T3大牛手把手教你!三面腾讯,已拿offer

欢喜学安卓

android 程序员 面试 移动开发

WorkPlus高端制造业数字化解决方案—航天科工

BeeWorks

开源 移动 解决方案 即时通讯 私有云

Spark 开源新特性:Catalyst 优化流程裁剪

华为云开发者联盟

sql spark 开源 Catalyst 优化器

王者荣耀商城异地多活架构设计

chenmin

手写Spring框架,是时候撸个AOP与Bean生命周期融合了!

小傅哥

Java spring 小傅哥 aop 代理

Rust从0到1-面向对象编程-设计模式

rust 设计模式 面向对象编程 状态模式 state pattern

在线时间加减计算器

入门小站

工具

携手生态伙伴亮相InfoComm,英特尔赋能智能协作办公

E科讯

详解API Gateway流控实现,揭开ROMA平台高性能秒级流控的技术细节

华为云开发者联盟

华为 ROMA 集成平台 ROMA Connect API Gateway

抖音快手seo获客系统开发(可贴牌)

获客I3O6O643Z97

抖音霸屏

C++17 中的条件变量

hedzr

c++ 算法 并发编程 元编程 policy

去中心化薄饼交易所开发|PancakeSwap去中心化交易所搭建方案

Geek_23f0c3

交易所开发 去中心化交易所系统开发 PancakeSwap交易所

Linux之date命令

入门小站

Linux

Vue进阶(五十八):ES字符串操作:遍历、比较、截取、补全...

No Silver Bullet

Vue ES 字符串 7月日更

作为Android开发程序员,已获千赞

欢喜学安卓

android 程序员 面试 移动开发

测试开发之系统篇-安装KVM虚拟机

禅道项目管理

虚拟机 测试开发

带你了解WDR-GaussDB(DWS) 的性能监测报告

华为云开发者联盟

数据库 数据 GaussDB(DWS) WDR 负荷诊断报告

密码学系列之:Merkle–Damgård结构和长度延展攻击

程序那些事

加密解密 密码学 程序那些事

Discourse 的标签(Tag)只能是小写的原因

HoneyMoose

WorkPlus高端制造业数字化解决方案—长江存储

BeeWorks

开源 企业 解决方案 即时通讯 私有云

ZooKeeper 分布式锁 Curator 源码 04:分布式信号量和互斥锁

程序员小航

Java zookeeper 源码 分布式锁 zookeeper分布式锁

校友资料登记平台小程序开发笔记二-云数据库设计

CC同学

校友录小程序 校友资料小程序

看焱融云CSI动态感知如何扩展Kubernetes Scheduler

焱融科技

云计算 技术 云原生 高性能 分布式存储

week 9 作业

Geek_2e7dd7

架构实战营

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