软考架构师复习站

微服务与分布式:高频案例和论文主线

微服务解决复杂业务和快速迭代,分布式理论解决多节点环境下的一致性、可用性和事务问题。

本页脑图:微服务和分布式

微服务分布式

微服务

  • DDD 拆分
  • 独立部署
  • 独立数据
  • 接口契约

治理

  • 网关
  • 注册发现
  • 配置中心
  • 熔断限流
  • 链路追踪

CAP/BASE

  • CP/AP 取舍
  • 基本可用
  • 软状态
  • 最终一致

事务

  • 2PC/3PC
  • TCC
  • Saga
  • 本地消息表

单体、SOA、微服务对比

维度单体SOA微服务
部署整体部署,一处改动常全量发布。服务可复用,常依赖 ESB。服务独立部署、独立扩缩容。
粒度模块在一个应用内。企业级服务,粒度偏粗。围绕业务能力,粒度较细。
数据常共享数据库。可能共享企业数据模型。强调服务自治,数据库独立。
适合小团队、业务简单、快速起步。异构系统集成。复杂业务、高并发、快速迭代。
风险耦合、发布慢、扩展困难。中心化总线可能重。分布式复杂、运维治理成本高。
论文里不要把微服务写成“拆多个服务”就完了,要强调独立部署、独立数据、接口契约、服务治理和故障隔离。

微服务治理组件

API 网关

统一入口,负责路由、鉴权、限流、协议转换。适合写安全和流量治理前置。

注册发现

服务实例动态上下线,调用方通过注册中心发现地址,适合弹性扩缩容。

配置中心

统一管理配置、开关、阈值,支持动态刷新和灰度。

熔断降级

下游慢或故障时快速失败,返回兜底结果,防止线程耗尽。

限流

令牌桶、漏桶、滑动窗口,保护系统不被突发流量压垮。

链路追踪

记录一次请求经过的服务路径,用于定位慢点和错误源。

口诀:网关进,注册找,配置管,熔断保,限流挡,链路查。

治理组件细化:每个组件解决什么问题

组件没有它的问题它解决什么常见技术案例题关键词
API 网关客户端直接访问多个服务,鉴权和限流分散。统一入口、路由、鉴权、限流、协议转换。Spring Cloud Gateway、Kong、Nginx统一入口、外部访问、安全前置。
注册中心服务地址写死,扩缩容后调用方不知道新实例。服务实例注册、发现、上下线感知。Nacos、Eureka、Consul动态扩容、服务发现。
配置中心配置散落在各服务,改阈值要重新发版。集中配置、动态刷新、灰度开关。Nacos、Apollo、Spring Cloud Config动态阈值、开关、灰度。
熔断降级下游慢导致线程池耗尽,引发级联故障。快速失败、返回兜底、隔离故障。Sentinel、Resilience4j、Hystrix雪崩、超时、兜底。
链路追踪调用链长,出错后不知道慢在哪。记录请求路径、延迟、错误位置。SkyWalking、Zipkin、Jaeger定位慢调用、根因分析。

DDD 指导微服务拆分

DDD 的价值是让服务边界来自业务,而不是来自数据库表或技术层次。考试中提到“服务拆分依据”,优先写 DDD。

战略设计

统一语言、限界上下文、上下文映射。用来确定服务边界和团队边界。

战术设计

实体、值对象、聚合根、领域服务、领域事件。用来组织服务内部模型。

用户认证例子:认证上下文负责登录、Token 生成和会话;权限上下文负责角色、资源、授权策略;审计上下文负责登录日志和异常检测。跨上下文通过领域事件同步,避免服务之间直接共享数据库。

服务拆分原则和反模式

好的拆分

  • 围绕业务能力,而不是围绕 controller/service/dao 技术层。
  • 一个服务拥有自己的数据,避免多个服务共享表。
  • 服务边界内强一致,边界之间最终一致。
  • 高内聚、低耦合,团队可以独立开发部署。

常见反模式

  • 按数据库表一表一服务,导致服务过细。
  • 所有服务共用一个数据库,逻辑拆了数据没拆。
  • 服务之间互相同步调用过多,形成分布式单体。
  • 没有网关、监控和熔断,拆完稳定性更差。

CAP 与 BASE

CAP

C 是一致性,A 是可用性,P 是分区容错性。分布式系统网络分区不可避免,所以常在 CP 与 AP 之间取舍。金融核心偏 CP,评论点赞通知偏 AP。

BASE

基本可用、软状态、最终一致。高并发互联网业务常用:先保证系统可用,再通过重试、补偿、对账达到最终一致。

分布式事务方案

方案思想优点缺点适用
2PC准备 + 提交,由协调者统一提交或回滚。强一致。阻塞、性能低、协调者风险。强一致、低并发场景。
3PC增加预提交阶段,降低阻塞。比 2PC 更少阻塞。实现复杂,工程少用。理论题常见。
TCCTry 预留,Confirm 确认,Cancel 取消。业务可控,性能较好。业务侵入强,需处理幂等和空回滚。秒杀库存、优惠券、支付预授权。
Saga长事务拆成本地事务,每步有补偿。松耦合,适合长流程。中间状态可见,补偿复杂。订单、物流、跨系统流程。
本地消息表业务和消息同库提交,再异步投递。实现稳妥,最终一致。有延迟,需要去重。下单后发积分、发通知。

事务方案选择口诀

业务特征优先方案原因例子
强一致、参与方少、并发不高2PC/数据库事务一致性优先,能接受阻塞和性能损耗。内部资金记账、核心对账。
高并发、资源可预留TCCTry 先冻结资源,Confirm/Cancel 控制业务一致性。秒杀库存、优惠券、支付预授权。
长流程、跨多个系统Saga每步本地提交,失败后执行补偿。订单、仓储、物流、退款。
主业务成功后异步通知本地消息表/可靠消息业务和消息同库提交,后续重试投递。下单后发积分、发短信、写审计。

案例与论文写法

服务拆分依据 → 治理能力 → 数据一致性 → 故障隔离 → 量化效果。

例如:我基于 DDD 将用户认证系统拆为认证、权限、Token、审计四个服务;通过网关、注册发现、配置中心、熔断限流和链路追踪实现服务治理;对跨服务数据采用领域事件和本地消息表保证最终一致;当权限服务超时时,认证主链路通过降级策略返回受限访问结果并记录审计事件,避免故障扩散。