【问题标题】:How to setup AWS SNS and SQS for high availability?如何设置 AWS SNS 和 SQS 以实现高可用性?
【发布时间】:2017-01-16 15:23:49
【问题描述】:

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 次,但是这种方法看起来很 hacky(因为它总是会尝试首先尝试关闭的区域并且需要不断切换到新客户)。

SQS 的问题

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

【问题讨论】:

    标签: amazon-web-services boto3


    【解决方案1】:

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

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

    一种方法:

    • 写入器 - 写入一个区域,如果失败,写入另一个区域。
    • Readers - 从多个区域的多个队列中读取。

    另一种方法:

    • Writers - 写入多个主题/队列,确保消息到达某处。
    • 读者 - 从多个队列中读取,平等对待,您需要管理消息重复。

    【讨论】:

      猜你喜欢
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      • 2021-11-25
      • 2015-06-01
      • 1970-01-01
      • 2017-09-06
      • 2021-07-20
      相关资源
      最近更新 更多