Получение уведомлений PostgreSQL в очередь AWS SQS - PullRequest
0 голосов
/ 14 октября 2018

Приложение, над которым я работаю, использует AFTER CREATE/UPDATE/DELETE триггеры для создания pg_notify уведомлений, когда в системе происходят определенные действия.В настоящее время у нас есть небольшое приложение Node.JS, которое LISTEN s для событий, а затем немедленно поворачивается и публикует их в теме AWS SNS, которая перенаправляется в нашу очередь событий SQS.Из этой очереди мы инициируем все виды событий в зависимости от события (электронная почта, SMS, лямбда-сообщения, длительные задания и т. Д.).

Эта архитектура работает хорошо, но приложение Node.JS, которое находится междуЭкземпляр PostgreSQL и тема SNS кажутся немного хрупкими.Я не могу запустить две копии в двух зонах доступности, потому что сообщения будут дублироваться.

Я ищу лучший способ получения этих уведомлений Postgres в SQS.Есть ли варианты для этого?Если у Postgres Aurora что-то есть, мы можем рассмотреть это.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Используйте вашу текущую стратегию небольшого приложения, которое LISTEN s для событий.Просто введите шаг дедупликации между этим приложением и подписчиками вашего мероприятия.Это позволит вам запустить несколько экземпляров вашего приложения.

Например, вы можете использовать очередь FIFO SQS.Они автоматически удаляют дубликаты сообщений.Поскольку очереди FIFO не могут подписаться на SNS, вам нужно помещать сообщения непосредственно в очередь, а не через SNS.

В качестве альтернативы, вы можете использовать DynamoDB для хранения контрольных сумм ваших недавних сообщений, и если ваше приложение обнаружит дубликатудалите его вручную (убедитесь, что используете условные записи, чтобы предотвратить состояние гонки).

0 голосов
/ 17 октября 2018

Некоторые параметры, которые я нашел:

Продолжить с текущим методом

Я мог бы сохранить текущее небольшое приложение, которое перенаправляет события из моей PostgreSQL RDS и выводит ихв SNS-> SQS.Я могу развернуть его в группе 1 масштабирование / максимум 1 / мин 1 с автоматическим масштабированием, чтобы убедиться, что одновременно выполняется не более одной копии.

Откажитесь от моей RDS и используйте базу данных, размещенную на собственной машине

Я мог бы отказаться от RDS и запустить PostgreSQL на экземпляре EC2, а затем использовать PL / Python вместе с AWS-SDK для выполнения вызовов SNS вместо использования pg_notify.Мне не нравится эта идея, потому что я теряю удобство использования, которое поставляется с RDS.

Пока что я буду придерживаться текущего метода, если у кого-то нет других идей, которые я мог бы изучить.Я уверен, что в будущем будет больше вариантов (например, когда Aurora PostgreSQL добавляет поддержку для вызова Lambdas, как в Aurora MySQL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...