前言

对于需求频繁变动、业务逻辑复杂的大型项目,微服务架构可以支撑团队快速迭代,保障版本按时交付。本文是《微服务架构设计模式》第一章完整读书笔记,全书以 FTGO 外卖平台为贯穿案例,拆解「单体架构痛点→微服务核心逻辑→扩展立方体 X/Y/Z 轴、微服务模式语言、微服务优缺点、DevOps 交付指标」全套基础概念。适合刚接触微服务、分不清单体与微服务适用场景、看不懂扩展立方体的新手。

一、案例背景:Food to Go (FTGO) 公司

核心业务:消费者 (Consumer) 使用 FTGO 的网站或者移动应用在本地的餐馆 (Restaurant) 下订单,FTGO 会协调一个由送餐员 (Courier) 组成的快递网络来完成订单食品 (Order) 的运送 (Delivery)。这套应用程序使用了多个 Web 服务,例如使用 Stripe 管理支付、使用 Twilio 实现消息传递、使用 Amazon SES (Simple Email Service) 发送电子邮件,等等。

二、单体架构的优势与痛点

2.1 单体架构优势

  • 开发简单:项目结构统一,本地一键启动,无分布式调用复杂问题。
  • 测试、部署成本极低:只需要打包一个程序,一次发布全量更新。
  • 适合初创小型业务:业务模型没验证前,不需要复杂微服务架构。

2.2 单体架构的核心特征与"单体地狱"

单体架构的核心特征:整个系统打包为一个程序部署;业务做大后,开发、测试、发布、扩容都会处处受限,也就是书中说的"单体地狱"。(参考图1-2)

三、微服务的定义与架构

3.1 微服务的定义

微服务架构的概括性定义是:把应用程序功能性分解为一组服务的架构风格。

简单说就是把一个完整外卖系统,按业务拆成互不干扰、能单独上线的小程序。

3.2 FTGO 微服务架构案例

每个后端服务都有一个 REST API 和它自己的私有数据库(注:每一个服务拥有它自己数据库的需求并不意味着每个服务都需要一个独立的数据库服务器),每个都可以独立开发、测试、部署和扩展,开发人员无法绕过服务的 API 并访问其内部组件。

后端服务包括以下内容:

  • Order Service: 管理订单。
  • Delivery Service: 管理从餐馆到客户之间的订单派送(送餐)。
  • Restaurant Service: 维护餐馆有关的信息。
  • Kitchen Service: 管理订单的准备过程。
  • Accounting Service: 处理账单和付款。

四、扩展立方体 X/Y/Z 轴

类比说明:一台服务器(电脑)= 一间厨房,应用实例(运行起来的程序)= 厨师(会做的事情一样)

4.1 X 轴扩展:水平复制

厨师变多(ABC 3 个人,都会进行接单收钱分配骑手)——厨师干的活不变,厨师数量增多——用户请求多,解决吞吐量。

技术实现:【启动 2 套完整 FTGO 单体程序】——人变多

4.2 Z 轴扩展:数据分区

厨师分区(A 专门服务 a 区客人的请求,B 专门服务 d 区客人的请求)——厨师还是全能,只是各自负责不同顾客——用来隔离租户、用户,进一步减轻单个实例压力,提升可用性。

技术实现:【订单服务里实例‑1 处理北京用户,实例‑2 处理上海用户。】——分客户

4.3 Y 轴扩展:功能拆分

厨师分工(A 只负责接单(订单实例)、厨师 B:只管收钱(支付实例)、厨师 3:只管分配骑手(配送实例))——把一个全能厨师拆成专职厨师——解决单体代码臃肿、后期维护难。

技术实现:【拆分成订单、支付、配送 3 种微服务实例】——分工种

4.4 扩展策略总结

  • 单体阶段:仅 X 轴扩容,复制整套应用;
  • 微服务拆分(Y 轴完成):每个服务独立 X 轴扩容;
  • 高并发用户场景:叠加 Z 轴按用户 / 地区隔离流量。

五、微服务架构与 SOA 的异同

有不少针对微服务架构的批判观点,认为其本质只是 SOA 的复刻,不存在全新设计思想。从部分维度来看,该说法存在一定合理性:微服务与 SOA 同属面向服务的架构风格,二者的核心思想一致,均采用多服务拆分的形式来构建整套业务系统。

如果深入研究,就会发现微服务和 SOA 之间巨大的差异(如表1-1):

六、微服务架构的好处

  • 使大型的复杂应用程序可以持续交付和持续部署。
  • 每个服务都相对较小并容易维护。
  • 服务可以独立部署。
  • 服务可以独立扩展。
  • 微服务架构可以实现团队的自治。
  • 更容易实验和采纳新的技术。
  • 更好的容错性。

七、总结

本章通过 FTGO 外卖平台的案例,系统性地介绍了从单体架构到微服务架构的演进过程。微服务架构通过功能分解、独立部署和扩展,解决了单体架构在大型复杂系统中的局限性。扩展立方体的 X/Y/Z 轴为系统扩展提供了清晰的思路,而微服务与 SOA 的对比则帮助我们更深入地理解微服务架构的本质特征。

更多推荐