适用于无服务器堆栈的 AWS 多区域高可用性架构

问题描述 投票:0回答:3

我正在为我的产品提出多区域高可用性(主动-主动)架构。我们的堆栈的简化版本是我们使用 Lambda 来实现我们的微服务,这些服务使用 API Gateway 作为 API 公开。这些微服务与下游服务或数据库(例如 DynamoDB、Aurora RDS)集成。所以,'

Route 53 >> Api 网关 >> Lambda >> 下游服务/数据库

'

我正在尝试找出配置 Route 53 的最佳机制,以便它了解堆栈中的任何服务发生故障,从而将传入请求路由到另一个区域。例如,如果区域 1 中的 Lambda 服务失败,那么这很容易,因为我会创建指向这些 Lambda 的运行状况检查记录,一旦它们无法访问,Route 53 本身将路由到区域 2 的下一个请求。 但是,如果 Lambda 所依赖的下游资源(例如 RDS)发生故障,Route 53 如何知道这一点,以便将下一个请求路由到 Region-2?

感谢对此的任何指示。

amazon-web-services architecture amazon-route53 high-availability
3个回答
0
投票

这在一定程度上取决于您设想的故障转移设置。 假设您有两个区域:region1、region2

现在您可能会遇到两种失败情况:

  1. Lambda 在区域 1 中失败 => 您故障转移到区域 2 中的 Lambda
  2. RDS 在区域 1 中失败 => 您故障转移到区域 2 中的 RDS

在这两种情况下,你都需要问自己:我想做什么。例如,如果在情况 1 中,您从区域 2 中的 Lambda 连接到区域 1 中的 RDS,则可能会发生较高的区域传输成本,因此您可能希望在任何情况下都触发 RDS 到区域 2 的故障转移。

注意:一般情况下,建议不要直接使用 Lambda 连接到 RDS,而是使用 RDS 代理(以避免用请求破坏数据库、减慢数据库速度等):https://docs.aws.amazon.com /AmazonRDS/latest/UserGuide/rds-proxy.html

一般来说,对于 RDS,这些区域故障转移要复杂得多(如果需要,可以回答这一点)。也不是简单的把IP换到另外一个地域,因为通常需要把另外一个地域的数据库(集群)提升为指定节点来允许写操作。

对于您提到的数据库(DynamoDB、Aurora),有一个解决方案:使用全局表。

更简单的解决方案可能是 - 根据您的应用程序 - 使用 DynamoDB 全局表(请参阅 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html)。然而,显然 DynamoDB 不是关系数据库,因此它可能不适合所有情况。尽管如此,DynamoDB 通常与 Lambda 配合得很好,而且更容易进行跨区域复制。注意:如果您使用 AWS KMS CMK(推荐)加密数据,则您需要在计划使用全局表的所有区域中也提供此密钥(请参阅 https://docs.aws.amazon.com/kms/最新/developerguide/multi-region-keys-overview.html)。

另一个解决方案可能是 AWS RDS Aurora Global Tables (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html) - 这些解决方案可在多个区域使用,因此可以进行故障转移更容易(参见 https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-disaster-recovery.html)。

在 Aurora 情况下,您必须自己检测区域故障(例如,您可以在两个区域中都有一个 lambda,定期尝试连接到当前活动集群进行写入),并自动将新区域中的集群提升为主集群(如果它是)原地区不可用。

不要忘记:您需要定期测试故障转移,否则几乎可以确保它在您需要时无法工作。

通常,与单个区域相比,跨区域的数据库意味着传输成本和额外的资源成本 - 不仅在故障转移期间,而且在数据写入的所有时间都如此。


0
投票

使用此配置,我建议对整个堆栈进行故障转移(到另一个区域),而不是对架构的各个层(组件)进行故障转移。 (这就是您在问题中所说的内容,但只是确保我们在同一页面上)。

您的问题归结为如何配置运行状况检查,特别是如何实施浅层与深层(检查 RDS 等依赖项)运行状况检查。

有一个 AWS Well-Architected 实验室涵盖了这些概念实施运行状况检查和管理依赖关系以提高可靠性


0
投票

AWS 现在还引入了基于单元的架构的概念:https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/reducing-scope -of-impact-with-cell-based-architecture.html

虽然它不是特定于区域的故障转移,但它提供了一些很好的指南,帮助您降低故障转移的复杂性。

© www.soinside.com 2019 - 2024. All rights reserved.