簡體   English   中英

將 PostgreSQL 通知放入 AWS SQS 隊列

[英]Getting PostgreSQL notifications into an AWS SQS Queue

我正在處理的應用程序使用AFTER CREATE/UPDATE/DELETE觸發器在系統內發生某些操作時創建pg_notify通知。 目前,我們有一個小的Node.js應用LISTEN S為事件,然后馬上轉身,並將它們發布到AWS SNS的主題,被轉發到我們的SQS事件隊列。 從該隊列中,我們根據事件(電子郵件、短信、lambda、長時間運行的作業等)觸發各種事情。

這種架構運行良好,但位於 PostgreSQL 實例和 SNS 主題之間的 Node.JS 應用程序似乎有點脆弱。 我真的不能在兩個可用區中運行兩個副本,因為消息會被復制。

我正在尋找一種更好的方法將這些 Postgres 通知放入 SQS。 有什么選擇嗎? 如果 Postgres Aurora 有什么東西,我們可能會考慮。

使用LISTEN事件的小型應用程序的當前策略。 只需在該應用程序和您的事件訂閱者之間引入重復數據刪除步驟即可。 這將允許您運行應用程序的多個實例。

例如,您可以使用FIFO SQS 隊列。 這些會自動刪除重復的消息。 由於 FIFO 隊列無法訂閱 SNS,因此您需要將消息直接放入隊列而不是通過 SNS。

或者,您可以使用 DynamoDB 來存儲最近消息的校驗和,如果您的應用遇到重復消息,請手動刪除它(確保使用條件寫入以防止競爭條件)。

我發現的一些選項:

繼續當前方法

我可以保留當前從我的 PostgreSQL RDS 重定向事件並將它們轉儲到 SNS->SQS 的小應用程序。 我可以將它部署在 1 個區域/最多 1 個/分鍾 1 個自動縮放組中,以確保一次只運行一個副本。

拋棄我的 RDS 並使用自托管數據庫

我可以放棄 RDS 並在 EC2 實例上運行 PostgreSQL,然后使用 PL/Python 和 AWS-SDK 來調用 SNS 而不是使用pg_notify 我不喜歡這個想法,因為我失去了 RDS 帶來的易用性。

現在,我將堅持使用當前的方法,除非有人有其他一些我可以探索的想法。 我相信未來會有更多選擇(比如當 Aurora PostgreSQL 添加對調用 Lambdas 的支持時,就像 Aurora MySQL 那樣)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM