53.3. Как устанавливаются соединения #
Postgres Pro Shardman реализует простую клиент-серверную модель по схеме «процесс для пользователя». В такой схеме один клиентский процесс подключается к одному отдельному серверному процессу. Так как мы не знаем заранее, сколько подключений будет, нам нужен «главный процесс», который будет запускать новый процесс при каждом запросе подключения. Главный процесс называется postmaster и принимает входящие подключения в заданном порту TCP/IP. Получив запрос на подключение, процесс postgres порождает новый серверный процесс. Серверные задачи взаимодействуют между собой и другими процессами экземпляра СУБД через семафоры и разделяемую память, чтобы обеспечить целостность данных при одновременном обращении к ним.
В отличие от монолитных систем, в распределённом кластере требуется единообразие и видимость во всех экземплярах СУБД, у каждого из которых свои сеансы и подключения. Основная задача при таком сценарии — это обеспечить работу распределённых транзакций от лица разных пользователей (единая точка подключения для клиентских соединений). Postgres Pro Shardman позволяет производить авторизацию на сторонних серверах от лица операционного пользователя, для которого на всех узлах кластера настроен SSL-сертификат. В момент прохождения SQL-запроса от лица конкретного пользователя соединение устанавливается от лица такого операционного пользователя. Однако как только сеанс начинается, ИД пользователя меняется на ИД того пользователя, который инициировал запрос на координаторе, с сохранением всех прав.
В то же время доверенные пользователи могут авторизоваться по SSL-сертификату (через авторизацию libpq), который генерируются для каждого сервера или кластера.
За подробной информацией обратитесь к схеме:
Рисунок 53.5. Схема подключения
В Postgres Pro Shardman также есть альтернативное приложение для транспорта – Silk.
Обратите внимание, что клиентским процессом может быть любая программа, которая понимает протокол Postgres Pro Shardman, описанный в Главе 56. Многие клиенты базируются на библиотеке libpq для языка C, но есть и другие независимые реализации этого протокола, например, драйвер JDBC для Java.
Установив подключение, клиентский процесс может передать запрос серверу. Запрос передаётся в обычном текстовом виде, клиент не занимается его анализом. Сервер разбирает запрос, строит план выполнения, выполняет его и возвращает полученные строки клиенту, передавая их через установленное подключение.