REL10-BP02 为您的多位置部署选择合适的位置 - AWS Well-Architected Framework

REL10-BP02 为您的多位置部署选择合适的位置

期望结果

要实现高可用性,请始终(在可能时)将您的工作负载组件部署到多个可用区(AZ,Availability Zone),如图 10 中所示。对于具有极高弹性要求的工作负载,请谨慎评估用于多区域架构的选项。

图中显示一个弹性多 AZ 数据库部署,该部署备份到另一个 AWS 区域

图 10:一个弹性多 AZ 数据库部署,该部署备份到另一个 AWS 区域

常见反模式

  • 在多 AZ 架构可以满足需求时选择设计多区域架构。

  • 当应用程序部件之间的弹性和多位置需求不同时,没有考虑它们之间的依赖关系。

建立此最佳实践的好处

要实现弹性,您应使用构建防御层的方法。其中一层使用多 AZ,通过构建高度可用的架构,防护较小规模的、更常见的中断。另一个防御层用于防御很少发生的事件,例如大范围的自然灾害和区域级别的中断。这个第二层涉及到设计应用程序的架构来跨越多个 AWS 区域。

  • 99.5% 的可用性与 99.99% 的可用性相比,每个月的正常运行时间之差超过 3.5 小时。采用多 AZ 的工作负载的可用性,预期只能达到“四个九”。

  • 通过在多个 AZ 中运行工作负载,您可以隔离电力、冷却和网络中的故障,以及火灾和洪水之类的大多数自然灾害。

  • 为工作负载实施多区域策略,有助于防御影响到某个国家/地区中较大地理面积的大范围自然灾害,或者区域范围的技术故障。请注意,实施多区域架构会有很高的复杂性,对于大部分工作负载通常来说都是不必要的。

未建立这种最佳实践的情况下暴露的风险等级:

实施指导

对于一个可用区的中断或部分丢失而导致的灾难事件,在单个 AWS 区域内的多个可用区中实施高可用工作负载,有助于防范自然灾难和技术灾难。每个 AWS 区域由多个可用区组成,各个可用区之间实现了故障隔离并且间隔相当的物理距离。不过,对于可能造成间隔相当距离的多个可用区组件丢失风险的灾难事件,您应该实施灾难恢复选项,以防范整个区域的自然灾难和技术故障。对于需要极高弹性的工作负载(关键基础设施、与生命健康相关的应用程序、财务系统基础设施等),需要使用多区域策略。

实施步骤

  1. 评估您的工作负载并确定需要使用多 AZ 方法(单个 AWS 区域)还是多区域方法才能够满足弹性需求。实施多区域架构来满足这些需求会引入额外的复杂性,因此请谨慎考虑您的使用场景及其需求。弹性需求几乎总是可以使用单个 AWS 区域来满足。在确定您是否需要使用多区域时,请考虑以下可能的需求:

    1. 灾难恢复(DR,Disaster Recovery):对于一个可用区的中断或部分丢失而导致的灾难事件,在单个 AWS 区域内的多个可用区中实施高可用工作负载,有助于防范自然灾难和技术灾难。对于可能造成间隔相当距离的多个可用区组件丢失风险的灾难事件,您应该实施跨多个区域的灾难恢复,以防范整个区域的自然灾难和技术故障。

    2. 高可用性(HA,High Availability):多区域架构(在每个区域中使用多个 AZ)可用于实现四个 9 以上(> 99.99%)的可用性。

    3. 堆栈本地化:面向全球受众部署工作负载时,您可以将本地化的堆栈部署在不同的 AWS 区域中,以便服务于这些区域中的受众。本地化可以包括语言、货币和所存储数据的类型。

    4. 靠近用户: 面向全球受众部署工作负载时,您可以通过在靠近最终用户所在位置的 AWS 区域中部署堆栈,从而减少延迟。

    5. 数据驻留:一些工作负载面临着数据驻留要求,来自特定用户的数据必须保留在特定国家/地区的边界内。根据相关的法规,您可以选择将整个堆栈或者仅仅将数据部署到这些边界内的 AWS 区域中。

  2. 以下是 AWS 服务提供的一些多 AZ 功能的示例:

    1. 为了使用 EC2 或 ECS 保护工作负载,请在计算资源前端部署 Elastic Load Balancer。然后,Elastic Load Balancing 提供解决方案来检测未正常运行的区中的实例,并将流量路由到正常运行的区中。

    2. 当 EC2 实例运行不支持负载均衡的现成商用软件时,您可以通过实施多 AZ 灾难恢复方法来实现某种形式的容错能力。

    3. 对于 Amazon ECS 任务,将您的服务均匀地部署在三个 AZ 上以实现可用性与成本的平衡。

    4. 对于非 Aurora Amazon RDS,您可以选择多 AZ 作为配置选项。在主数据库实例出现故障时,Amazon RDS 会自动提升备用数据库,用于接收其他可用区中的流量。还可以创建多区域只读副本来改进弹性。

  3. 以下是 AWS 服务提供的一些多区域功能的示例:

    1. 对于 Amazon S3 工作负载,当服务自动提供了多 AZ 可用性时,如果需要多区域部署,请考虑多区域接入点。

    2. 对于 DynamoDB 表,此时服务自动提供了多 AZ 可用性,您可以轻松地将现有表转换为全局表来利用多区域的优势。

    3. 如果您的工作负载采用 Application Load Balancers 或网络负载均衡器作为前端,请将流量引导到包含正常运行端点的多个区域,从而使用 AWS Global Accelerator 来改进应用程序的可用性。

    4. 对于利用 AWS EventBridge 的应用程序而言,请考虑使用跨区域总线来将事件转发到您选择的其他区域。

    5. 对于 Amazon Aurora 数据库,请考虑使用跨多个 AWS 区域的 Aurora 全局数据库。可以对现有集群进行修改来添加新的区域。

    6. 如果您的工作负载包括 AWS Key Management Service(AWS KMS)加密密钥,请考虑多区域密钥是否适合您的应用程序。

    7. 对于其他 AWS 服务功能,请参阅此博客系列中的以下内容: 使用 AWS 服务创建多区域应用程序系列

实施计划的工作量级别: 中到高

资源

相关文档:

相关视频: