Репозиторий предназначен для демонстрации работы PgBouncer в приложении Flexberry. PgBouncer - это сервис для организации connection pooling
к экземпляру PostgreSQL.
Приложение состоит из:
- PgBouncer - сервис, обеспечивающий
connection pooling
- Liquibase - утилита для автоматической инициализации и обновления БД
- PostgreSQL:
- appdb - БД приложения
- auditdb - БД аудита
- securitydb - БД полномочий
- Frontend (ember-flexberry)
- Backend (Flexberry ODataService)
Компоненты приложения упакованы в Docker:
- Запустить сборку образов, выполнив скрипт
create-image.cmd
в папке/src/Docker
. - Запустить контейнеры, выполнив скрипт
start.cmd
в папке/src/Docker
.
Исходные файлы образов находятся в папке /src/Docker/dockerfiles
.
PgBouncer - это инструмент, который работает как посредник между приложением и базой данных, осуществляя при этом connection pooling
. PgBouncer принимает подключения, и "транслирует" их в нужные базы данных, при этом используя соединения из своего пула. Прикладное приложение подключается к PgBouncer
(порт 6432
по умолчанию).
Для подключения к 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 - это инструмент для отслеживания, управления и применения изменений схемы базы данных. Является аналогом Git для баз данных.
Liquibase используется в данном проекте для автоматической инициализации и обновления структуры БД. Инициализация и обновление БД происходит при запуске контейнера pgbouncersample/liquibase
(см. docker-liquibase-entrypoint.sh). Перед запуском liquibase
ожидается запуск контейнера с PostgreSQL через скрипт readycheck (см. описание).
Чтобы применить скрипты на нескольких БД, каждой папке присвоен одноимённый контекст: appdb
, auditdb
, securitydb
. Название контекста соответствует базе данных, на которой применяются скрипты (подробнее см. в этом разделе).
Файл SQL/liquibase.properties
задаёт базовые настройки для запуска Liquibase. В этом файле задаётся путь к корневому changelog. Корневой changelog SQL/changelog.json
задаёт настройки контекстов.