【问题标题】:Resilience with SQS queueSQS 队列的弹性
【发布时间】:2020-05-27 18:44:27
【问题描述】:

我们正在尝试为 SQS 队列开发 Live - DR 模型。

我们在 AWS 中有两个不同的账户:

  1. eu-west(帐号 1234)
  2. us-east(帐号 4567)

我们的应用程序驻留在两个帐户中(主动 - 被动)。

  • 在正常情况下,EU-WEST 处于活动状态,US-EAST 处于非活动状态。
  • 当我们对 DR 进行故障转移时,US-EAST 将处于活动状态,而 EU-WEST 将处于非活动状态。
  • 我们希望在每个账户(eu-west、us-east)中有两个 SQS 队列。
  • 当 EU-WEST 处于活动状态时,我们只希望 EU-WEST 工作和处理事件中的 SQS 队列。
  • 当我们切换到 DR 时,我们希望使 EU-WEST SQS 处于非活动状态,并使 US-EAST 中的 SQS 处于活动状态。

每个 SQS 上都有一个 Lambda 触发器。

我们在这里可能面临的问题是:两个 SQS 队列都将处理事件,因为它订阅了同一个 SNS 主题。而且由于它连接到一个 Lambda 函数,因此两者都会处理事件。

我不希望这种情况发生。我希望一次只使用一对 SQS 和 Lambda 函数 - EU-WEST 或 US-EAST。我知道这可以通过移除非活动区域上的 Lambda 触发器来实现。

只是在寻找更好的方法。

【问题讨论】:

  • 旁注:Amazon SQS 和 AWS Lambda 是跨多个可用区运行的区域服务。对于高可用性,通常建议跨多个 AZ 运行或使用区域服务。因此,您的解决方案已经高度可用,但当然也欢迎您采用多区域方法。
  • “两个 SQS 队列都将处理事件,因为它连接到同一个源。” SQS 队列不连接到“源”,生产者连接到队列...所以这是什么意思?
  • 很抱歉造成混淆。两个 SQS 订阅同一个 SNS。

标签: amazon-web-services aws-lambda amazon-sqs


【解决方案1】:

我在这里找到了解决方案。

我们需要检查 Route53 以找到应用程序的当前活动区域。 在 DR 区域,当我们在 SQS 上收到消息时,它将触发 lambda。 lambda 根据 route53 或 ALB dns 检查活动区域。如果它发现该区域不是 active/live ,它将跳过对消息的处理,因此 SQS 队列将在 DR 上清除。

因此活动区域 Lambda 将主动处理 SQS 消息,而 DR 将跳过所有处理。

这个想法应该适用于我上面提到的场景。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 2021-02-24
    • 1970-01-01
    • 2017-04-12
    • 2016-01-18
    • 2019-04-11
    • 1970-01-01
    • 2016-08-18
    相关资源
    最近更新 更多