amazon-web-services - SQS 队列的弹性
问题描述
我们正在尝试为 SQS 队列开发 Live - DR 模型。
我们在 AWS 中有两个不同的帐户:
- eu-west(帐号 1234)
- 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 触发器来实现。
只是在寻找更好的方法。
解决方案
我在这里找到了解决方案。
我们需要检查 Route53 以找到应用程序的当前活动区域。在 DR 区域,当我们在 SQS 上收到消息时,它将触发 lambda。lambda 根据 route53 或 ALB dns 检查活动区域。如果它发现该区域不是 active/live ,它将跳过对消息的处理,因此 SQS 队列将在 DR 上清除。
因此,活动区域 Lambda 将主动处理 SQS 消息,而 DR 将跳过所有处理。
这个想法应该适用于我上面提到的场景。
推荐阅读
- android - 片段可见之前的android-load地图
- python - 如何在 Django 中增加 IntegerField?
- java - 在 Talend 路由中使用特定版本的 bean
- docker - 如何从奇异图像构建 docker 图像
- shell - 在文件中的特定关键字之后插入一个空行
- javascript - Facebook iframe 页面插件不适用于“。” (点)
- sql - 考虑到查询等所有匹配项来存储数组的最佳方法?
- python - 使用 h5py 在 HDF5 文件中自定义列名
- javascript - 如何从所有 php 文本 id 中获取元素?
- mapbox - Mapbox GL JS querySourceFeatures到矢量瓦片层