Встроенный брокер сообщений в 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 представляет собой подход к построению очередей сообщений, ориентированный на транзакционную надежность и упрощение инфраструктуры.
Решение целесообразно использовать в системах, где критична согласованность данных и минимизация внешних зависимостей, особенно в финансовых, государственных и высоконагруженных корпоративных приложениях.
