软件架构设计

架构模式演进与微服务

软件架构设计 期末复习
目录

# 04 架构模式演进与微服务

**扫描资料与纪要共同给出的答题方向:**架构模式不是背定义,而是解释“当时的核心矛盾是什么、改变了什么管理对象、解决了什么、又引入了什么代价”。扫描资料的总结句是:在新的成本结构下,重新划定边界和协作方式。

# 架构演进:每一步都是取舍

# 脑图:架构模式与微服务速记

**记忆方法:**模式题按“上下文、问题、结构、收益、代价”作答;微服务题再补部署、治理和分布式代价。

# 纪要补充:架构演进链和 SOA 骨架

回到总结页:纪要可能考查方式索引 已把本知识点与相关训练题互链,复习时可从题型反查本节。

**作答原则:**模式题不靠名词解释拿分,要解释“为什么出现、改变了什么、牺牲了什么、带来什么新问题”。

可能画图 必须出现 可写取舍
SOA 骨架 消费者、服务总线/注册与治理、服务提供者 服务复用和集成能力提升,但总线/治理复杂,局部自治不如微服务。
C&C / P2P 运行时组件、连接器、交互关系 适合解释动态通信,不要画成静态类图。
阶段 想解决的痛点 获得的能力 新代价 / 下一步原因
主机终端 机器昂贵,需要共享计算资源 集中管控、一致性与可靠性 终端弱,交互体验不足
Client / Server 改善用户交互体验
客户端利用本地算力 胖客户端难部署、难维护
分层 / SOA 统一入口、降低维护耦合 职责分工、复用与集成 集中协调重、独立发布不足、性能开销
微服务 独立迭代与局部自治 按业务能力拆分、独立部署扩缩容 分布式故障、运维与长期稳定运行复杂
云原生 / 事件驱动 支撑大量服务稳定运行与弹性 容器化、编排、异步解耦、可观测 时序、一致性与故障定位更难

**论述题模板:**先给场景背景,再指出最关键质量属性,接着解释结构变化,最后写收益与引入的新风险。


# Pattern、Tactic 与 Style

# Tactic

控制单个质量响应的原子动作,如冗余、限制依赖、缓存。

# Pattern

针对反复出现问题的一组决策组合,如分层、Broker、Pipe-and-Filter。

# Style

描述元素和关系类型的组织方式,如微服务风格。

# 常见模式复习卡

模式 核心结构 优势 限制
Layered 按抽象层次组织模块 关注点分离、可修改 跨层开销、严格分层不灵活
Multi-tier 将运行元素部署到不同节点 部署隔离与扩展 网络与运维成本
Broker 代理协调客户端与服务端通信 位置透明、可扩展 中介瓶颈、安全和测试复杂
Pipe-and-Filter 数据依次通过过滤器转换 复用、并行、可组合 交互式处理和共享状态不佳
P2P 各 peer 既可请求也可提供服务 去中心化、资源聚合 协调、安全与一致性复杂
SOA 服务、注册表、ESB/编排 企业集成、服务复用 中间件复杂与发布粒度粗

# 常见 Pattern 分别属于什么 Style

判断口诀:看这个 pattern 的主问题是什么。若主要描述静态代码/模块如何分组和依赖,归入 Module Style;若主要描述运行期组件如何交互,归入 Component-and-Connector(C&C)Style;若主要描述软件元素如何映射到机器、进程、团队或部署环境,归入 Allocation Style

