Пул соединений нужен PostgreSQL для более эффективной обработки транзакций. Каждое входящее соединение в СУБД имеет собственные кэши, долго открывается и влияет на алгоритмы создания снимков данных MVCC. Пул соединений назначает серверное соединение клиентскому только на время выполнения транзакции, что позволяет поддерживать небольшое количество серверных соединений для нескольких десятков тысяч клиентских.
Главные преимущества Одиссея
- Многопоточная обработкаОдиссей может значительно увеличить производительность передачи запросов в СУБД, распределив нагрузку на несколько CPU. Особенно важную роль многопоточный дизайн играет в производительности SSL/TLS соединений.
- Расширенный транзакционный пулингОдиссей отслеживает текущее состояние транзакции и в случае неожиданного отключения клиента может автоматически отправить серверу запрос на отмену выполняемого запроса и сделать откат заброшенной транзакции.
- Улучшенное управление параметрами пулаОдиссей позволяет сконфигурировать пулы соединений для базы данных и пользователя. Каждый пул может иметь специфичные параметры аутентификации и режима пулинга.
- Архитектура и внутреннее устройствоОдиссей имеет асинхронную многопоточную архитектуру, которая управляется специализированной библиотекой сопрограмм(корутин) machinarium. Основная идея сопрограмм состоит в том, чтобы использовать последовательное описание асинхронного взаимодействия. Разработчику не нужно описывать машину состояний прерываемого кода, достаточно указать в коде точки возврата управления для асинхронного ожидания.
Одна из целей разработки machinarium состояла в том, чтобы сделать кодовую базу Одиссея понятной для новых разработчиков, а архитектуру легко расширяемой в будущем.