此内容已过时。此版本的架构完善的框架现在可在以下位置找到: https://docs.aws.amazon.com/zh_cn/wellarchitected/2022-03-31/framework/reliability.html

REL 10: 如何使用故障隔离来保护您的工作负载?

故障隔离边界可将一个工作负载内的故障影响限制于有限数量的组件。边界以外的组件不会受到故障的影响。使用多个故障隔离边界,您可以限制作用于您的工作负载的影响。

资源

AWS re:Invent 2018: Architecture Patterns for Multi-Region Active-Active Applications (ARC209-R2)
Shuffle-sharding: AWS re:Invent 2019: Introducing The Amazon Builders’ Library (DOP328)
AWS re:Invent 2018: How AWS Minimizes the Blast Radius of Failures (ARC338)
AWS re:Invent 2019: Innovation and operation of the AWS global network infrastructure (NET339)
What is AWS Outposts?
Global Tables: Multi-Region Replication with DynamoDB
AWS Local Zones FAQ
AWS Global Infrastructure
The Amazon Builders' Library: Workload isolation using shuffle-sharding

最佳实践:

改进计划

将工作负载部署到多个位置

  • 使用多个可用区和 AWS 区域: 将工作负载数据和资源分发到多个可用区,或在必要时分发到多个 AWS 区域。可通过选择不同位置满足各种需求。
  • 如果您的工作负载必须部署到多个区域,请选择一个多区域策略: 在使用多可用区策略的单个 AWS 区域中,可满足大多数可靠性需求。可在必要时使用多区域策略来满足您的业务需求。
    AWS re:Invent 2018: Architecture Patterns for Multi-Region Active-Active Applications (ARC209-R2)
  • 评估 AWS Outposts 是否适用于您的工作负载: 如果您的工作负载需要到本地数据中心的较低延迟,或具有本地数据处理要求,则可以使用 AWS Outposts 在本地运行 AWS 基础设施和服务
    What is AWS Outposts?
  • 确定 AWS 本地区域是否可以帮助您为用户提供服务: 如果您有低延迟要求,请查看 AWS 本地区域是否距离您的用户较近。如果是,则使用 AWS 本地区域将工作负载部署到离这些用户较近的位置
    AWS Local Zones FAQ
  • 组件的自动恢复受限于单个位置

  • 实施自我修复: 尽可能使用自动扩展部署实例或容器。如果不能使用自动扩展,则使用 EC2 实例的自动恢复功能,或者基于 Amazon EC2 或 ECS 容器生命周期事件实现自我修复自动化。
  • 将 EC2 实例的自动恢复功能用于需要单个实例 ID 地址、私有 IP 地址、弹性 IP 地址和实例元数据的工作负载。
    Recover your instance.
  • 使用 EC2 实例生命周期事件或 ECS 事件实现自我修复自动化,在这种情况下,无法使用自动扩展或 EC2 恢复。
    EC2 Auto Scaling lifecycle hooks
    Amazon ECS events
  • 采用隔板架构

  • 采用隔板架构: 类似于船上的隔板,此模式确保将故障限制在较小的请求/用户子集,受损的请求数量有限,因此大部分可以继续执行而不会受错误影响。数据的隔板经常被称作分区或分片,而服务的隔板称为单元格。
    Shuffle-sharding: AWS re:Invent 2019: Introducing The Amazon Builders’ Library (DOP328)
    AWS re:Invent 2018: How AWS Minimizes the Blast Radius of Failures (ARC338)
  • 评估工作负载的基于单元格的架构: 在基于单元格的架构中,每个单元格都是完整、独立的服务实例,而且都有固定的最大大小。当负载增加时,工作负载会通过添加更多单元格而变大。分区键用于传入流量,以确定哪个单元格将处理请求。任何故障都会被限制在它所发生的单个单元格内,因此受损请求的数量有限,而其他单元格将继续执行而不受错误影响。确定适当的分区键,最大限度地减少跨单元格交互,以便使每个请求无需使用复杂的映射服务,这一点非常重要。需要复杂映射的服务最终只是把问题转移到映射服务上,而需要跨单元格交互的服务会降低单元格的独立性(因此这样做会提高假定的可用性)。