本文档全面概述了 System Design 101 仓库中所涵盖的云服务和分布式系统模式。它详细介绍了构建健壮的云原生分布式系统的基本概念、架构模式、扩展策略和实现考虑因素。有关 AWS、Azure 或 Google Cloud 等特定云提供商实现的信息,请参阅本文档中引用的参考文献。
分布式系统是独立计算机的集合,这些计算机对用户而言呈现为单个的、统一的系统。它们引入了复杂性,但在正确设计时,可以在可伸缩性、可靠性和性能方面提供优势。
CAP 定理指出,分布式系统最多只能同时提供以下三项保证中的两项:
扩展性是分布式系统的基本考虑因素,有两种主要方法:
来源:README.md302 README.md305 README.md313 README.md316
弹性模式有助于分布式系统优雅地处理故障。
| 模式 | 目的 | 实施考虑 |
|---|---|---|
| 断路器 | 防止级联故障。 | 故障阈值达到后打开,允许测试恢复。 |
| 带退避的重试 | 处理瞬时故障。 | 实现指数退避,避免压垮服务。 |
| 舱壁 | 隔离故障。 | 分离关键和非关键资源。 |
| 回退 | 提供降级功能。 | 定义可接受的替代响应。 |
| 超时 | 防止无限等待。 | 根据 SLA 设置适当的超时值。 |
来源:README.md314 README.md319-320 README.md329
来源:README.md335-336 README.md346
来源:README.md321 README.md340 README.md349
来源:README.md145 README.md156 README.md159 README.md161 README.md305
在分布式系统中生成唯一标识符需要特殊的处理方法。
基础设施即代码(IaC)允许以编程方式管理云资源。
| 类别 | 工具 | 主要功能 |
|---|---|---|
| 配置 | Terraform, AWS CloudFormation | 使用声明性代码定义基础设施。 |
| 配置 | Ansible, Chef, Puppet | 配置服务器和应用程序。 |
| 容器化 | Docker, Containerd | 打包应用程序及其依赖项。 |
| 编排 | Kubernetes, ECS | 管理容器部署和扩展。 |
| 无服务器 | AWS Lambda, Azure Functions | 运行代码,无需管理服务器。 |
12-Factor 应用方法论为构建云原生应用程序提供了最佳实践。
构建分布式系统涉及关键的权衡。
| 权衡 | 注意事项 |
|---|---|
| 一致性与可用性 | 强一致性在分区期间会限制可用性。 |
| 性能与可扩展性 | 为其中一个进行优化可能会影响另一个 |
| 延迟与吞吐量 | 降低延迟可能会降低整体吞吐量 |
| 单体应用与微服务 | 更简单的开发与复杂的操作 |
| 同步与异步 | 即时反馈与系统响应能力 |
来源: README.md308 README.md317 README.md342
在分布式系统中,检测节点故障对于维护系统完整性至关重要
| 方法 | 描述 | 注意事项 |
|---|---|---|
| 心跳 | 节点发送周期性信号 | 简单,但可能因网络问题导致误报 |
| Gossip协议 | 节点交换关于其他节点的信息 | 可扩展,状态最终一致性 |
| Phi Accrual | 概率性故障检测 | 基于网络条件的自适应阈值 |
| 法定人数 | 就节点状态达成多数共识 | 强一致性,但延迟较高 |
| 租约 | 有时限的所有权授予 | 适用于领导者选举,需要时间同步 |
来源: README.md309 README.md310 README.md338
分布式组件之间的通信通常使用消息队列模式
来源: README.md132 README.md326 README.md332
云和分布式系统继续快速发展,模式和技术不断涌现以应对新的挑战。本文档中概述的概念、架构和模式为理解和实施云环境中的健壮分布式系统奠定了基础。与任何复杂系统一样,仔细考虑需求、约束和权衡对于成功至关重要。