Skip to main content

Command Palette

Search for a command to run...

Airbnb 的微服务质量工程之旅

Updated
1 min read

原文:Airbnb’s Microservices Architecture Journey To Quality Engineering

作者:Antoine Craske

平衡是一个无止境的追求。企业对软件交付质量和交付速度的极度依赖,让平衡更加困难。公司面临着不断提供高质量速度软件的挑战,而质量工程在软件生命周期中就起着约束作用。Airbnb 在加速和扩展其价值主张时,尤其是在信息系统的演进过程中面临了许多挑战。本文分享了 Airbnb 在质量工程方面的架构迭代过程,并给出了实际经验。文章结尾处有参考文献。关注QE 小组,了解更多来自社区的质量工程。

从单体到微服务,新瓶旧酒

起初,和很多软件公司一样,Airbnb 凭借较少的积极的工程师构建了一个最小可用产品,以此进入市场。

这个产品是一个单代码仓的单体架构软件。Airbnb 从 2008 开始逐步增长,用小型团队、少量依赖来完成构建。

但是在 2017 年,这种中心化架构遭遇了瓶颈:

  • 软件迭代变慢

  • 并行演化受阻

  • 组件所属关系混乱

Airbnb 决定拥抱微服务。

现存的单一代码仓被分为 frontback-office(注重速度的 Hyperloop 和专注于稳定性的 Treehouse)。微服务各有各的仓库,出现了负责组件转型的迁移团队。

mono-and-vs

3 年后,也就是 2020 年,业务营收将达到 50 亿美金。团队增长,并持续进行服务迁移。但是老问题又来了——有些功能的进展需要触及多个服务,以及背后的多个团队。

架构的口号是“不影响业务增长”,工程团队退让一步,为了这些重复出现的问题,找到可持续的解决方案。

Airbnb 架构演进的挑战

Airbnb 面临的挑战在于,架构方案不但要解决当下的问题,还要支持未来的规模;质量工程需要面对这个事情。

公司依赖迭代增长的过程:

  1. 定义问题

  2. 发掘增长方案

  3. 解决方案落地

  4. 推广解决方案

  5. 克服解决方案的规模问题

这种方法分离了各个问题的关注点,找到了结构化的方案,并在后期解决规模问题。但是这种方法只有在工作范围较小且必要的情况时才奏效。

迁移的挑战

针对迁移,Airbnb 采取了如下措施:

  1. 实现 IaC,提升开发生产力

  2. 利用工具和可观测性能力,理清所属权

  3. 用新的结构和方法来定义新架构

  4. 建立专注淘汰工作的组织,从而加速迁移进程

接下来看看我们是如何解决问题的。

实现 IaC,提升开发生产力

业务的变化依赖软件,软件进展缓慢或者缺陷会直接对公司的竞争力产生影响。

根据对微服务架构的认识,Airbnb 聚焦于自动化和工具化的建设。更快的节奏要求技术进步。

这里用 IaC 作为一种务实的解决方案,逐步增加增加服务的采用率。随着服务运维规模的增长,高度的复杂性和规模化的挑战就出现了。

利用工具和可观测性能力,理清所属权

太多的微服务纠结在一起,牵一发而动全身,难于掌控。

Airbnb 致力于生产力的提高,重点是在 3 个方面为新架构提供支持:

  • 所有权

  • 可观测性

  • 工具

所有权

Airbnb 部署了 Scry Ownership 应用,以此掌握技术组件的所属关系数据,例如所属权、维护者、通信方式等:

可观测性

建立了一系列的可观测性仪表盘,系统性的对系统行为进行审视。下面的例子展示了对所有权的统计:

dashboard

工具

数据方面的挑战非常明显。Thrift 在序列化和数据描述方面非常有效,但是在产品中还需要其它组件来使用这些数据。

Airbnb 利用 GraphQL 构建了统一的数据访问层,直接提供查询能力:

graphql

代码生成是增进开发生产力的最后一环。更多的技术,为各个层面的标准组件提供模板支持。

codegen

逐一击破之后,我们发现,中央数据聚合组件成了新的瓶颈。

用新的结构和方法来定义新架构

中央数据聚合组件的迭代节奏太慢了。就算是有了前面的生产力提升措施,经过长期积累,结构性的复杂度也日益增长。因此需要新的结构。

随着时间的迁移,系统复杂性天然就有增长的趋势,要抵抗这种趋势,需要支持和反制。

质量工程开始进入了架构、组织和方法等领域。

支撑增长的架构

在这种复杂的环境下,要在不同领域、不同团队之间进行同步,会是一个高成本、高耗时的过程。

分析一下微服务架构的问题树:

  • 复杂度分布在细粒度的服务之中

  • 细粒度服务之间缺乏稳定的合作关系

  • 组件和团队的关系支离破碎

  • 微小的变更也可能引发复杂的问题

不管微服务还是单体架构,模块化和关注点分离都是必要的。

Airbnb 采用了新的架构方式:Micro+Macroservice

micro+macroservices

这种架构中,每种复杂性都被分布在清晰的层次之中:

  • 统一 API 是微服务,支持快速的产品迭代

  • 中央数据聚合组件是一个稳定的单体,其中包含了紧密的耦合关系

  • 服务块 API:抽象的微服务

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts