如何设置AWS SNS和SQS以实现高可用性?

时间:2016-09-08 15:45:57

标签: amazon-web-services boto3

SNS问题

我目前正在为SNS使用python boto3库(例如,创建主题,订阅主题,向主题发送SNS)。当我使用ResourceClient时,我必须指定一个区域(例如' us-west-2',' us-east-1' )。我没有看到任何处理区域故障转移的内置选项。我的问题是,您如何为高可用性/区域故障转移设置AWS SNS和SQS?

import boto3

client = boto3.client('sns', region_name='us-west-2')
response = client.create_topic(Name='my_new_topic')
client.subscribe(TopicArn='arn:aws:sns:us-west-2:123456789:some-topic', Protocol='HTTP', Endpoint='Some-HTTP-Endpoint')

关于SNS解决方案的思考

我在考虑检查客户的响应。例如,以下是成功client.create_topic()的响应。

{'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'adbb58ef-9047-5d44-834d-04a41599eb2b'}, u'TopicArn': 'arn:aws:sns:us-west-2:123456789:some-topic'}    

如果请求没有成功,我可以在尝试新的region_name之前重试X次,但这种方法看起来真的很糟糕(因为它总是会尝试尝试这个区域)先下来,需要不断切换到新客户。)

SQS

的问题

如果以上是成功的(我们可以跨地区处理SNS),现在我需要读取多个SQS队列(再次看看通过不同区域的客户端循环的hacky解决方案)

1 个答案:

答案 0 :(得分:5)

Amazon SNS和SQS是区域性服务。它们没有内置的多区域可用性方法。如果某个区域出现故障而您无法访问您的主题或队列,则无法使用其他区域访问这些相同的主题/队列。

还没有任何标准方式以多区域方式处理它们。这实际上取决于您的应用程序的运作。

一种方法:

  • 作家 - 写入一个地区,如果失败,写信给另一个地区。
  • 读者 - 从多个地区的多个队列中读取。

另一种方法:

  • 作家 - 写入多个主题/队列,确保消息到达某个地方。
  • 读者 - 从多个队列中读取,同等对待,您需要管理邮件复制。