ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Airbnb 微服务架构演进全解析:从 Monorail 单体到微服务再到微+宏服务混合架构

Airbnb 微服务架构演进全解析:从 Monorail 单体到微服务再到微+宏服务混合架构 后端文档教程【免费下载链接】system-design-101Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.项目地址https://gitcode.com/GitHub_Trending/sy/system-design-101点击查看免费下载本文依据 system-design-101 仓库中的案例文档 evolution-of-airbnbs-microservice.md 整理而成并结合仓库内 Airbnb 架构演进、典型微服务架构、微服务协作模式等相关文档展开。核心脉络来自 Airbnb 工程师 Jessica Tai 的技术分享Airbnb 的微服务架构经历了「单体 → 微服务 → 微宏服务混合」三个主要阶段每一次转型都由真实的业务与技术痛点驱动。读完本文你将理解大型平台从单体走向分布式服务化时面临的典型问题团队边界、部署效率、服务治理以及 Airbnb 在每个阶段的应对思路与取舍可作为自己设计微服务系统时的重要参考。一、整体脉络三个阶段三次转型Airbnb 的微服务架构演进并非一蹴而就而是被业务增长和工程组织问题逐步推动的。根据 evolution-of-airbnbs-microservice.md 的记载整个过程可以划分为三个主要阶段阶段时间范围架构形态核心目标单体架构Monolith2008 - 2017一个 Ruby on Rails 应用快速支撑房东与房客的简单市场交易微服务架构Microservices2017 - 2020按职责拆分的独立服务解决团队归属模糊与部署缓慢的问题微宏服务混合Micro Macroservices2020 至今服务按粒度分层、统一 API解决数百个服务难以人工管理的问题三个阶段并非简单的「后者取代前者」而是针对上一阶段暴露出来的新问题不断演进。理解这条脉络就等于理解了分布式系统在真实业务中生长的全过程。二、第一阶段单体架构Monolith2008 - 20172.1 起点一个 Ruby on Rails 单体应用Airbnb 最初只是一个连接房东hosts与房客guests的简单市场平台其全部功能构建在一个Ruby on Rails应用之上这就是最初的单体架构。关于这个单体的更多细节仓库中的另一篇文档 airbnb-artchitectural-evolution.md 有补充说明Airbnb 起步时的单体应用在内部被称为Monorail它是一个单层single-tier单元同时承担客户端与服务端的功能。也就是说Web 展示、业务逻辑、数据访问最初都打包在同一个应用里。这种「一个应用承载一切」的形态在业务早期是合理的开发效率高所有代码在一个代码库内功能迭代、部署路径简单直接团队规模匹配早期团队规模小单体应用足够支撑业务运转部署成本低一次构建、一次部署即可上线全部功能。2.2 核心挑战单体架构撑不住什么随着业务进入高速增长期单体架构暴露出两个最核心的挑战团队归属混乱 无主代码Confusing team ownership unowned code当多个团队在同一个代码库中协作时代码模块的「所有权」变得模糊。出现了大量无人负责的「孤儿代码」任何一个改动都可能牵动多个团队职责边界不清直接导致协作效率下降与线上事故责任不明。部署缓慢Slow deployment单体应用意味着「牵一发而动全身」任何一个模块的微小改动都需要对整个应用进行全量构建、测试与部署。功能上线的节奏被整体部署链路拖慢无法支撑快速迭代的业务需求。这两个痛点组织问题 交付问题成为 Airbnb 转向微服务架构的直接动因。从系统设计角度看这印证了一个常见规律微服务首先是组织架构问题其次才是技术架构问题——服务边界往往需要与团队边界对齐。三、第二阶段微服务架构Microservices2017 - 20203.1 转型目标用服务拆分解决组织与交付问题面对单体的两大痛点Airbnb 选择了微服务化改造。微服务架构的目标正是解决上一阶段遗留的「团队归属混乱」和「部署缓慢」问题每个服务由唯一一个团队拥有服务之间通过明确的接口协作各自独立构建、独立部署。3.2 关键服务类型在微服务架构阶段Airbnb 拆分的核心服务包括数据获取服务Data fetching service负责从数据层获取数据是读路径的入口业务逻辑数据服务Business logic data service承载核心业务规则与数据操作写流程服务Write workflow service负责写操作流程的编排与执行UI 聚合服务UI aggregation service面向 UI 层聚合多个服务的数据完成展示所需的组装每个服务都有一个唯一的归属团队Each service had one owning team通过「一个服务一个团队」的映射彻底解决无主代码的问题。这四类服务的划分与仓库中 airbnb-artchitectural-evolution.md 描述的服务分层思想一脉相承。后者将 Airbnb 的 SOA 服务分为四层服务类型职责定位数据服务Data Service底层作为数据实体的读写入口派生数据服务Derived Data Service读取数据服务并应用基础业务逻辑中间层服务Middle Tier Service管理不适合放在数据服务或派生数据服务层的重要业务逻辑展示服务Presentation Service聚合所有其他服务的数据并应用部分前端专属业务逻辑可以看到「数据获取服务 / 业务逻辑数据服务 / 写流程服务 / UI 聚合服务」与「数据服务 / 派生数据服务 / 中间层服务 / 展示服务」在职责划分上高度对应——它们共同勾勒出 Airbnb 按数据访问、业务逻辑、写流程、UI 聚合四个维度切割服务的思路。这种分层方式避免了服务之间互相直接访问数据库的混乱局面让每类服务职责单一、边界清晰。3.3 典型微服务架构的配套组件Airbnb 的微服务化并不是孤立地拆分服务而是引入了一整套微服务配套体系。仓库中的 what-does-a-typical-microservice-architecture-look-like.md 概括了典型微服务架构的关键组件这些组件在 Airbnb 的实践中同样不可或缺负载均衡器Load Balancer将进入的流量分发到多个后端服务CDN内容分发网络一组地理分布的服务器缓存静态内容以加速交付客户端优先从 CDN 取内容再回源到后端服务API 网关API Gateway处理进入的请求并路由到相应服务同时与身份提供方、服务发现组件交互身份提供方Identity Provider负责用户的认证与授权服务注册与发现Service Registry Discovery完成微服务的注册与发现API 网关通过它找到目标服务管理组件Management负责对服务的监控微服务本身Microservices按领域设计与部署每个领域拥有自己的数据库。Airbnb 的服务化正是沿着「网关 服务发现 分域部署」的典型路径展开的客户端请求先进网关网关再路由到多个服务与数据库形成一张松散耦合的服务网络。3.4 新挑战服务多了人管不过来了微服务化解决了单体阶段的两大痛点但随之而来的是一道新的坎数百个服务和依赖关系已经超出了人类可以手工管理的范围。一旦服务数量上升到几百个就会产生一系列新问题服务拓扑复杂化服务之间的调用关系形成一张复杂网络靠人脑难以完整记忆与梳理依赖管理困难某个服务的依赖变更可能波及大量下游调用方人工评估影响范围变得不现实排障成本上升一次跨服务请求会穿越多个服务定位问题需要在链路中逐个排查治理成本高企数百个服务各自拥有团队如何统一规范、统一监控、统一治理成为新的组织与技术难题。这正是从「微服务」走向「微宏服务混合架构」的现实驱动力。四、第三阶段微宏服务混合架构Micro Macroservices2020 至今4.1 混合模型的核心思想API 统一化面对数百个服务带来的管理难题Airbnb 当前的实践是微服务与宏服务macroservice并存的混合模型其核心关注点是API 的统一化unification of APIs。所谓「宏服务」可以理解为粒度介于微服务与单体之间的服务边界把若干关联紧密的微服务在业务语义上重新归组、收敛为一层更宏观的服务接口从而减少服务间的网状依赖降低人工管理成本。而「微 宏」混合意味着 Airbnb 并没有全盘否定微服务而是对需要独立伸缩、独立迭代、边界清晰的能力保留微服务形态对高度耦合、调用频繁、职责相近的能力聚合为宏服务形态通过统一 API 层屏蔽底层服务拆分的复杂度让上层调用方尤其是 UI 聚合层面对更稳定、更收敛的接口面。从组织角度看这也呼应了微服务演进中「服务粒度要匹配团队协作能力」的原则当服务数量超出团队可维护的上限时适度「归组」比继续「拆分」更务实。4.2 演进路线图一条可复用的方法论把三个阶段连起来看Airbnb 的演进其实给出一条高度可复用的路线图业务起步小团队快速迭代 │ ▼ 单体架构MonorailRails 单体单层承担前后端 │ ← 痛点团队归属混乱、无主代码、部署缓慢 ▼ 微服务架构按职责拆分为数据获取 / 业务逻辑 / 写流程 / UI 聚合服务 │ ← 痛点数百个服务与依赖超出人工管理能力 ▼ 微宏服务混合架构服务归组 统一 API每一步都是「解决问题 → 产生新问题 → 再解决问题」的循环。这也提醒读者架构没有一劳永逸的最优解只有与当前业务规模、团队规模相匹配的阶段性选择。五、关键启发从 Airbnb 案例中能学到什么5.1 微服务不是银弹要看场景仓库中的 is-microservice-architecture-the-silver-bullet.md 明确指出微服务架构是为特定领域的问题而设计的并非放之四海而皆准。例如实时游戏、低延迟交易等场景就强烈依赖单体或内存态架构因为这些应用对延迟极其敏感毫秒级甚至微秒级跨进程网络调用开销不可接受微服务通常无状态、状态持久化在数据库中而实时场景需要把状态放内存以支持快速更新实时场景需要高频通信、同一实例的粘性路由sticky routing与 WebSocket 连接。Airbnb 的案例与之形成了很好的对照它的业务形态市场交易、内容浏览天然适合服务化拆分而选择单体还是微服务最终要回到「为什么这样设计」的问题上。5.2 服务协作与治理编排还是编排的互补服务多了之后协作方式就成了治理的关键。仓库中的 orchestration-vs-choreography-microservices.md 对比了两种微服务协作模式编排Orchestration由中心化编排器负责调用与组合各服务内置事务管理与错误处理可靠性高、扩展新服务时只需修改编排器但所有流量经过中心节点延迟更高、吞吐受限于编排器且编排器是单点需要高可用保障。** choreography编排式/编舞式协作**服务之间按既定规则直接交换消息点对点通信去中心化但容错场景更复杂新增服务时需要改动所有相关服务。Airbnb 的「写流程服务Write workflow service」与「UI 聚合服务UI aggregation service」这类职责天然带有编排色彩——写流程需要协调多个数据服务完成一次完整写入UI 聚合需要汇聚多个服务的数据。这也说明在真实的大型微服务体系中编排与编舞往往并存按场景各取所长。5.3 服务粒度是一个动态决策Airbnb 从「一个服务一个团队」到「微宏服务归组」揭示了一个重要观点服务粒度不是一次定死的而是随团队规模、业务复杂度动态调整的决策。最初为保证团队边界清晰而细化拆分后期为降低治理成本而适度归组收敛粒度始终服务于「人能否高效管理」这一根本约束。六、延伸阅读本主题在仓库内还有多篇可直接对照的文档推荐组合阅读以获得更完整的视角airbnb-artchitectural-evolution.mdAirbnb 从 0 到 15 亿房客的整体架构演进涵盖 Monorail 单体的更多细节与 SOA 服务分层what-does-a-typical-microservice-architecture-look-like.md典型微服务架构的负载均衡、CDN、API 网关、服务发现等关键组件说明orchestration-vs-choreography-microservices.md微服务两种协作方式的优缺点对比is-microservice-architecture-the-silver-bullet.md微服务适用场景的边界讨论帮助判断你的业务是否适合微服务化top-7-most-used-distributed-system-patterns.md分布式系统中高频使用的模式清单服务网格代理、熔断、CQRS、事件溯源、主节点选举、发布订阅、分片等可作为服务治理的下一步学习地图。参考资料本文核心内容基于 evolution-of-airbnbs-microservice.md其内容源自 Airbnb 工程师 Jessica Tai 的技术分享《The Human Side of Airbnbs Microservice Architecture》该分享聚焦于 Airbnb 微服务架构演进过程中「人」的因素——团队边界、归属感与协作方式这恰恰是本文反复强调的组织视角的原始出处。赞分享后端文档教程【免费下载链接】system-design-101Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.项目地址https://gitcode.com/GitHub_Trending/sy/system-design-101点击查看免费下载相关推荐Decision neededDecision needed What we know verbatim evidence, not paraphrase : fact 1 with fi人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排用 Baserow 搭表单从空白表格到可分享公开链接的完整指南用 Baserow 搭表单从空白表格到可分享公开链接的完整指南 需要收集活动报名、客户反馈、报名信息时你可以直接用 Baserow 表单。Baserow 是后端前端数据库低代码工作流自动化如何高效掌握eShopOnWeb从单体到微服务的架构演进全指南如何高效掌握eShopOnWeb从单体到微服务的架构演进全指南 eShopOnWeb是一个基于.NET技术栈构建的电子商务参考应用展示了从传统单体架构向现代后端电商示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表