Pattern 主要 Style 理由
Layered Module Style 核心是把模块按抽象层次分组,并规定 allowed-to-use 依赖方向;讨论的是静态分解与依赖控制。
MVC C&C Style Model、View、Controller 作为运行期组件协作,关键关系是通知、调用与状态更新;重点不是部署位置。
Pipe-and-Filter C&C Style / Data-flow Style Filter 是组件,Pipe 是连接器,数据沿连接器被连续转换;判断点是运行期数据流。
Broker C&C Style Client、Server、Broker、Proxy 通过通信连接器协作;Broker 解决的是运行期定位、转发与解耦。
Client-Server C&C Style 核心是 Client 通过 request/reply connector 调用 Server 服务;它可能被部署成多层,但模式本身先描述交互关系。
P2P C&C Style Peer 既请求也提供服务,运行期连接关系可变化;重点是对等组件之间的通信与协作。
SOA C&C Style / Service Style Service Provider、Consumer、Registry、ESB、Orchestration 通过 SOAP/REST/消息连接器协作;本质是服务组件和连接器的组织方式。
Publish-Subscribe C&C Style / Event-based Style 发布者和订阅者通过事件分发连接器通信;关注点是事件通知、订阅关系和异步交互。
Shared-Data C&C Style / Data-centered Style 数据访问组件通过共享数据存储通信;共享 store 既是协调中心,也带来耦合、瓶颈和单点风险。
Map-Reduce Allocation Style 课程材料把它归为 Allocation Pattern,因为重点是 Map/Reduce 实例如何分配到处理器并由基础设施部署、监控和恢复。
Multi-tier Allocation Style Tier 是运行元素的逻辑分组,经常映射到不同平台或节点;它回答“部署到哪里、如何隔离和扩展”。
Microservices C&C Style + Allocation 关注点 服务本身是独立运行组件,通过轻量 API、消息或网关交互;同时强调独立部署、DevOps 与运行治理,所以答题可先归 C&C,再补部署/运维维度。

考试提醒:一个 pattern 可以体现多个 style 的味道,但答题要抓主导结构。例如 Client-Server 可部署成多层系统,但它的基本定义是运行期请求/响应交互,所以先归 C&CMulti-tier 则直接讨论 tier 到执行环境的映射,所以归 Allocation

知识出处:04 架构模式演进与微服务06 往年题与训练题;补充证据:扫描文档20260526_192514.pdfslides/05_Patterns.pdf研究生版/研究生往年题版.md

# 架构模式速判图:Layered / Multi-tier / C&C

定位:上面的表格是文字版归属判断,这张图保留为图解版速判。考试时先看主导关系:模块依赖看 Layered / Module,部署映射看 Multi-tier / Allocation,运行交互看 C&C

# 常见 Pattern 结构图补充

补图范围:速判图已作为图解版保留;这里优先使用 UML/PlantUML 补充常见具体模式的结构图,重点看元素连接关系

# MVC 结构图

# Client-Server 结构图

# Broker 结构图

# Pipe-and-Filter 结构图

# P2P 结构图

# Publish-Subscribe 结构图

# Shared-Data 结构图

# Map-Reduce 结构图

# Microservices 结构图

读图方法:考试作图不用追求工具细节,优先标出组件/模块名称连接器类型主导约束。例如 Pipe-and-Filter 要画 Pipe,Broker 要画 Broker,SOA 要画 Registry 与 ESB,Microservices 要画 API Gateway、独立服务与独立数据。

知识出处:04 架构模式演进与微服务;补充证据:slides/05_Patterns.pdfslides/08Microservices Architecture.pdf扫描文档20260526_192514.pdf


# 微服务:不要只背定义

# 六个应答关键词

  • **服务组件化:**小服务通过轻量通信协作。

  • 围绕业务能力组织:服务边界不是技术分层,而是业务职责

  • **独立自治:**服务可独立开发、部署与扩缩容。

  • **去中心化:**治理和数据管理更分散,但一致性更难。

  • **基础设施自动化:**持续交付、容器化与编排成为前提。

  • **演进与故障设计:**必须面向故障、监控和渐进变化。

# SOA 与微服务比较

维度 SOA 微服务
主要目标 企业服务集成与复用 快速独立演进与部署
通信/中介 常依赖 ESB 与较重治理 轻量 API/消息、API Gateway
服务粒度 相对更粗 围绕业务能力更细
关键风险 中介复杂、集中瓶颈 分布式事务、故障定位与运维复杂

# SOA 模式结构:消费者、服务总线与提供者

**画图落点:**不要只写 SOA 与微服务的差异;SOA 模式题应画出 Service Consumer → ESB / Orchestration → Service Provider,并标出 Service Registry 的发布与发现关系。

ESB 是什么:ESBEnterprise Service Bus(企业服务总线)。在 SOA 中,它相当于企业内部的“服务中介/集成层”,负责把服务消费者和服务提供者连接起来,并承担路由协议转换消息格式转换服务编排安全与治理等工作。优点是便于企业系统集成和服务复用;代价是中间件变重,ESB 可能成为性能瓶颈或集中治理瓶颈,所以微服务更强调轻量 API、消息代理或点对点通信。

知识出处:04 架构模式演进与微服务;补充证据:slides/08Microservices Architecture.pdf软件架构模式演进:从主机到 AI 原生

