Многопоточность

Многопоточность

позволяет горизонтально масштабироваться, повышая производительность пулера за счёт использования нескольких CPU
Полная поддержка всех популярных драйверов

Полная поддержка всех популярных драйверов

работает с Go (pgx), .NET (Npgsql), асинхронными драйверами для Python и Node.js с поддержкой prepared statements
Координатор пулов

Координатор пулов

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

Вариативность аутентификации

предлагает полную поддержку SCRAM-SHA-256 c channel binding, PAM, JWT, MD5
Обновление без остановки сервиса

Обновление без остановки сервиса

запускает новую версию до завершения старого процесса и направляет на неё новые подключения только после проверки готовности. Обновление не влияет на доступность сервиса
Fallback через Patroni

Fallback через Patroni

при недоступности локального PostgreSQL пулер получает у Patroni список работающих узлов и направляет новые подключения на один из них. После восстановления сервера подключения возвращаются на него автоматически
Кэширование анонимных запросов

Кэширование анонимных запросов

преобразует повторяющиеся безымянные prepared statements во внутренние именованные запросы и повторно использует их на соединениях с PostgreSQL. Это сокращает затраты CPU на разбор и планирование, а ограниченные LRU-кэши предотвращают неконтролируемый рост памяти при динамическом SQL
Миграция клиентских сессий

Миграция клиентских сессий

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

Диагностика и управление

операторская консоль в реальном времени показывает нагрузку, задержки, ошибки и очереди с детализацией до конкретного пула, клиента, соединения или приложения. Здесь же доступны живые логи и управление пулами. Все ключевые показатели экспортируются в Prometheus
PgDoorman необходим, чтобы
Экономить сессионные
ресурсы PostgreSQL
Ускорять время отклика за счёт использования расширенного протокола и prepared statements
Стабильно держать
высокие нагрузки
Антон Степаненко

Антон Степаненко

CTO Ozon

PgDoorman — наш ответ на вызовы высоконагруженных PostgreSQL-систем. Наше решение позволит вам повысить производительность и эффективнее использовать CPU. Проект изначально делали для себя. Провели огромное количество исследований и тестов, а потому в качестве уверены. А теперь готовы делиться.

Почему не PgBouncer?

  • общий пул и многопоточность вместо нескольких независимых однопоточных экземпляров
  • анонимные prepared statements — оптимизация типичного поведения современных драйверов
  • координатор пулов и контроль p95/p99 при дефиците бэкэнд-соединений
  • встроенные Prometheus, web UI и расширенная диагностика
  • Patroni fallback и миграция живых сессий при обновлении бинарных файлов

Почему не Odyssey

  • более полная реализация расширенного протокола и поддержка асинхронной очистки буфера
  • кэширование анонимных запросов, а не только именованных prepared statements
  • более детальный контроль нагрузки на пул: FIFO, bounded burst, direct handoff
  • встроенная observability-модель без обязательного развёртывания exporter-sidecar
  • фокус на безопасной эксплуатации: Patroni fallback, миграция клиентских сессий и backend TLS
FAQ
Почему PgDoorman написан на Rust?
С какими ОС совместим пулер?
Как настроить PgDoorman?
На моём проекте нагрузка ниже 10k RPS. Зачем мне PgDoorman?
Почему вы назвали пулер PgDoorman?