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

Wil*_*ill 6 amazon-web-services boto3

SNS问题

我目前正在为SNS 使用python boto3库(例如,创建主题,订阅主题,向主题发送SNS).当我使用资源客户端时,我必须指定一个区域(例如'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')
Run Code Online (Sandbox Code Playgroud)

对SNS解决方案的思考

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

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

如果请求没有成功,我可以在尝试新的之前重试X次region_name,但这种方法看起来真的很麻烦(因为它总是会尝试尝试首先关闭的区域并且需要继续切换到新客户端).

SQS问题

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

Mat*_*ser 5

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

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

一种方法:

  • 写作者 - 写入一个区域,如果失败,写入另一个区域.
  • 读者 - 从多个区域的多个队列中读取.

另一种方法:

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