菜单

分布式系统设计

相关源文件

目的与范围

本文档解释了设计可伸缩、可靠分布式系统的基本原则和组件。它涵盖了一致性模型、服务治理方法、可伸缩性策略和分布式协调机制。有关影响分布式系统的设计方法,请参见设计方法。有关支持分布式系统的具体基础设施组件,请参见基础设施与运维

1. 分布式系统简介

分布式系统是一组独立的计算机的集合,对用户而言表现为一个单一的、一致的系统。这些系统将处理、数据存储和其他任务分布在多台计算机上,以实现比单机更大的可伸缩性、容错性和性能。

1.1 分布式系统的关键特性

特征描述
发行版组件在不同的网络计算机上运行
并发组件同时执行
缺乏全局时钟所有节点之间没有精确同步
独立故障组件可以独立于其他组件发生故障
异步性操作发生时没有时间协调
异构性组件在硬件、软件和实现上可能有所不同

来源:README.md:264-296

2. 架构基础

2.1 常见架构模式

来源:README.md:264-296

2.2 分布式系统组件

来源:README.md:264-296, README.md:277-279

3. CAP 定理与一致性模型

CAP 定理指出,分布式系统在一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三者中,只能同时满足其中两项。

3.1 BASE 原则

BASE 原则为分布式数据库提供了 ACID 特性的替代方案

  • 基本可用:系统保证可用性
  • 软状态:状态可能在没有输入的情况下改变
  • 最终一致性:系统会随着时间推移变得一致

来源:README.md:280-282

3.2 一致性模型

一致性模型描述典型用例
强一致性所有节点同时看到相同的数据金融交易
最终一致性如果没有新的更新,系统会随着时间推移变得一致社交媒体帖子、评论
因果一致性有因果关系的操作以相同的顺序出现消息系统
会话一致性在客户端会话内提供一致的视图电子商务购物车
单调读一致性如果一个进程读取一个值,后续读取不会返回旧值用户资料信息

来源:README.md:280-282

4. 分布式服务治理

服务治理是指在分布式环境中对服务的管理、发现、路由和协调。

4.1 服务注册与发现

4.2 服务注册与发现模式

来源:README.md:277-279

4.3 服务路由控制

服务路由涉及根据各种标准将请求定向到适当服务实例的策略

  • 随机路由
  • 轮询
  • 服务响应时间
  • 一致性哈希
  • 粘滞连接
  • 本地路由优先级

来源:README.md:277-279

5. 可伸缩性设计

可伸缩性是指系统通过增加资源来处理不断增长的工作量的能力。

5.1 水平伸缩与垂直伸缩

5.2 可伸缩性设计原则

原则描述
分解将系统分解为更小、更易管理的组件
分区将数据或处理任务分散到多个资源上
缓存将频繁访问的数据存储在内存中
异步处理解耦不需要即时响应的操作
无状态性设计服务时无需存储客户端状态
负载均衡将负载分散到多个资源上

来源:README.md:265-273

6. 稳定性与高可用性

高可用性确保系统比正常情况下持续运行更长时间。

6.1 可靠性模式

6.2 硬件和软件负载均衡

类型示例特性
硬件负载均衡器F5, Citrix NetScaler高性能、昂贵、高级功能
软件负载均衡器Nginx, HAProxy, LVS灵活、成本效益高、广泛使用

来源:README.md:267-273

6.3 限流策略

限流保护服务免受过多请求的冲击。

来源:README.md:269

7. 数据库伸缩

7.1 读写分离模式

7.2 分片模式

7.3 数据库分片策略

策略描述优点缺点
基于范围按值范围分区简单,利于范围查询可能出现分布不均
将流量定向到响应时间最快的服务器按键哈希分区均匀分布不利于范围查询
基于目录查找表将键映射到分片灵活需要额外的查找
地理按地理位置分区数据本地性,合规性复杂的复制

来源:README.md:274-276

8. 分布式一致性与协调

8.1 分布式一致性算法

8.2 分布式锁

分布式锁实现了在不同节点上运行的进程之间的协调。

来源:README.md:282-283

8.3 分布式领导者选举

领导者选举对于在分布式系统中维护主节点至关重要。

来源:README.md:291

9. 分布式事务

9.1 两阶段提交 (2PC)

9.2 TCC (Try-Confirm-Cancel) 模式

TCC 模式是一种补偿事务的形式,实现了最终一致性

  • Try:资源被预留
  • Confirm:如果所有 Try 阶段都成功,则操作完成
  • Cancel:如果任何 Try 阶段失败,预留资源将被释放

来源:README.md:292

10. 分布式系统中的唯一 ID 生成

10.1 常见 ID 生成策略

来源:README.md:294-295

11. 一致性哈希

一致性哈希解决了在分布式系统中添加或删除节点时重新分配数据的问题。

一致性哈希最大限度地减少了在添加或删除节点时需要重新映射的键的数量。通过使用虚拟节点,负载可以更均匀地分布到物理节点上。

来源:README.md:296

12. 分布式系统设计最佳实践

领域最佳实践
架构对于复杂系统使用微服务,对于简单场景使用单体架构
通信尽可能优先使用异步通信
状态管理最小化共享状态,适当时使用事件溯源
失败处理假设故障会发生,设计时考虑优雅降级
测试测试时考虑网络延迟、分区和节点故障
可观测性实施全面的日志记录、监控和分布式追踪
部署使用蓝绿部署或金丝雀部署策略
安全在所有层面实施安全措施,而不仅仅是在网关层面

来源:README.md:264-296