Платформа A-POST-OL
Сервер на C++ и платформа бизнес-логики в PostgreSQL. Вход и права, API, бизнес-процессы, события, интеграции, файлы, сообщения, отчёты и фоновые задания работают из коробки – проект описывает только свою предметную область.
От одного сервера до кластера. Готова к Kubernetes.
Сервер на C++, вся логика в PostgreSQL
Запрос входит через сервер и одним вызовом попадает в базу, где живут данные, права и бизнес-логика. В обратную сторону база сама поручает работу фоновым службам: исходящие запросы, письма, файлы, отчёты.
AppServerAuthServerWebSocketAPIPGHTTPFileServerGatewayAPIза шлюзом · go-platformPGFetchPGFileMessageServerTaskSchedulerReportServerПодписки, след каждого действия, уведомления, коды
observer · notification · notice · comment · verificationОчереди задач, внешние вызовы, обмен между узлами
notify · http · mq · replicationВ той же базе: классы, состояния, методы, маршруты, события и права вашей предметной области. Проект расширяет платформу и не меняет её.
От одного сервера до Kubernetes
Сессии, очереди и маршруты живут в PostgreSQL, поэтому экземпляры сервера взаимозаменяемы. Те же образы работают на одной машине, на нескольких серверах и в Kubernetes – код проекта при этом не меняется.
- IОдин серверСервер, база и всё остальное – в контейнерах на одной машине.
- IIВсе ядраРабочих процессов столько, сколько ядер; фоновые службы – по одной.
- IIIБаза в кластереPostgreSQL на отдельных серверах, с автоматическим переключением.
- IVНесколько серверовЭкземпляры на разных машинах за балансировщиком, база одна на всех.
- VKubernetesЭкземпляры в подах; оркестратор поднимает и обновляет их по одному.
Фоновая служба работает в одном экземпляре, остальные ждут в резерве и забирают роль сами, если ведущая пропала. Ведущую выбирает PostgreSQL – внешний координатор не нужен.
libapostol · leader lockИсходящий запрос, письмо, отчёт или задание достаётся одной живой копии и закрывается её подтверждением. Опоздавшее подтверждение отклоняется вместе с результатом.
db-platform · notifyМодули API v2 подключаются к любому экземпляру; таблица маршрутов общая и хранится в базе.
GatewayAPIПроцесс дорабатывает начатое и только потом выходит, а упавший перезапускается сам. Экземпляры обновляются по одному – система не останавливается.
libapostol · модель процессовВсё серверное уже есть
Двенадцать подсистем, общих для всех проектов на платформе. Проект получает их в первый день и не пишет заново.
Вход и сессии
OAuth 2.0 и JWT, вход по паролю, по коду и через внешних провайдеров. Сессии хранятся в базе и закрываются на сервере.
Права в трёх измерениях
На класс, на метод и на объект. Разрешения и запреты для пользователей и групп, видимость по подразделениям.
Объектная модель
Документы и справочники в дереве классов: владелец, история состояний, связи, файлы, адреса, тексты на нескольких языках.
Поведение как данные
Состояния, переходы, события, маршруты и настройки – строки в таблицах. Меняются на работающей системе, без пересборки.
REST API
400+ маршрутов из коробки, маршрут проекта добавляется строкой. Один запрос – одна транзакция, пакетный тоже. Рядом API v2 для модулей на любом языке.
Реальное время
Вызовы и подписки по WebSocket. Подписчик получает только то, что прошло его фильтр и его права.
Интеграции
Вебхуки принимаются прямо в SQL. Исходящие HTTP-вызовы база ставит в очередь, служба выполняет их в фоне, с подстраховкой опросом.
Сообщения
Почта, push и SMS; уведомления пользователям и коды подтверждения почты и телефона.
Файлы
Файлы объектов с доступом по правам самого объекта; хранение на диске или в S3.
Журнал и аудит
Журнал событий, журнал API и след каждого выполненного метода. Ошибки – из каталога: код и текст на языке пользователя.
Одно действие – одна транзакция
Любой запрос проходит один и тот же путь. Объект, его состояние, история, журнал и деньги меняются вместе – или не меняются вовсе.
- 01nginxTLS, домен, ограничение частоты
- 02СерверПроверяет подпись токена и делает один вызов в базу
- Одна транзакция
- 03СессияКто, от чьего имени, в каком подразделении, на каком языке, какой операционный день
- 04МаршрутПуть находится в таблице маршрутов
- 05ПраваТолько объекты, которые вызывающему можно видеть и менять
- 06ДействиеНовое состояние, события по дереву классов, журнал, уведомления подписчикам
- 07ОтветJSON. Отказ – тоже ответ: код и текст на языке пользователя
- 01ФиксацияТранзакция записала задачу; после фиксации база будит службу
- 02СлужбаЗадачу берёт ровно один исполнитель
- 03Внешний мирПлатёжная система, почта, S3, API партнёра
- 04РезультатОтвет возвращается в базу вызовом и меняет состояние объекта
Процессы описываются, а не программируются
Классы, состояния, методы, переходы, события и права – строки в таблицах платформы. Бизнес-процесс меняется на работающей системе, без пересборки и остановки.
Разрешения и запреты задаются пользователям и группам. Видимость дополнительно ограничивают подразделение и область, в которой работает сессия.
На платформе работают
Обсудить ваш проект
Расскажите о задаче – отвечу в течение дня. Бесплатный созвон 30 минут и письменный ориентир по срокам и бюджету.