课程地图 分布式系统
场景库 术语表
M3 · Chapter 09

分布式系统

理解一个产品运行在多台机器后出现的新问题。

7 个小节8 个业务案例4 类业务场景设计师视角
先看哪些场景

订单与支付、库存与抢购、多租户 SaaS、内容与媒体

它是什么

分布式系统由多个通过网络协作的进程、节点或服务共同完成任务。

为什么需要

规模、可用性和团队独立性会推动系统分布到多台机器,同时引入延迟、失败和一致性问题。

位于哪一层

位于架构与基础设施交界处,影响服务通信、数据和稳定性。

和谁连接

扩容、复制、CAP、分布式锁、分布式事务、超时、重试、熔断和降级。

项目里怎么出现

大型 SaaS、支付、协作编辑和微服务平台都属于分布式系统。

Learning Outcomes

学完这一章,你应该能

  • 理解分布式与多实例
  • 区分纵向扩容和水平扩容
  • 理解网络失败与数据一致性
  • 认识超时、重试、熔断和降级
09.01

什么是分布式系统?

当一个产品由多个网络节点共同完成任务,它就进入分布式世界。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

订单与支付CASE 01

一次下单为什么可能涉及十几台机器?

用户正在做什么

订单请求经过网关、订单服务、库存服务、支付服务、数据库和消息系统。

业务会出什么问题

每个 Node 都可能独立变慢或失败,整体仍需给用户明确结果。

技术怎样介入

Distributed System 通过网络协作,并针对 Partial Failure 设计超时、重试和补偿。

产品与设计怎样落地

页面需要“处理中、结果未知、稍后查询”等状态,避免把网络故障直接等同于业务失败。

多个前端服务器、后端实例、缓存节点、数据库副本和消息消费者可以共同支撑一个产品。用户看到一个系统,内部可能跨越很多机器和区域。

网络连接存在延迟、丢包和中断,远程调用比本地函数更不可靠。设计与工程都要接受“部分成功”和“暂时未知”。

One Product → Many Processes / Machines / Regions
System View
多实例应用
多数据库节点
缓存集群
消息消费者
跨地域节点
外部第三方服务
Designer Lens

加载、重试、同步中和局部失败状态,很多都来自分布式不确定性。

Distributed SystemNodePartial Failure
09.02

Scale Up 与 Scale Out

提升单机能力叫纵向扩容,增加实例数量叫水平扩容。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

库存与抢购CASE 01

演唱会开票时,增加一台更强服务器够吗?

用户正在做什么

开票瞬间并发从几百上升到几十万。

业务会出什么问题

Scale Up 有硬件上限和单点风险,带状态的应用也难以平均分配请求。

技术怎样介入

通过 Scale Out 增加多个 Stateless 应用实例,把会话和共享状态放到外部存储。

产品与设计怎样落地

设计排队、等待时间、库存确认和限流页面,降低用户重复刷新。

Scale Up 通过更多 CPU、内存和更快磁盘增强一台机器,实施简单但存在上限。Scale Out 增加机器或实例,需要负载均衡和数据协调。

无状态应用更容易水平扩容,因为任何实例都能处理请求。会话和文件需要放到共享系统或进行粘性路由。

Scale Up:One Bigger Machine;Scale Out:More Instances
System View

纵向扩容

  • 升级单机配置
  • 简单直接
  • 存在硬件上限

水平扩容

  • 增加实例
  • 弹性更强
  • 需要分流与共享状态
Designer Lens

用户量增长时,页面表现可能不变,背后实例数量和流量治理已经发生变化。

Scale UpScale OutStateless
09.03

复制、分片与高可用

数据系统通过副本和分片提高可用性与容量。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

多租户 SaaSCASE 01

数据库机器故障时,企业客户还能继续访问吗?

用户正在做什么

主数据库突然宕机,系统保存了大量项目和合同。

业务会出什么问题

单份数据会形成单点故障,单台机器容量也可能达到上限。

技术怎样介入

Replication 保存副本并支持 Failover;数据量继续增长时可按租户或范围 Sharding。

产品与设计怎样落地

故障切换期间可能短暂只读或延迟,页面要给出维护和重试提示。

Replication 保存多个数据副本,一个节点故障时可以切换。Sharding 把不同数据分散到多个节点,提高容量和并行处理能力。

复制会带来同步延迟,分片会让跨分片查询和事务更复杂。备份用于灾难恢复,不能完全替代实时副本。

Replication:Same Data on Many Nodes;Sharding:Different Data on Different Nodes
System View

复制 Replication

  • 多个副本
  • 提高可用性
  • 可能读取延迟数据

分片 Sharding

  • 拆分数据量
  • 提高容量
  • 跨分片操作复杂
Designer Lens

跨地区产品可能出现刚修改后另一个端暂时未更新,这通常与复制延迟有关。

ReplicationShardingFailover
09.04

CAP 与一致性选择

网络分区发生时,系统需要在强一致与持续可用之间做权衡。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

订单与支付CASE 01

银行卡余额和社交点赞为什么采用不同一致性?

用户正在做什么

银行转账必须立即看到准确余额;点赞数晚几秒同步通常可以接受。

业务会出什么问题

网络分区时,系统无法同时保证所有节点立即一致和始终可用。

技术怎样介入

余额优先 Strong Consistency;点赞可接受 Eventual Consistency。CAP 帮助理解这种选择。

产品与设计怎样落地

关键金额要显示确认结果,弱一致数据可显示近似值或稍后刷新。

Consistency 要求所有节点看到一致数据,Availability 要求每个请求都得到响应,Partition Tolerance 要求网络分裂时系统仍能工作。分布式系统通常必须面对网络分区。

