AWS上的多区域架构,用于SNS通知

问题描述 投票:1回答:1

我们正在为我们的应用程序尝试多区域架构。多个客户使用哪个。

我们使用aws来复制数据库(s3和dynamodb),它解决了数据可用性问题。

我们使用SNS在有任何数据更改时通知我们的客户,但我找不到任何有效的消息复制跨区域模式。

以下是我们必须记住的一些考虑/要求

  1. 即使客户只在一个地区,客户也应该能够收到所有通知。
  2. 即使一个地区出现故障,申请仍应继续有效。如果可能的话,可以在区域出现时重播消息。

以下是一些有利有弊的方法,我们会想到这些方法。

  1. EC2服务器写入两个区域 优点。 一个。要求1很容易满足。 缺点。 一个。不确定这是否可行,因为没有文件建议这样做。 湾如果一个地区出现故障,将无法重播消息。 C。写入两个区域的延迟延迟。
  2. 使用lambda函数写入两个区域。由于lambda函数可以订阅跨区域sqs和sns。我们可以在两个区域中都有一个lambda函数来监听另一个区域的sns / sqs,然后写入它自己区域的sns。 优点: 一个。要求1已解决。 湾 如果我们使用sq而不是sns来解决需求2,如果区域关闭,则消息将在队列中保留一段时间,并且只要区域出现就会重放消息。 跨区域sqs订阅是不可能的,lambda函数必须订阅sns。 缺点: 一个。跨区域权限意味着在cloudformation中进行硬编码,不确定cloudformation是否支持从其他区域导入。 湾lambda函数的成本。 (虽然它会很小)
  3. 我们写入dynamodb并使用dynamodb全局表和流来发送两个区域的通知,而不是写入sns。 优点。 一个。要求1已解决。 湾由于dynamodb复制将处理复制消息,因此解决了需求2。 缺点。 一个。昂贵的解决方案。

你能否建议我是否遗漏任何东西或其他一些我们应该考虑的模式?

看着上面可能的方法,我倾向于方法2,

amazon-web-services architecture amazon-dynamodb amazon-sns distributed-system
1个回答
1
投票

我们最终使用这种方法解决了它

  1. 应用程序将消息写入SQS。
  2. lambda函数订阅了队列。
  3. Lambda函数写入区域的sns。

通过这种方式,我们可以在发送消息之前引入延迟和一些预处理。然而,IMO最好的解决方案是使用dynamodb流来生成消息(不是新的dynamodb表,而是从我们正在编写数据的表中),因为它意味着当我们在一个特定区域发送消息时数据已经被复制了。

© www.soinside.com 2019 - 2024. All rights reserved.