Базовые настройки платформы#
Архитектура платформы#
Платформа построена на основе микросервисной архитектуры, обеспечивающей модульность, масштабируемость и гибкость системы. Ключевые особенности архитектуры включают:
Микросервисная архитектура: Система разделена на отдельные микросервисы, каждый из которых выполняет определенную функцию и работает независимо.
Распределенная обработка: Микросервисы могут быть распределены по разным узлам, что обеспечивает балансировку нагрузки и повышает отказоустойчивость системы.
Контейнеризация и оркестрация: Использование Docker для контейнеризации микросервисов и Kubernetes для их оркестрации упрощает развертывание, масштабирование и управление приложением.
Модульность и взаимодействие микросервисов: Модульность обеспечивается за счет четкого разграничения функций между микросервисами, а взаимодействие между ними происходит через определенные API и протоколы взаимодействия.
Система поставляется в виде одиннадцати образов контейнеров Docker:
Сервис |
Назначение |
---|---|
catalogs |
Хранение и обработка данных пользователя, поддержка RLS |
data-flow |
Обработка и хранения пользовательских сценариев работы с данными |
file-storage |
Хранение бинарных данных |
identity |
Авторизация и управление пользователями |
notification |
Рассылка уведомлений |
scheduler |
Планировщик событий в системе, все события вызываются через шину |
template-service |
Работа с шаблонами |
view-service |
Хранение метаданных системы, оркестрация процессов обновления метаданных |
workflow |
Обработка сценариев через машину состояний |
web-studio |
Веб-часть для разработки приложений |
web-workplace |
Веб-часть для выполнения приложений |
Технологический стек#
Основа: Платформа построена на Net Core 8.0, модульной платформе для разработки ПО с открытым исходным кодом.
Язык разработки: C# используется в качестве основного языка программирования.
Дополнительная инфраструктура#
PostgreSQL (версия ≥13.0): Объектно-реляционная система управления базами данных для основного хранения данных.
Redis (версия ≥5.0): Нереляционная база данных, используемая для кеширования данных.
RabbitMQ (версия ≥3.0): Программный брокер сообщений для обработки системных событий и очередей.
Веб-части#
Используется интерфейсная веб-платформа Blazor, часть Net Core, для создания веб-компонентов.
Веб-части выполняются как WebAssembly (WASM) на стороне клиента.
Требования для установки#
Kubernetes: Для работы кластерной версии продукта необходим кластер Kubernetes.
Минимальная конфигурация:
1 x Master (2 vCPU, 4GB RAM, 20GB SSD) - рекомендуется 3 ноды с ролью Master.
1 x Ingress (4 vCPU, 8GB RAM, 20GB SSD)
3 x Worker (16 vCPU, 32GB RAM, 60GB SSD)
Операционная система: Ubuntu Server 22.04 LTS
Сетевое взаимодействие и порты#
Весь сетевой трафик использует протокол TCP/IP.
По умолчанию, каждый микросервис (кроме web-studio) предоставляет два порта:
80: Публичное API (HTTP/1.1).
5001: Приватное API (HTTP/2).
Web-studio: Предоставляет только порт 80 для раздачи статичных ресурсов.
Все микросервисы, за исключением web-studio, должны иметь доступ к PostgreSql, Redis и RabbitMQ.
Используемые протоколы#
HTTP/1.1: Для публичного API.
GRPC: Для приватного API.
WebSocket: Для сервиса уведомлений (Notification).
SIP over WebSocket: Опционально, для интеграции с SIP в web-workplace.
RTC/RTCP: Опционально, для интеграции с SIP в web-workplace.
Хранение данных#
Каждый микросервис управляет своей схемой в базе данных, без пересечения с другими.
Сервис |
Схема |
---|---|
catalogs |
catalogs |
data-flow |
dataflow |
file-storage |
file_storage |
identity |
identity |
notification |
notification |
scheduler |
scheduler |
template-service |
template |
view-service |
view_service, maintenance |
workflow |
workflow, wfc_persistence |
web-workplace |
workplace-host |
Каждый микросервис сам отвечает за создание и миграцию метаданных своих схем.
Сервис catalogs отвечающий за хранение пользовательских данных, для каждого типа данных создает дополнительную партицию в своей схеме, наследуемую от основной таблицы, а также дополнительные партиции для реализации RLS если это необходимо. При формировании этих партиции формируются все дополнительные индексы и внешние ключи.
Состав индексов и внешних ключей зависят от конфигурации приложения, создаваемого в платформе.
Авторизация и управление правами#
Локальная авторизация с использованием JWT токенов.
Возможность подключения внешних систем авторизации (oAuth, OpenId Connect, Windows авторизация, SAML).
RBAC (Role-Based Access Control) для управления доступом.
Сбор метрик и трассировок#
Все сервисы кроме web-studio предоставляют метрики в формате Prometheus
. Метрики доступны по относительному пути /metrics. Для проверки доступности сервиса предоставляются два пути /hc и /liveness:
hc - развернутая информация по всем проверка;
liveness - краткий ответ о доступности сервиса.
Сбор логов осуществляется самой системой, все логи пишутся в схему maintenance, просмотр логов доступен в web-studio. Уровень логирования для каждого сервиса настраивается отдельно через web-studio, раздел “Обслуживание” (maintenance). Для сбора трассировок возможно подключение двух систем Zipkin или Jaeger. Настройка сбора трассировок осуществляться на уровне параметров сервиса. В случае экспорта трассировок в Jaeger необходима версия не ниже 1.35