我们正在为我们的应用程序尝试多区域架构。多个客户使用哪个。
我们使用aws来复制数据库(s3和dynamodb),它解决了数据可用性问题。
我们使用SNS在有任何数据更改时通知我们的客户,但我找不到任何有效的消息复制跨区域模式。
以下是我们必须记住的一些考虑/要求
- 即使客户只在一个地区,客户也应该能够收到所有通知。
- 即使一个地区出现故障,申请仍应继续有效。如果可能的话,可以在区域出现时重播消息。
以下是一些有利有弊的方法,我们会想到这些方法。
- EC2服务器写入两个区域
优点。
一个。要求1很容易满足。
缺点。
一个。不确定这是否可行,因为没有文件建议这样做。
湾如果一个地区出现故障,将无法重播消息。
C。写入两个区域的延迟延迟。
- 使用lambda函数写入两个区域。由于lambda函数可以订阅跨区域sqs和sns。我们可以在两个区域中都有一个lambda函数来监听另一个区域的sns / sqs,然后写入它自己区域的sns。
优点:
一个。要求1已解决。
湾
如果我们使用sq而不是sns来解决需求2,如果区域关闭,则消息将在队列中保留一段时间,并且只要区域出现就会重放消息。
跨区域sqs订阅是不可能的,lambda函数必须订阅sns。
缺点:
一个。跨区域权限意味着在cloudformation中进行硬编码,不确定cloudformation是否支持从其他区域导入。
湾lambda函数的成本。 (虽然它会很小)
- 我们写入dynamodb并使用dynamodb全局表和流来发送两个区域的通知,而不是写入sns。
优点。
一个。要求1已解决。
湾由于dynamodb复制将处理复制消息,因此解决了需求2。
缺点。
一个。昂贵的解决方案。
你能否建议我是否遗漏任何东西或其他一些我们应该考虑的模式?
看着上面可能的方法,我倾向于方法2,