如何设置 AWS SNS 和 SQS 以实现高可用性?
How to setup AWS SNS and SQS for high availability?
SNS 问题
我目前正在使用 python boto3 library for SNS (e.g. to create topics, subscribe to topics, send SNS to topics). When I use either a Resource or a Client,我必须指定一个区域(例如 'us-west-2'、'us-east-1')。我没有看到任何用于处理区域故障转移的内置选项。我的问题是,如何为高 availability/region 故障转移设置 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
之前重试 say X 次,但是这个方法看起来真的很 hacky(因为它总是会尝试首先尝试关闭并需要的区域继续切换到新客户)。
SQS 问题
如果上述成功(我们可以跨区域处理 SNS),现在我有多个 SQS 队列需要从中读取(再次使用似乎是循环遍历不同客户端的 hacky 解决方案地区)。
Amazon SNS 和 SQS 是区域性服务。它们没有内置的多区域可用性方法。如果某个区域出现故障并且您无法访问您的主题或队列,则您无法使用其他区域访问相同的内容 topics/queues。
也没有任何标准方法来以多区域方式处理它们。这实际上取决于您的应用程序的工作方式。
一种方法:
- Writers - 写入一个区域,如果失败,写入另一个区域。
- 读者 - 从多个区域的多个队列中读取。
另一种方法:
- Writers - 写入多个 topics/queues,确保消息到达某个地方。
- 读者 - 从多个队列中读取,平等对待,您将需要管理消息重复。
SNS 问题
我目前正在使用 python boto3 library for SNS (e.g. to create topics, subscribe to topics, send SNS to topics). When I use either a Resource or a Client,我必须指定一个区域(例如 'us-west-2'、'us-east-1')。我没有看到任何用于处理区域故障转移的内置选项。我的问题是,如何为高 availability/region 故障转移设置 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
之前重试 say X 次,但是这个方法看起来真的很 hacky(因为它总是会尝试首先尝试关闭并需要的区域继续切换到新客户)。
SQS 问题
如果上述成功(我们可以跨区域处理 SNS),现在我有多个 SQS 队列需要从中读取(再次使用似乎是循环遍历不同客户端的 hacky 解决方案地区)。
Amazon SNS 和 SQS 是区域性服务。它们没有内置的多区域可用性方法。如果某个区域出现故障并且您无法访问您的主题或队列,则您无法使用其他区域访问相同的内容 topics/queues。
也没有任何标准方法来以多区域方式处理它们。这实际上取决于您的应用程序的工作方式。
一种方法:
- Writers - 写入一个区域,如果失败,写入另一个区域。
- 读者 - 从多个区域的多个队列中读取。
另一种方法:
- Writers - 写入多个 topics/queues,确保消息到达某个地方。
- 读者 - 从多个队列中读取,平等对待,您将需要管理消息重复。