Архитектура

Apostol CRM объединяет два фреймворка в единый бэкенд: высокопроизводительный HTTP-сервер на C++20 и движок бизнес-логики на PostgreSQL.

Обзор

ФреймворкРольВозможности
libapostolC++20 серверHTTP/WebSocket, async PostgreSQL, epoll -- 507K RPS
db-platformСлой PostgreSQL26 PL/pgSQL модулей, 100+ таблиц, 800+ функций

Без PHP, Python или Node.js. HTTP-запросы идут напрямую из C++ в PostgreSQL -- ноль промежуточных слоёв.

Поток запроса

Архитектура Apostol CRM

Слой C++ обрабатывает HTTP, TLS, пул соединений, WebSocket, JWT и асинхронный ввод-вывод. Слой БД обрабатывает бизнес-логику, маршрутизацию REST, контроль доступа, переходы состояний и хранение данных.

Архитектура базы данных

Четыре схемы:

СхемаРольПример
restДиспетчер RESTrest.sensor('/sensor/list', '{}')
apiПубличный API с проверкой доступаapi.list_sensor(...)
kernelБизнес-логикаCreateSensor(...), EditSensor(...)
dbТаблицы, индексы, триггерыdb.sensor

Система модулей

Workers -- обработка HTTP/WebSocket

МодульОписание
AppServerREST API с аутентификацией
AuthServerOAuth 2.0, JWT, PKCE
WebSocketAPIJSON-RPC + pub/sub
FileServerФайловый сервер с JWT
PGHTTPHTTP-to-PL/pgSQL
WebServerСтатические файлы, Swagger UI

Processes -- фоновые демоны

ПроцессОписание
MessageServerEmail/SMS/push
TaskSchedulerПланировщик задач
ReportServerГенерация отчётов

Система сущностей

Apostol CRM включает 30 бизнес-сущностей. Каждая следует стандартной конвенции из 8 файлов:

entity/object/document/myentity/
├── table.sql       # Таблица, индексы, триггеры
├── view.sql        # 3 представления в kernel
├── routine.sql     # Create*/Edit*/Get* функции
├── api.sql         # API-представление + 6 CRUD-обёрток
├── rest.sql        # REST-диспетчер (6 стандартных маршрутов)
├── event.sql       # 9 обработчиков событий
├── init.sql        # Класс, тип, состояния, методы, переходы
└── create.psql     # Мастер-скрипт установки

Движок рабочих процессов

Каждая сущность имеет встроенный автомат состояний:

       ┌────── restore ───────┐
       v                      |
  [Created] --enable--> [Enabled] --disable--> [Disabled]
       |                    |                       |
       |--delete-->   [Deleted]  <--delete--   [Deleted] <--delete--

Подробнее: Настройка рабочих процессов.

Полная версия доступна на английском языке: db-platform Wiki.