来源:slides/05_Patterns.pdf、《软件体系结构复习课录音整理版.docx》,以及补充课件中关于架构模式演进的部分。若原文件标题含 AI 原生,仅作为考后或背景内容来源边界,不纳入本页考试范围。

# 微服务相关模式要会举例

# 拆分 / Decomposition

  • **Business Capability:**按业务能力拆服务。

  • **Subdomain:**按 DDD 子域拆服务。

  • **Strangler Fig:**逐步替换旧单体。

  • **Database per Service:**明确数据归属和自治边界。

# 通信 / Communication

  • **API Gateway:**统一入口、鉴权、限流和路由。

  • **Service Discovery:**定位动态实例。

  • **Messaging / Event-driven:**异步解耦。

  • **Circuit Breaker / Saga:**故障隔离与跨服务一致性。

# 部署 / Deployment

  • **Service Instance per Host:**隔离强。

  • **Multiple Service Instances per Host:**资源利用高。

  • **Service Instance per Container:**容器化独立发布。

  • **Serverless / FaaS:**事件触发,按需运行。

# 可观测性 / Observability

  • **Log Aggregation:**集中日志。

  • **Distributed Tracing:**跨服务调用链。

  • **Health Check API:**健康探测与摘流。

  • **Metrics / Monitoring:**指标、容量和告警。

# 微服务相关模式:人话版解释

一句话理解:微服务把一个大系统拆成很多小服务,好处是能独立开发和部署;坏处是服务变多、网络调用变多、故障点变多、排查更难。下面这些模式,就是给这些新麻烦配的工具。

模式 它在解决什么问题 更容易懂的解释 例子 / 代价
服务拆分
Decomposition
一个大系统太难改、太难发布。 把“大厨房”拆成多个窗口:课程、订单、支付、库存各管各的,哪个服务改了就发布哪个。 **例子:**支付服务单独升级不影响选课服务。
**代价:**边界划错会导致服务之间频繁互相调用。
断路器
Circuit Breaker
一个服务坏了,其他服务一直等它,最后全系统被拖垮。 像家里的空气开关:下游连续失败时先“跳闸”,调用方快速失败或走降级,不再傻等。 **例子:**支付接口挂了,订单服务先提示稍后支付。
**代价:**阈值难调,太敏感会误熔断。
服务注册与发现
Registry / Discovery
服务实例会动态扩缩容,调用方不知道该找哪台机器。 像通讯录:服务启动时登记地址,调用方先查通讯录,再去找可用实例。 **例子:**订单服务查注册中心,找到当前可用的库存服务。
**代价:**注册中心本身要高可用。
API 网关 / 边缘网关
API Gateway
客户端如果直接调用很多服务,会很乱,也难统一鉴权、限流和路由。 像商场总服务台:用户只找一个入口,网关负责转发到课程、订单、支付等服务。 **例子:**网关统一做登录校验、限流、灰度路由。
**代价:**网关可能成为瓶颈或单点风险。
容器化
Containerization
服务太多,部署环境不一致,发布和扩容麻烦。 把每个服务连同运行环境打包成“标准盒子”,到哪里都按同样方式运行。 **例子:**选课服务高峰期复制多个容器实例。
**代价:**需要编排、镜像治理和运维平台。
Serverless 有些能力不是一直运行,自己维护服务和机器不划算。 按事件触发函数,平时不占资源,用到时再运行。 **例子:**支付成功后触发发送通知函数。
**代价:**冷启动、调试和厂商绑定。
可观测性
Logs / Metrics / Tracing
请求跨多个服务,出问题时不知道卡在哪一步。 给系统装“行车记录仪”:日志看发生了什么,指标看是否变慢,调用链看请求经过了哪些服务。 **例子:**一次下单慢了,调用链显示卡在库存服务。
**代价:**采集、存储和告警本身也有成本。
健康检查
Health Check
服务实例可能已经坏了,但负载均衡还在把请求打过去。 平台定期问服务“你还好吗?”不健康就先摘掉,等恢复再放回流量池。 **例子:**支付服务数据库连不上,健康检查失败,网关停止转发。
**代价:**检查太频繁会增加额外负载。

答题模板:微服务相关模式不要只背名字,要按“拆小之后产生的问题 → 用什么模式处理 → 带来什么代价”来写。例如:服务拆小后故障会沿调用链传播,所以用断路器快速失败和降级;但它需要合理阈值,否则可能误熔断。

# 微服务部署与迁移决策