实际设计会按业务选择:余额和库存更强调正确性,点赞数和推荐可以接受短暂延迟。CAP 是理解方向,不是简单给数据库贴标签。

Network Partition → Choose Immediate Consistency or Continued Availability
System View
余额:强一致倾向
库存:防止超卖
协作状态:低延迟与冲突处理
点赞计数:可短暂延迟
搜索索引:最终一致
分析报表:批量更新
Designer Lens

产品文案和交互要反映业务容忍度:余额需要明确确认,点赞可以先乐观更新。

CAPStrong ConsistencyEventual Consistency
09.05

分布式锁与分布式事务

多节点并发操作同一资源时需要协调。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

库存与抢购CASE 01

最后一个会议室时段被两个人同时预订怎么办?

用户正在做什么

两名用户几乎同时确认同一会议室和时间。

业务会出什么问题

多个服务或实例同时检查“可用”后都写入,会产生重复预订。

技术怎样介入

Distributed Lock 或数据库唯一约束保护关键资源,确保只有一个请求成功。

产品与设计怎样落地

提交后显示确认中,失败时明确“刚刚已被他人预订”并推荐其他时段。

订单与支付CASE 02

跨服务下单失败后,怎样撤销已经完成的步骤?

用户正在做什么

订单创建成功、库存已锁定,支付服务随后失败。

业务会出什么问题

跨服务无法使用一个本地数据库事务覆盖全部步骤。

技术怎样介入

Saga 把流程拆成多个本地事务,并为已完成步骤定义 Compensation,例如释放库存。

产品与设计怎样落地

设计订单取消中、库存释放中和人工处理状态。

分布式锁可以避免多个实例同时执行同一任务,例如同一订单重复结算。锁需要超时、所有权和故障恢复,错误实现可能导致死锁或重复执行。

跨服务事务难以使用单个数据库事务覆盖。Saga、事件和补偿操作常用于让多个步骤最终达到可接受状态。

Many Workers → Shared Resource → Lock / Coordination;Many Services → Saga / Compensation
System View
订单创建
支付完成
库存扣减失败
触发补偿
退款或恢复库存
最终状态明确
Designer Lens

长流程要设计部分完成、撤销、人工介入和可追踪步骤。

Distributed LockSagaCompensation
09.06

Timeout、Retry、Circuit Breaker 与降级

远程调用必须设定失败边界,避免故障扩散。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

内容与媒体CASE 01

推荐服务故障时,首页为什么还能打开?

用户正在做什么

首页依赖推荐服务,服务响应变慢并持续报错。

业务会出什么问题

无限等待和盲目 Retry 会堆积请求,拖垮整个首页。

技术怎样介入

设置 Timeout;仅对安全请求重试;连续失败触发 Circuit Breaker;使用热门内容作为 Fallback。

产品与设计怎样落地

推荐区域可以降级为固定内容,并明确哪些功能暂时不可用。

Timeout 限制等待时间,Retry 处理短暂故障,指数退避避免大量请求同时重试。Circuit Breaker 在下游持续失败时暂时停止调用。

Fallback 或降级可以返回缓存、默认值或关闭非核心功能。重试只适合幂等或可安全重复的操作。

Call → Timeout → Retry with Backoff → Circuit Open → Fallback
System View
发起调用
等待超时
有限重试
连续失败触发熔断
返回降级结果
探测恢复
Designer Lens

系统降级时应保留核心任务,清楚提示哪些数据可能延迟或功能暂不可用。

TimeoutRetryCircuit BreakerFallback
09.07

可观测性是分布式系统的眼睛

请求跨越多个服务后,需要统一日志、指标和追踪。

Business Scenario First

先从真实业务问题进入

先看用户动作和业务风险,再理解技术为什么出现,以及它会怎样改变页面、状态和流程。

订单与支付CASE 01

一笔支付卡了八秒,开发怎样找到慢在哪?

用户正在做什么

用户只看到支付处理中,后端请求经过网关、订单、支付和数据库。

业务会出什么问题

单个服务日志无法还原完整调用链。

技术怎样介入

每次请求携带 Correlation ID,Distributed Trace 串起各 Node 的耗时、错误和依赖。

产品与设计怎样落地

错误页或客服工具可展示可复制的请求编号,帮助快速定位。

一个错误可能发生在 Gateway、业务服务、缓存、数据库或第三方接口。Trace ID 将各节点日志串成完整调用链。

指标观察延迟、错误率、吞吐和资源,分布式追踪观察单次请求路径,日志提供详细事件。没有这些能力,很难定位间歇性故障。

Request ID → Gateway → Service A → Service B → Database → Trace
System View
用户请求
统一 Trace ID
跨服务传播
收集 Logs/Metrics/Traces
告警与定位
Designer Lens

用户反馈“偶尔失败”时,工程需要时间、账号、操作和请求标识才能定位。

ObservabilityDistributed TraceCorrelation ID
Chapter Recap

本章小结

  • 01
    分布式系统由多个网络节点共同完成产品能力。
  • 02
    水平扩容、复制和分片提高容量,也增加协调成本。
  • 03
    一致性、锁和事务需要围绕业务风险选择。
  • 04
    超时、重试、熔断、降级和可观测性控制分布式失败。
Practice

把认知变成一张图

为“支付成功但库存扣减失败”设计一条补偿流程,并写出用户最终可能看到的三种状态。

Quick Check

随堂检查

QUESTION 01
增加更多同类服务实例属于什么?
增加节点数量属于水平扩容。
QUESTION 02
下游持续失败时暂时停止调用,使用什么模式?
熔断器用于阻止持续故障扩散。