写点什么

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

评论

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

聚焦弹性问题,杭州铭师堂的 Serverless 之路

阿里巴巴云原生

阿里云 云原生

开源7天Github斩获4.5万Stars!阿里2023版高并发设计实录鲨疯了

Java你猿哥

Java 面试 高并发 面经 春招

首次公开!阿里巴巴内部Java 面试突击核心讲(1658 页),转载 40W+

Java你猿哥

Java 面试 ssm 面经 java核心知识

从Spring的AOP看Synchronized锁失效和事务失效的情况

Java你猿哥

spring ssm synchronized Java工程师

ZBC 荣登OKX涨幅榜前列,月内涨幅逾六成

鳄鱼视界

selenium源码通读·2 | common/exceptions.py异常类

Python 源码 测试 自动化测试 selenium

Redis缓存高可用集群

京东科技开发者

redis 云计算 redis哨兵 京东云 企业号 4 月 PK 榜

一个前端大佬的十年回顾 | 漫画前端的前世今生

京东科技开发者

JavaScript html 前端 京东云 企业号 4 月 PK 榜

百度高德地图JS-API学习手记:地图基本设置与省市区数据加载

zhoulujun

百度地图 高德地图

百度高德地图行政区域边界GeoJSON数据获取并绘制行政区域

zhoulujun

百度地图 高德地图

GIS常用npm包:GeoJSON文件合并与元素过滤\属性过滤\图形合并

zhoulujun

GIS GeoJSON

信息率失真函数与平均互信息

timerring

信息论

Go 命令行参数解析工具 pflag 使用

江湖十年

后端 命令行 Go 语言

带你揭开神秘的javascript AST面纱之AST 基础与功能

京东科技开发者

JavaScript 前端 AST 京东云 企业号 4 月 PK 榜

Taro架构构析(2):Taro 设计思想及架构

zhoulujun

从java到JavaScript(1),看Dart:对比Java/Go/Swift/Rust

zhoulujun

Java JavaScript swift rust dart

ZBC 荣登OKX涨幅榜前列,生态持续发力是关键

西柚子

玩转Github:三分钟教你如何用 Github 快速找到优秀的开源项目

Java你猿哥

Java GitHub 开源 源码 ssm

selenium源码通读·3 | 从源码看引入webdriver包的原因

Python 源码 测试 自动化测试 selenium

从java到JavaScript(2):对比Java/Go/Swift/Rust看Dart

zhoulujun

Java JavaScript dart

GIS拓扑讲解点线面几何体的拓扑关系判断及运算分析_turf案例

zhoulujun

GIS Turf.js

Hex Tech,一个带编程协同能力的 BI 平台的“危”与“机”

CnosDB

数据库 时序数据库 开源社区 CnosDB

数据库原理及MySQL应用 | 数据库安全加固

TiAmo

MySQL 数据库 数据安全

三天吃透Redis八股文

程序员大彬

redis #java

架构实战营 - 备选架构设计文档模板

华仔

Three.js 进阶之旅:全景漫游-高阶版在线看房 🏡

dragonir

JavaScript 前端 three.js

文本处理流程:Text Workflow 1.5.1直装版

真大的脸盆

文本处理 处理文本 文本管理工具

从0到1构建基于自身业务的前端工具库

京东科技开发者

前端 京东云 企业号 4 月 PK 榜

gis经纬度坐标转换多格式兼容:支持字符串/数组/GeoJSON

zhoulujun

GIS GeoJSON 经纬度坐标转换

JWT 实现登录认证 + Token 自动续期方案,这才是正确的使用姿势!

Java你猿哥

Java ssm 架构师 Token JWT

微前端项目部署方案

京东科技开发者

微前端 京东云 企业号 4 月 PK 榜

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