

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 从故障模式的角度进行思考
<a name="thinking-in-terms-of-failure-modes"></a>

在设计高可用性应用程序或系统时，必须考虑哪些组件可能会出现故障，组件故障会对系统产生什么影响，以及您的应用程序 R [PO/RTO](https://aws.amazon.com/blogs/mt/establishing-rpo-and-rto-targets-for-cloud-applications/) 目标，以及可以实施哪些机制来缓解或消除组件故障的影响。应用程序是在单台服务器上、单个机架中还是单个数据中心中运行？ 当服务器、机架或数据中心出现临时或永久故障时会发生什么？ 当网络等关键子系统或应用程序本身出现故障时会发生什么？ 这些就是故障模式。

 在规划 Outpost 和应用程序部署时，应考虑本部分所述的故障模式。以下各部分将介绍如何缓解这些故障模式，从而为应用程序环境提供更高级别的可用性。

## 故障模式 1：网络
<a name="failure-mode-1-network"></a>

 Outpost 部署的管理和监控依赖于与其父级区域的弹性连接。网络中断可能是由各种故障引起的，例如操作员错误、设备故障和服务提供商的服务中断。Outpost 可能包含在站点连接在一起的一个或多个机架，如果其无法通过服务链接与区域通信，则被视为已断开连接。

 冗余网络路径可以帮助降低发生断开连接事件的风险。您应该映射应用程序依赖关系和网络流量，以了解断开连接事件对工作负载操作的影响。规划足够的网络冗余以满足应用程序可用性需求。

 在断开连接事件期间，在 Outpost 上运行的实例将继续运行，并且可通过 Outpost 本地网关（LGW）从本地网络进行访问。如果本地工作负载和服务依赖于区域的服务，则可能会受损或出现故障。当 Outpost 与区域断开连接时，变更请求（例如启动或停止前哨基地上的实例）、控制平面操作和服务遥测（例如 CloudWatch 指标）将失败。 CloudWatch 在网络断开短时间内，指标将在您的 Outpost 上进行本地后台处理，并在服务链接连接重新建立后发送到该地区进行审查。

## 故障模式 2：实例
<a name="failure-mode-2-instances"></a>

 如果运行的服务器出现问题，或者 EC2 实例出现操作系统或应用程序故障，Amazon 实例可能会受损或出现故障。应用程序处理这些类型故障的方式取决于应用程序架构。单片应用程序通常使用应用程序或系统功能进行恢复，而面向服务的模块化架构或[微服务](https://aws.amazon.com/microservices)架构通常会替换故障组件以保持服务可用性。

您可以使用 Amazon A EC2 uto Scaling 群组等自动机制将失败的实例替换为新实例。Instance auto recovery 可以重启因服务器故障而失败的实例，前提是其余服务器上有足够的可用容量并且服务链路仍处于连接状态。

## 故障模式 3：计算
<a name="failure-mode-3-compute-and-storage-servers"></a>

 服务器可能会出现故障或受损，并且可能由于各种原因（例如组件故障和定期维护操作）而需要（临时或永久）停止运行。Outpost 机架上的服务处理服务器故障和受损问题的方式各不相同，可能取决于客户如何配置高可用性选项。

 您应该订购充足的计算容量以支持 `N+M` 可用性模型，其中 `N` 是所需的容量，`M` 是为应对服务器故障而预置的备用容量。

 作为完全托管 AWS Outposts 机架服务的一部分，将为出现故障的服务器提供硬件更换。 AWS 主动监控 Outpost 部署中所有服务器和网络设备的运行状况。如需进行物理维护， AWS 将安排时间前往您的站点以更换出现故障的组件。配置备用容量可以让您的工作负载保持弹性，抵御主机故障，同时将不健康的服务器停用并更换。

## 故障模式 4：机架或数据中心
<a name="failure-mode-4-racks-or-data-centers"></a>

 机架故障可能是由于机架完全断电或环境故障（例如冷却中断或数据中心因洪水或地震而受到物理损坏）所致。数据中心的配电架构存在缺陷或标准数据中心电源维护期间出现错误，都可能导致一个或多个机架甚至整个数据中心断电。

 通过将基础设施部署到多个数据中心楼层或者同一园区或城区内相互独立的地点，可以缓解上述情况。

 在 AWS Outposts 机架上采用这种方法需要仔细考虑应用程序的架构和分布方式，使其在多个独立的逻辑 Outposts 上运行，以保持应用程序的可用性。

## 故障模式 5： AWS 可用区或区域
<a name="failure-mode-5-aws-availability-zone-or-region"></a>

 每个 Outpost 都锚定到某个 AWS 区域内的特定可用区（AZ）。锚 AZ 或父级区域内的故障可能会导致 Outpost 失去管理和可变性，并可能中断 Outpost 与区域之间的网络通信。

 与网络故障类似，AZ 或区域故障可能会导致 Outpost 与区域断开连接。如前所述，在 Outpost 上运行的实例将继续运行，并且可以通过 Outpost 本地网关（LGW）从本地网络进行访问，如果这些实例依赖于区域内的服务，则可能会受损或失败。

 为了减轻 AWS 可用区和区域故障的影响，您可以部署多个 Outposts，每个Outpost都锚定到不同的可用区或区域。然后，可以使用目前用于在 AWS 上进行设计和部署的许多类似[机制和架构模式](https://docs.aws.amazon.com/whitepapers/latest/fault-tolerant-components/high-availability-building-blocks.html)，将工作负载设计为在分布式多 Outpost 部署模型中运行。

运行的服务的控制平面位于其 AWS Outposts 所在的区域，从而产生了对亚马逊和 EC2 亚马逊 EBS 等区域服务以及区域服务（例如亚马逊 RDS、Elastic Load Balancing 和 Amazon EKS）的依赖。在 Outposts 中，可以在[静态稳定](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)概念下部署应用程序，以帮助提高控制飞机损伤的弹性。