本文档解释了设计可伸缩、可靠分布式系统的基本原则和组件。它涵盖了一致性模型、服务治理方法、可伸缩性策略和分布式协调机制。有关影响分布式系统的设计方法,请参见设计方法。有关支持分布式系统的具体基础设施组件,请参见基础设施与运维。
分布式系统是一组独立的计算机的集合,对用户而言表现为一个单一的、一致的系统。这些系统将处理、数据存储和其他任务分布在多台计算机上,以实现比单机更大的可伸缩性、容错性和性能。
| 特征 | 描述 |
|---|---|
| 发行版 | 组件在不同的网络计算机上运行 |
| 并发 | 组件同时执行 |
| 缺乏全局时钟 | 所有节点之间没有精确同步 |
| 独立故障 | 组件可以独立于其他组件发生故障 |
| 异步性 | 操作发生时没有时间协调 |
| 异构性 | 组件在硬件、软件和实现上可能有所不同 |
来源:README.md:264-296
来源:README.md:264-296
来源:README.md:264-296, README.md:277-279
CAP 定理指出,分布式系统在一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三者中,只能同时满足其中两项。
BASE 原则为分布式数据库提供了 ACID 特性的替代方案
来源:README.md:280-282
| 一致性模型 | 描述 | 典型用例 |
|---|---|---|
| 强一致性 | 所有节点同时看到相同的数据 | 金融交易 |
| 最终一致性 | 如果没有新的更新,系统会随着时间推移变得一致 | 社交媒体帖子、评论 |
| 因果一致性 | 有因果关系的操作以相同的顺序出现 | 消息系统 |
| 会话一致性 | 在客户端会话内提供一致的视图 | 电子商务购物车 |
| 单调读一致性 | 如果一个进程读取一个值,后续读取不会返回旧值 | 用户资料信息 |
来源:README.md:280-282
服务治理是指在分布式环境中对服务的管理、发现、路由和协调。
来源:README.md:277-279
服务路由涉及根据各种标准将请求定向到适当服务实例的策略
来源:README.md:277-279
可伸缩性是指系统通过增加资源来处理不断增长的工作量的能力。
| 原则 | 描述 |
|---|---|
| 分解 | 将系统分解为更小、更易管理的组件 |
| 分区 | 将数据或处理任务分散到多个资源上 |
| 缓存 | 将频繁访问的数据存储在内存中 |
| 异步处理 | 解耦不需要即时响应的操作 |
| 无状态性 | 设计服务时无需存储客户端状态 |
| 负载均衡 | 将负载分散到多个资源上 |
来源:README.md:265-273
高可用性确保系统比正常情况下持续运行更长时间。
| 类型 | 示例 | 特性 |
|---|---|---|
| 硬件负载均衡器 | F5, Citrix NetScaler | 高性能、昂贵、高级功能 |
| 软件负载均衡器 | Nginx, HAProxy, LVS | 灵活、成本效益高、广泛使用 |
来源:README.md:267-273
限流保护服务免受过多请求的冲击。
来源:README.md:269
| 策略 | 描述 | 优点 | 缺点 |
|---|---|---|---|
| 基于范围 | 按值范围分区 | 简单,利于范围查询 | 可能出现分布不均 |
| 将流量定向到响应时间最快的服务器 | 按键哈希分区 | 均匀分布 | 不利于范围查询 |
| 基于目录 | 查找表将键映射到分片 | 灵活 | 需要额外的查找 |
| 地理 | 按地理位置分区 | 数据本地性,合规性 | 复杂的复制 |
来源:README.md:274-276
分布式锁实现了在不同节点上运行的进程之间的协调。
来源:README.md:282-283
领导者选举对于在分布式系统中维护主节点至关重要。
来源:README.md:291
TCC 模式是一种补偿事务的形式,实现了最终一致性
来源:README.md:292
来源:README.md:294-295
一致性哈希解决了在分布式系统中添加或删除节点时重新分配数据的问题。
一致性哈希最大限度地减少了在添加或删除节点时需要重新映射的键的数量。通过使用虚拟节点,负载可以更均匀地分布到物理节点上。
来源:README.md:296
| 领域 | 最佳实践 |
|---|---|
| 架构 | 对于复杂系统使用微服务,对于简单场景使用单体架构 |
| 通信 | 尽可能优先使用异步通信 |
| 状态管理 | 最小化共享状态,适当时使用事件溯源 |
| 失败处理 | 假设故障会发生,设计时考虑优雅降级 |
| 测试 | 测试时考虑网络延迟、分区和节点故障 |
| 可观测性 | 实施全面的日志记录、监控和分布式追踪 |
| 部署 | 使用蓝绿部署或金丝雀部署策略 |
| 安全 | 在所有层面实施安全措施,而不仅仅是在网关层面 |
来源:README.md:264-296
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(a9b92b)