Встроенный брокер (очередь) сообщений в Postgres PRO: обзор, функционал, важные особенности

Встроенный брокер сообщений в Postgres Pro (pgpro_queue) — это механизм организации очередей сообщений непосредственно внутри СУБД, без использования внешних систем. Он предназначен для надежной асинхронной обработки задач с гарантией сохранности и согласованности данных.

На данный момент нет шардирования. По данным вендора, нет факт, что функция появится скоро

Нужна подписка на коммерческий дистрибутив Postgres Pro Enterprise

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

Проблематика внешних брокеров

Использование внешних решений, таких как Kafka или RabbitMQ, требует дополнительной инфраструктуры: отдельных серверов, настройки кластеров и мониторинга. Это увеличивает административную нагрузку и количество точек отказа.

Ключевая проблема — отсутствие транзакционной целостности между брокером и базой данных. При сбое возможна ситуация, когда сообщение отправлено, но данные не зафиксированы, что приводит к рассогласованию.

Подход pgpro_queue

pgpro_queue реализует очередь сообщений как часть СУБД, где сообщения хранятся в таблицах и участвуют в стандартных механизмах транзакций, репликации и WAL.

Это позволяет обеспечить единый контур обработки данных, в котором сообщение считается обработанным только при успешной фиксации всей транзакции.

Ключевые возможности

Транзакционность и retry-on-rollback

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

Поведение повторов настраивается через параметры количества попыток и задержек между ними.

Приоритеты и фильтрация

Система поддерживает приоритетную обработку сообщений и возможность фильтрации по содержимому, что позволяет гибко управлять очередями.

Это отличает решение от log-based подходов, где обработка строго последовательная.

Поддержка форматов

Реализована работа с форматами JSON и XML, что упрощает интеграцию с внешними системами и сервисами.

Также предусмотрена возможность обработки сообщений разных форматов в одной очереди.

Отложенная обработка

Сообщения могут обрабатываться с заданной задержкой, что позволяет реализовывать планирование задач и отложенные операции.

Это особенно полезно для сценариев пакетной обработки и фоновых задач.

Архитектурные особенности

Очереди реализованы на базе стандартных таблиц PostgreSQL, что позволяет использовать существующие механизмы резервного копирования, репликации и восстановления.

Интеграция с встроенным планировщиком задач позволяет организовывать сложные сценарии обработки, включая генерацию и распределение подзадач.

Сравнение подходов

Log-based системы (например, Kafka) обеспечивают высокую производительность и последовательность, но ограничены в гибкости обработки сообщений.

AMQP/JMS брокеры (например, RabbitMQ) предоставляют расширенные возможности управления сообщениями, но не решают проблему транзакционной согласованности с базой данных.

Pgpro_queue делает акцент на транзакционной целостности и упрощении архитектуры, объединяя хранение данных и обработку сообщений в одной системе.

Технические ограничения

Решение работает с уровнем изоляции READ COMMITTED, что необходимо учитывать при проектировании приложений.

При использовании двухфазного коммита (2PC) существуют особенности обработки сообщений, связанные с их блокировкой до завершения транзакции.

Перспективы развития

Планируется внедрение механизма Pub/Sub, позволяющего рассылать сообщения нескольким подписчикам, а также поддержка callback-уведомлений через HTTP.

В перспективе ожидается реализация Dead Letter Queue для обработки ошибочных сообщений.

Заключение

Pgpro_queue представляет собой подход к построению очередей сообщений, ориентированный на транзакционную надежность и упрощение инфраструктуры.

Решение целесообразно использовать в системах, где критична согласованность данных и минимизация внешних зависимостей, особенно в финансовых, государственных и высоконагруженных корпоративных приложениях.

CIO-NAVIGATOR