Одиссей

Многопоточный пул соединений для PostgreSQL.

Пул соединений нужен PostgreSQL для более эффективной обработки транзакций. Каждое входящее соединение в СУБД имеет собственные кэши, долго открывается и влияет на алгоритмы создания снимков данных MVCC. Пул соединений назначает серверное соединение клиентскому только на время выполнения транзакции, что позволяет поддерживать небольшое количество серверных соединений для нескольких десятков тысяч клиентских.

Расшифровка доклада про Одиссей на PGConf.Russia 2020

Главные преимущества Одиссея

  1. Многопоточная обработка
    Одиссей может значительно увеличить производительность передачи запросов в СУБД, распределив нагрузку на несколько CPU. Особенно важную роль многопоточный дизайн играет в производительности SSL/TLS соединений.
  2. Расширенный транзакционный пулинг
    Одиссей отслеживает текущее состояние транзакции и в случае неожиданного отключения клиента может автоматически отправить серверу запрос на отмену выполняемого запроса и сделать откат заброшенной транзакции.
  3. Улучшенное управление параметрами пула
    Одиссей позволяет сконфигурировать пулы соединений для базы данных и пользователя. Каждый пул может иметь специфичные параметры аутентификации и режима пулинга.
  4. Архитектура и внутреннее устройство
    Одиссей имеет асинхронную многопоточную архитектуру, которая управляется специализированной библиотекой сопрограмм(корутин) machinarium. Основная идея сопрограмм состоит в том, чтобы использовать последовательное описание асинхронного взаимодействия. Разработчику не нужно описывать машину состояний прерываемого кода, достаточно указать в коде точки возврата управления для асинхронного ожидания.
    Одна из целей разработки machinarium состояла в том, чтобы сделать кодовую базу Одиссея понятной для новых разработчиков, а архитектуру легко расширяемой в будущем.
Mon Sep 19 2022 21:05:13 GMT+0300 (Moscow Standard Time)