菜单

云与分布式系统

相关源文件

目的与范围

本文档全面概述了 System Design 101 仓库中所涵盖的云服务和分布式系统模式。它详细介绍了构建健壮的云原生分布式系统的基本概念、架构模式、扩展策略和实现考虑因素。有关 AWS、Azure 或 Google Cloud 等特定云提供商实现的信息,请参阅本文档中引用的参考文献。

分布式系统的核心概念

分布式系统是独立计算机的集合,这些计算机对用户而言呈现为单个的、统一的系统。它们引入了复杂性,但在正确设计时,可以在可伸缩性、可靠性和性能方面提供优势。

CAP 定理与一致性模型

CAP 定理指出,分布式系统最多只能同时提供以下三项保证中的两项:

  • 一致性:所有节点在同一时间看到相同的数据
  • 可用性:每次请求都能收到响应
  • 分区容错性:系统即使在网络分区的情况下也能继续运行

来源:README.md158-159

伸缩策略

扩展性是分布式系统的基本考虑因素,有两种主要方法:

来源:README.md302 README.md305 README.md313 README.md316

弹性模式

弹性模式有助于分布式系统优雅地处理故障。

模式目的实施考虑
断路器防止级联故障。故障阈值达到后打开,允许测试恢复。
带退避的重试处理瞬时故障。实现指数退避,避免压垮服务。
舱壁隔离故障。分离关键和非关键资源。
回退提供降级功能。定义可接受的替代响应。
超时防止无限等待。根据 SLA 设置适当的超时值。

来源:README.md314 README.md319-320 README.md329

云服务模型和架构

云服务模型

来源:README.md335-336 README.md346

AWS 架构组件

来源:README.md321 README.md340 README.md349

分布式数据管理

数据分区策略

来源:README.md145 README.md156 README.md159 README.md161 README.md305

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

在分布式系统中生成唯一标识符需要特殊的处理方法。

来源:README.md322 README.md328

基础设施与运维

基础架构即代码 (IaC)

基础设施即代码(IaC)允许以编程方式管理云资源。

类别工具主要功能
配置Terraform, AWS CloudFormation使用声明性代码定义基础设施。
配置Ansible, Chef, Puppet配置服务器和应用程序。
容器化Docker, Containerd打包应用程序及其依赖项。
编排Kubernetes, ECS管理容器部署和扩展。
无服务器AWS Lambda, Azure Functions运行代码,无需管理服务器。

来源:README.md324 README.md387

12-Factor 应用方法论

12-Factor 应用方法论为构建云原生应用程序提供了最佳实践。

  1. 代码库:一个代码库,多次部署
  2. 依赖关系:显式声明和隔离依赖项
  3. 配置:将配置存储在环境变量中
  4. 后端服务:将后端服务视为附加资源
  5. 构建、发布、运行:严格区分构建和运行阶段
  6. 进程:将应用程序作为无状态进程执行
  7. 端口绑定:通过端口绑定导出服务
  8. 并发:通过进程模型进行横向扩展
  9. 易处置性:通过快速启动和优雅关机来最大化健壮性
  10. 开发/生产一致性:保持开发、阶段和生产环境尽可能相似
  11. 日志:将日志视为事件流
  12. 管理进程:将管理任务作为一次性进程运行

来源:README.md327 README.md346

实现考量

系统设计权衡

构建分布式系统涉及关键的权衡。

权衡注意事项
一致性与可用性强一致性在分区期间会限制可用性。
性能与可扩展性为其中一个进行优化可能会影响另一个
延迟与吞吐量降低延迟可能会降低整体吞吐量
单体应用与微服务更简单的开发与复杂的操作
同步与异步即时反馈与系统响应能力

来源: README.md308 README.md317 README.md342

云成本管理

来源: README.md335 README.md337

节点故障检测

在分布式系统中,检测节点故障对于维护系统完整性至关重要

方法描述注意事项
心跳节点发送周期性信号简单,但可能因网络问题导致误报
Gossip协议节点交换关于其他节点的信息可扩展,状态最终一致性
Phi Accrual概率性故障检测基于网络条件的自适应阈值
法定人数就节点状态达成多数共识强一致性,但延迟较高
租约有时限的所有权授予适用于领导者选举,需要时间同步

来源: README.md309 README.md310 README.md338

云消息队列模式

分布式组件之间的通信通常使用消息队列模式

来源: README.md132 README.md326 README.md332

结论

云和分布式系统继续快速发展,模式和技术不断涌现以应对新的挑战。本文档中概述的概念、架构和模式为理解和实施云环境中的健壮分布式系统奠定了基础。与任何复杂系统一样,仔细考虑需求、约束和权衡对于成功至关重要。