PGSuite - набор инструментов для создания легковесных web-приложений по архитектуре "Клиент-сервер" (HTML/JavaScript и PostgreSQL) без backend-слоя.
Философия проекта: Современные вычислительные мощности избыточны для небольших проектов, что позволяет полностью отказаться от backend-части и собирать приложения прямо в PostgreSQL.
Изначально инструменты легковесные, но заложен потенциал на будущее: при росте нагрузки коммерческие модификации Highload Pack обеспечивают горизонтальное масштабирование за счет переноса чтения на реплики. Это делает стек применимым даже в высоконагруженных системах, где критически важна скорость обработки данных на уровне ядра БД.
Архитектурный манифест:
Only PostgreSQL, only hardcore!
- Средний уровень отсутствует, HTML/JavaScript взаимодействует с базой напрямую через ORM, хранимые процедуры и SQL-запросы
- Бизнес-логика реализована средствами СУБД PostgreSQL
- Доступ пользователя определяется ограничениями в базе данных на основе access policy
- Полное журналирование (логгирование) всех изменений с возможностью их просмотра
- Отчеты создаются в базе данных и в бинарном виде (bytea) передаются в web-браузер
- WEB-страницы шаблонизируются с использованием SQL
| PGHist | — | PGHist ведет историю изменений таблиц и позволяет получить лог(аудит) изменений по строкам, список изменений по полям и таблицу на момент времени в прошлом (версионирование) |
| PGXLS | — | PGXLS - SQL-схема с процедурами для создания файлов в формате Excel(.xlsx), имеет 2 режима работы: выгрузка данных по SQL-запросу и построение отчетов |
| PGHtml | — | PGHtml - утилита командной строки, создает HTML, JS, JSON и другие типы файлы с использованием данных, получаемых из базы данных PostgreSQL |
| PGORM | — | PGORM позволяет подключаться к PostgreSQL с web-страниц, выполнять SQL-запросы, использовать ORM и получать файлы |
| PG1C | — | PG1C - расширение PostgreSQL, встраивает информационную базу 1С в PostgreSQL - создает и обновляет таблицы идентичные 1С. Простые SQL-запросы копируются из 1С без изменений |
Для некоторых компонент разработаны коммерческие модификации (highload-плагины), которые предназначены для горизонтального масштабирования и оптимизации производительности.
| PGHist | — | асинхронно вычитывает изменения таблиц по протоколу репликации и записывает их в таблицы истории |
| PGXLS | — | поддерживает формирование отчетов на реплике (standby), сокращает время в 3–5 раз |
| PG1C | — | в 1С отслеживает изменения в объектах конфигурации (таблицах) через План обмена и обновляет в PostgreSQL только их |
Основная идея:
Перенос читающей нагрузки на реплики
В большинстве систем чтение кратно преобладает над записью, время синхронного
commit ничтожно меньше общего времени транзакции и сетевого обмена браузер ↔ веб-сервер ↔ база данных,
поэтому разумным видится разделение чтения на OLTP/OLAP и перенос его с мастера (primary) на реплики (standby).Для примера рассмотрим вариант распределения функционала в HA-кластере Patroni из 5 нод:
- мастер (primary) — только запись
- 2 синхронные реплики по записи — согласованное OLTP-чтение (
synchronous_commit=remote_apply) - 1 реплика с отставанием — длительные OLAP-отчеты (
max_standby_streaming_delay=60min) - 1 асинхронная реплика — "горячий" резерв, бекапирование, обеспечение кворума
Инженерные принципы пакета
- Вся функциональность в open source — highload-плагины созданы исключительно для повышения производительности, не изменяют сигнатуру функций и сохраняют исходный прикладной API. От них можно отказаться в любой момент, вернувшись на базовую легковесную версию
- Автономность (air-gapped) — нет облачных вычислений, сетевых проверок лицензии, внешних моделей нейросетей
- Отказ от легковесности — установка бинарных плагинов требует высокой квалификации инженеров, что полностью оправдано масштабом решаемых задач
- Передача исходного кода — исходный код плагинов предоставляется по ограниченной лицензии
- Прозрачность архитектуры — техническое описание алгоритмов позволяет реализовать аналогичные решения самостоятельно
Исходный код выложен в репозитории GitHub
Свидетельство о регистрации