我有一个相当简单的场景。我想实现功能标志服务。计划是使用 DynamoDB 使用复合键来存储功能标志。该表将按
application
名称进行分区(因为我想将每个应用程序功能标志彼此隔离),并按 feature
名称进行排序。每个功能标志都有一个 enabled
标志、一个 description
以及可选的包含附加配置信息的 options
哈希值。
现在,我希望我的各种应用程序/服务能够动态响应这些功能标志的更改。我不希望每个应用程序必须经常手动下拉更改 - 我想将更改推送到每个应用程序。对于我们的前端 React 应用程序尤其如此。
我最初的方法是在功能标志表上启用 DynamoDB 流,然后使用从表到 SNS 主题的事件桥管道。如果需要,后端服务可以将自己的 SQS 队列注册到此队列。然而,对于我的初始设置,功能标志服务本身只会使用一个 SQS 队列。
我使用 rails 来实现功能标志服务,并且我将使用 Action Cable 来支持 Web 套接字。功能标志服务将使用 SQS 队列中的事件 - 通过 Web 套接字将通知推送给任何订阅者。
我一直在本地进行测试,看起来一切都会顺利进行。我唯一关心的是如何避免个别项目的无序事件处理。 DynamoDB Streams 保证与单个项目/记录相关的事件将按顺序出现在流中。但是,事件桥管道似乎不支持将 DynamoDB 流(源)连接到 FIFO SNS 主题(目标)。这迫使我使用标准 SNS 主题和标准 SQS 队列(订阅者),这两者都不能保证消息的处理顺序......
那么,我的问题是如何调整我的配置和 AWS 服务的使用,以便保证我的功能标记服务通过 websockets 发送按顺序更新?也就是说,对于各个功能标志的更新是按顺序的。
对我来说,简单的解决方案是用 Lambda 函数替换 EBP,以便您可以将更改推送到 SNS FIFO 和 SQS FIFO。与当前架构相比,这一更改将导致您必须为 Lambda 编写少量代码。