# 纪要补充:微服务考点只抓特性、对比和模式

回到总结页:纪要可能考查方式索引 已把本知识点与相关训练题互链,复习时可从题型反查本节。

**老师说明:**微服务基础部分不重点考定义,更可能考特性、与其他架构风格的对比、服务边界与关键模式。

考点 答题要点 例子
为什么从 SOA 走向微服务 SOA 分层不够细,独立部署发布能力不足,局部迭代慢 订单、支付、库存不能每次都等统一版本发布。
服务拆分 / 边界识别 按业务能力、操作流程、限界上下文识别服务与 API 报价、库存、订单分别有独立模型和发布节奏。
通信与韧性 断路器、服务注册与发现、边缘网关 下游故障时熔断,调用方快速失败并保护系统。
部署与运行 容器化、Serverless、可观测性、健康检查 用日志、指标、追踪定位跨服务问题。
部署选择 适用与收益 主要代价
Single-host 服务少、资源有限;最简单且部署快 隔离弱,单机故障影响大
Multi-host / VM 需要隔离或独立伸缩;故障域更清晰 资源开销和运维工作增加
Container / Platform 服务多且高频发布;易编排、扩缩与滚动更新 平台治理、观测与故障排查更复杂
  1. **识别边界:**按业务能力或限界上下文选择先拆的服务。

  2. **选择部署:**根据隔离、伸缩、发布频率选择满足需求的最轻量方案。

  3. **渐进迁移:**通过网关将新请求导向新服务,规划数据迁移与兼容。

  4. **验证权衡:**用可用性、可伸缩性、部署性与运维复杂度检验方案。


# 可直接背诵答案

# 英文题面常见问法

English prompt 答题要点
Compare Layered Pattern and Multi-Tier Pattern. Layered 偏逻辑职责分层;Multi-Tier 偏物理部署分层;分别说明收益和限制。
Explain Broker Pattern / MVC / Pipe-and-Filter. 按 Context → Problem → Structure → Benefit → Limitation 写。
Compare SOA and Microservice Architecture. 服务粒度、部署自治、治理方式、通信复杂度、组织和运维代价。
Why did architecture evolve from CS to SOA and then to microservices? 每一步都围绕质量属性取舍:交互体验、可维护性、独立部署、运行治理。
List common microservice patterns. Decomposition, Circuit Breaker, Service Registry and Discovery, API Gateway, Containerization, Observability。

# 题 1:架构模式怎样作答

架构模式是针对重复出现的设计问题而形成的一组可复用架构决策。回答模式题时,应先说明其适用上下文和要解决的问题,再描述方案中的元素、关系与约束,最后分析它改善了哪些质量属性以及带来了哪些限制。例如,Pipe-and-Filter 将数据处理分解为由管道连接的过滤器,利于复用和组合,但不适合需要复杂交互或大量共享状态的场景。

# 题 2:架构演进的逻辑

架构演进是为了在新环境和新成本约束下重新安排协作方式。主机终端以集中资源换取可靠管理,却损失交互体验;Client/Server 改善用户体验,却产生胖客户端维护问题;分层和 SOA 加强分工与集成,但独立发布和性能受限;微服务提高局部自治与独立部署能力,却引入分布式故障、一致性和运维复杂性;云原生与事件驱动增强弹性和解耦,同时使时序与排错更困难。

# 题 3:微服务与 SOA 比较

SOA 与微服务都通过服务化协作支持大型系统。SOA 更关注企业集成和服务复用,常依赖注册表、ESB 与编排;微服务更关注围绕业务能力的小粒度拆分、轻量通信、独立部署与持续交付,并借助网关、服务发现、断路器、容器化与可观测性应对运行问题。微服务的优势是迭代和扩展更灵活,代价是分布式系统的故障、一致性和运维成本更高。

# 精选来源

  • 飞书纪要:老师关于架构演进、模式考法与微服务重点的讲解。

  • 上传资料:《扫描文档20260526_192514.pdf》(MinerU OCR)的模式演进页面,从主机/终端、C/S、三层/分层、SOA、微服务到事件驱动/云原生梳理结构与质量属性取舍。

  • 专题补充依据:原始课件 `slides/05_Patterns.pdf` 与 `slides/08Microservices Architecture.pdf`。

  • 本地《研究生往年题版.md》仅作为训练题线索,不作为概念与结论的主依据。

(注:内容由 AI 生成,请谨慎参考)