Базовые настройки платформы#


Архитектура платформы#

Платформа построена на основе микросервисной архитектуры, обеспечивающей модульность, масштабируемость и гибкость системы. Ключевые особенности архитектуры включают:

  • Микросервисная архитектура: Система разделена на отдельные микросервисы, каждый из которых выполняет определенную функцию и работает независимо.

  • Распределенная обработка: Микросервисы могут быть распределены по разным узлам, что обеспечивает балансировку нагрузки и повышает отказоустойчивость системы.

  • Контейнеризация и оркестрация: Использование 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