Skip to content

Flexberry/Flexberry.PgBouncer.Sample

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flexberry.PgBouncer.Sample

Назначение

Репозиторий предназначен для демонстрации работы PgBouncer в приложении Flexberry. PgBouncer - это сервис для организации connection pooling к экземпляру PostgreSQL.

Структура

Приложение состоит из:

  • PgBouncer - сервис, обеспечивающий connection pooling
  • Liquibase - утилита для автоматической инициализации и обновления БД
  • PostgreSQL:
    • appdb - БД приложения
    • auditdb - БД аудита
    • securitydb - БД полномочий
  • Frontend (ember-flexberry)
  • Backend (Flexberry ODataService)

Структурная схема

Запуск

Компоненты приложения упакованы в Docker:

  1. Запустить сборку образов, выполнив скрипт create-image.cmd в папке /src/Docker.
  2. Запустить контейнеры, выполнив скрипт start.cmd в папке /src/Docker.

Исходные файлы образов находятся в папке /src/Docker/dockerfiles.

Описание PgBouncer

PgBouncer - это инструмент, который работает как посредник между приложением и базой данных, осуществляя при этом connection pooling. PgBouncer принимает подключения, и "транслирует" их в нужные базы данных, при этом используя соединения из своего пула. Прикладное приложение подключается к PgBouncer (порт 6432 по умолчанию).

Подключение к PgBouncer

Для подключения к PgBouncer используется пользователь pgbadmin, пароль 12345 (SERVER=pgbouncer;User ID=pgbadmin;Password=12345;Port=6432;Database=appdb). Данный пользователь задаётся в файле userlist.txt и используется только для подключения к PgBouncer.

Путь к файлу userlist.txt можно изменить через параметр pgbouncer.auth_file.

PgBouncer выполняет "трансляцию" запросов в нужную БД, используя её строку подключения. Строки подключения можно задать в файле pgbouncer.ini (см. документацию). Данный подход позволяет PgBouncer использовать отдельных пользователей для подключения к базам данных.

Описание Liquibase

Liquibase - это инструмент для отслеживания, управления и применения изменений схемы базы данных. Является аналогом Git для баз данных.

Liquibase используется в данном проекте для автоматической инициализации и обновления структуры БД. Инициализация и обновление БД происходит при запуске контейнера pgbouncersample/liquibase (см. docker-liquibase-entrypoint.sh). Перед запуском liquibase ожидается запуск контейнера с PostgreSQL через скрипт readycheck (см. описание).

Описание структуры SQL скриптов

Чтобы применить скрипты на нескольких БД, каждой папке присвоен одноимённый контекст: appdb, auditdb, securitydb. Название контекста соответствует базе данных, на которой применяются скрипты (подробнее см. в этом разделе).

Файл SQL/liquibase.properties задаёт базовые настройки для запуска Liquibase. В этом файле задаётся путь к корневому changelog. Корневой changelog SQL/changelog.json задаёт настройки контекстов.