将PostgreSQL通知发送到AWS SQS队列

5
我正在处理的应用程序使用AFTER CREATE/UPDATE/DELETE触发器在系统内发生某些操作时创建pg_notify通知。目前,我们有一个小型Node.JS应用程序,用于LISTEN事件,然后立即将它们发布到AWS SNS主题,该主题会转发到我们的SQS事件队列。从那个队列中,我们基于事件触发各种操作(邮件、短信、Lambda、长时间运行的作业等)。
这种架构很好用,但是坐落在PostgreSQL实例和SNS主题之间的Node.JS应用程序似乎有点脆弱。我无法在两个可用区域内运行两个副本,因为消息将被复制。
我正在寻找更好的方法将这些Postgres通知传递到SQS。是否有任何选项可供选择?如果Postgres Aurora有什么东西,我们可能会考虑。
2个回答

4
使用您当前的小应用程序策略,该应用程序会“监听”事件。只需在该应用程序和事件订阅者之间引入去重步骤即可。这将允许您运行多个应用程序实例。
例如,您可以使用FIFO SQS队列。这些自动删除重复消息。由于FIFO队列无法订阅SNS,因此您需要直接将消息放入队列中,而不是通过SNS。
或者,您可以使用DynamoDB存储最近消息的校验和,如果您的应用程序遇到重复消息,则手动丢弃它(请确保使用条件写入以防止竞争条件)。

这是一个有趣的想法 - 我之前没有考虑过直接写入SQS队列以便使用FIFO队列。谢谢! - sflogen

0

我找到了一些选项:

继续使用当前方法

我可以保留当前的小应用程序,将事件从我的PostgreSQL RDS重新定向并将其转储到SNS-> SQS中。 我可以将其部署在一个区域/最多1个/最少1个自动扩展组中,以确保同时不超过1个副本运行。

放弃我的RDS并使用自托管式数据库

我可以放弃RDS并在EC2实例上运行PostgreSQL,然后使用PL / Python以及AWS-SDK来调用SNS而不是使用pg_notify。 我不喜欢这个想法,因为我失去了使用RDS所带来的易用性。

目前,除非有人有其他的想法,否则我将坚持使用当前的方法。 我相信将来会有更多选项(例如当Aurora PostgreSQL添加对调用Lambda的支持时,就像Aurora MySQL一样)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接