亚马逊 SQS - 灾难恢复

3
我们正在评估Amazon SQS用于我们的一个应用程序。我们将在SQS中持久化一些消息,每天最多持续10个小时(我们的“消费者”之一只能在早上7点到晚上9点之间处理)。
似乎持久化的消息会分布在同一地理区域内的多个可用区。是否有办法在SQS中实现跨区域复制?我阅读了Amazon关于DR的白皮书,但没有提到SQS。

嗨Sayak,你有什么想法是如何解决的吗? - user1530779
3个回答

3
您可以在每次向所在地区的 SQS 写入时,同时将信息写到另一个地区的 SQS 中。以下是我的建议:
  1. 您需要以编程方式完成这项操作,并根据您的要求可能需要执行两阶段提交。
  2. 或者您可以使用 SNS 发布消息,但配置 SNS 订阅以将消息写入跨地区的 SQS 队列。
请注意,AWS 可用性区域已经实际上是地理分布的,相距约 50 英里,我相信。
如果这是我的项目,我会选择选项 2。请参阅 AWS 文档:http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html 基本上,您所做的是,而不是直接发布到 SQS,您在每个地区创建一个 SNS 主题,每个主题都有两个地区的 SQS 订阅。
当在任一地区发布消息到 SNS 时,SNS 将自动发布到两个 SQS 订阅。

谢谢您的回答。我们也考虑过SNS方法,但是我们必须手动从两个SQS实例中删除消息这一事实使其成为一个不可接受的问题。另外,我在一家金融机构工作,要求备份数据中心之间至少相隔250英里。 - Sayak Banerjee
所以,也许SQS不是你想要的。你考虑过ActiveMQ主从配置吗? - Oleg Dulin
我们正在研究Kafka。由于成本优势,曾考虑使用SQS。 - Sayak Banerjee
这种方法会使事情变得不必要地复杂,因为你必须与两个地区的信息消费保持同步。所以你的消费者应该同时阅读来自两个地区的信息,然后将其视为一个事务块来处理相同目的的两条信息。对我来说听起来不太好。 - Dhrubo
除了其他人已经考虑过的问题,选项2只是将问题转移到SNS。如果一个区域失败,该区域的SNS也会失败。 - drAlberT

2
每个SQS队列目前仅限于单个区域。不过,每个SQS队列会在多个可用区域中进行复制。

谢谢你的回答。我已经了解到这一点。我希望能够在AWS区域之间建立某种主从设置的可能性。但是根据我目前所了解的,似乎没有办法在不手动执行DeleteMessageRequest的情况下实现这一点。 - Sayak Banerjee

0

SQS在多个可用区(AZ)之间进行冗余复制。

我能找到的唯一证据是:https://aws.amazon.com/sqs/faqs/#Security_and_reliability

冗余的可用区(AZs),这样就不会因为单个计算机、网络或可用区故障而导致消息无法访问

关键部分是“冗余的可用区”。我觉得“使消息”这个词有歧义(它们是指任何还是所有消息?),但句子的其他部分解决了这个问题。

关于跨区域桥接,SQS不允许这样做:

问:我可以在不同地区的队列之间共享消息吗?

答:不可以。每个Amazon SQS消息队列在每个地区内都是独立的。

https://aws.amazon.com/sqs/faqs/#Service_access_and_regions

然而,Amazon MQ允许跨区域消息传播。

https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/network-of-brokers.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接