Avanpost IDM Base представляет собой комплексное решение, состоящее из нескольких компонентов, которые взаимодействуют между собой для распределения задач и выполнения команд. Взаимодействие компонентов осуществляется внутри кластера, основанного на акторной модели Akka.NET.
Кластерная модель развертывания базируется на двух системах:
- AFlow представляет собой систему для управления бизнес-процессами и запускается на сервисе IGA. Роль AFlow включает автоматическое распределение задач по кластеру и запуск бизнес-процессов.
- Система IGA объединяет сервисы IGA и IDM, включая остальные роли в рамках сервисов.
Система Avanpost IDM содержит следующие компоненты:
- Сервис IGA:
– предоставляет API и веб-интерфейс для операционного и административного управления Системой;
– осуществляет обработку кадровых событий;
– генерирует события аудита, отчеты и аттестации;
– обеспечивает управление ходом бизнес-процессов, включая задачи, подзадачи и последовательность действий, построение дерева задач, регистрацию событий и другие функции, необходимые для автоматизации рабочих процессов. В рамках кластера AFlow выполняет роль мастера, координируя выполнение задач и управляя работой других компонентов. - Сервис IDM:
– отвечает за коннекторы и запуск заданий планировщиков;
– выполняет фоновые процессы;
– осуществляет отправку событий аудита;
– обеспечивает функционирование ролевой модели управления доступом;
– управляет кадровой структурой: осуществляет запуск процессов кадровой синхронизации и обработку кадровых событий. - Приложение IDM. Console предназначено для выполнения сервисных процедур и диагностики через интерфейс командной строки.
- БД IDM, схемы которой хранят:
– конфигурацию IDM, информацию о пользователях и их правах доступа, включая историю;
– процессы и документы. - Сервис коннекторов предназначен для абстрагирования (сегментации) компонентов Системы от коннекторов с целью сетевой изоляции, развертывания коннекторов в окружении, отличном от основной инфраструктуры системы IDM.
Взаимодействие сервисов для распределения задач и выполнения команд производится через кластер, организованный на основе системы распределенных вычислений Akka.Net.
Для настройки кластера используются отдельные файлы конфигурации, расположение которых определяется переменной окружения "CLUSTER_CFG", или секции "cluster" внутри основного файла конфигурации.
Если запуск происходит на одном сервере , требуется чтобы порты между системами не пересекались. Для работы кластера требуется как минимум одна нода с системой AFlow.
Для корректной работы однонодовой конфигурации так же необходим кластер, объединяющий сервисы idm и iga для взаимодействия между ними.
Навигатор по разделу:
- 1. Примеры конфигурационных файлов для сервисов
- 1.1. Пример файла конфигурации кластера для сервиса idm:
- 1.2. Пример файла конфигурации кластера для сервиса iga:
- 2. Описание параметров конфигурационных файлов
- 2.2. Настройка ssl
- 2.3. Настройка систем
- 3. Схема-пример однонодового развертывания
- 4. Схема-пример развертывания кластера в K8s "по ролям"
1. Примеры конфигурационных файлов для сервисов
1.1. Пример файла конфигурации кластера для сервиса idm:
{ "cluster": { "host": "127.0.0.1", "PublicHost":"Some.host.local", "TransportLogging": "false", "SslEnabled": "false", "ssl": { "SuppressValidation": "true", "CertificatePath": "somepath", "CertificatePassword": "somepwd", "CertificateFlags": [ "default-flag-set" ] }, "Systems": { "Iga": { "Port": "1778", "FailureDetector":{ "HeartbeatInterval": "12", "AcceptableHeartbeatPause": "21", "ExpectedResponseAfter": "8", "Threshold": "12" }, "ClusterRoles": [ "idm","sch_processor" ], "MemberNodes": [ { "Host": "127.0.0.1", "Port": "1778" }, { "Host": "127.0.0.1", "Port": "1779" }, { "Host": "127.0.0.1", "Port": "1780" } ] }, "Workers":{ "Port": "1776", "FailureDetector":{ "HeartbeatInterval": "12", "AcceptableHeartbeatPause": "21", "ExpectedResponseAfter": "8", "Threshold": "12" }, "ClusterRoles":[ "lockunlock_q" ], "MemberNodes": [ { "Host": "127.0.0.1", "Port": "1775" }, { "Host": "127.0.0.1", "Port": "1776" } ] } } } }
1.2. Пример файла конфигурации кластера для сервиса iga:
{ "cluster": { "host": "127.0.0.1", "PublicHost":"Some.host.local", "TransportLogging": "false", "SslEnabled": "false", "ssl": { "SuppressValidation": "true", "CertificatePath": "somepath", "CertificatePassword": "somepwd", "CertificateFlags": [ "default-flag-set" ] }, "Systems": { "Iga": { "Port": "1778", "ClusterRoles": [ "hr_processor","iga" ], "FailureDetector":{ "HeartbeatInterval": "12", "AcceptableHeartbeatPause": "21", "ExpectedResponseAfter": "8", "Threshold": "12" }, "MemberNodes": [ { "Host": "127.0.0.1", "Port": "1778" }, { "Host": "127.0.0.1", "Port": "1779" }, { "Host": "127.0.0.1", "Port": "1780" } ] }, "AFlow":{ "Port": "1782", "FailureDetector":{ "HeartbeatInterval": "12", "AcceptableHeartbeatPause": "21", "ExpectedResponseAfter": "8", "Threshold": "12" }, "Executors": 4, "Persistent":{ "Writers": 2, "MaxConcurrentRecoveries": "50", "CircuitBreaker":{ "MaxFailures": "5", "CallTimeout": "5", "ResetTimeout": "5" } }, "ClusterRoles": [ ], "MemberNodes": [ { "Host": "127.0.0.1", "Port": "1782" }, { "Host": "127.0.0.1", "Port": "1783" } ] } } } }
2. Описание параметров конфигурационных файлов
2.1. Корневые элементы конфигурации
Параметр | Примеры значений | Пояснение |
---|---|---|
host | 127.0.0.1 | Обозначение сетевого интерфейса |
10.10.120.5 | ||
PublicHost | 10.10.120.5 | Обозначение идентификатора, по которому к машине можно обратиться снаружи (если машина не может распознать сама себя по адресу в параметре "host"). Может быть задана через переменную окружения "IGA_CLUSTER_PUBLIC_HOST" |
TransportLogging | false | Включение логгирования сетевого протокола akka |
true | ||
SslEnabled | false | Включение ssl |
true | ||
ssl | см. Настройка ssl | Настройка ssl-параметров при включенном параметре "SslEnabled" |
Systems | см. Настройка систем | Настройка систем |
2.2. Настройка ssl
Параметр | Примеры значений | Пояснение |
---|---|---|
SuppressValidation | true | Валидация сертификата |
false | ||
CertificatePath | /some/path/to/cert | Путь до сертификата |
CertificatePassword | pwd | Пароль сертификата |
CertificateFlags | ["default-key-set"] | Хранилище ключей. Доступные значения:
|
2.3. Настройка систем
2.3.1. IGA
Параметр | Пример | Пояснение |
---|---|---|
Port | "1777" | Сетевой порт, на котором будет работать система |
FailureDetector | см. FailureDetector | Настройка, отвечающая за детектирование недоступных нод кластера |
ClusterRoles | [ "iga", "hr_processor" ] | Подробнее cм. Таблица распределения систем и ролей в кластере |
MemberNodes | см. MemberNodes | Набор всех нод или seed-нод для заданной системы |
2.3.2. AFLOW
Параметр | Пример | Пояснение |
---|---|---|
Port | "1779" | Сетевой порт, на котором будет работать система |
FailureDetector | см. FailureDetector | Настройка, отвечающая за детектирование недоступных нод кластера |
ClusterRoles | [ ] | Подробнее cм. Таблица распределения систем и ролей в кластере |
MemberNodes | см. MemberNodes | Набор всех нод или seed-нод для заданной системы |
Executors | 4 | Количество потоков для выполнения блоков бизнес-процессов. Используется для контроля нагрузки на БД и сервер. 10 подов по 4 executor = 40 потоков. Если ресурсы на поде ограничены, то следует создать множество подов с небольшим количеством executors |
Persistent | см. Persistent | Контроль нагрузки на БД, создаваемой движком бизнес-процессов |
2.3.3. Persistent
Параметр | Подпараметр | Пример | Пояснение |
---|---|---|---|
Writers | 2 | Количество акторов, которые принимают запросы на запись в БД. Используется для контроля нагрузки на запись в БД. 10 нод по 2 writer = 20 потоков записи в БД. | |
MaxConcurrentRecoveries | "50" | Количество одновременно восстановляемых из БД акторов. Используется для контроля нагрузки на чтение в БД. | |
CircuitBreaker | {} | Защита от DOS БД. При включенном CircuitBreaker запросы сбрасываются. | |
MaxFailures | 5 | Количество упавших подряд запросов, после которого CircuitBreaker включается | |
CallTimeout | 5 | Таймаут выполнения запроса, после которого запрос получает статус Failure | |
ResetTimeout | 5 | Таймаут, после которого CircuitBreaker выключается |
2.3.4. Таблица распределения систем и ролей в кластере
Система | Роль | Компонент | Комментарий |
---|---|---|---|
IGA | iga | IGA | Фронтенд, обработка некоторых видов событий(кроме кадровых) |
idm | IDM | Коннекторы, запуск заданий планировщиков | |
hr_processor | IGA | Обработка кадровых событий | |
securityevent_q | IGA | Отправка событий аудита | |
sch_processor | IDM | Обработка событий на запуск планировщика | |
aflow | IGA | Обработка событий на запуск бизнес-процессов. Требует наличие системы AFlow. | |
lockunlock_q | IDM | background-задачи, работающие в фоне (ядро IDM) | |
AFLOW | авто распределение | IGA | Движок бизнес-процессов. Можно игнорировать поле "MemberNodes" для данной системы или оставить "MemberNodes": [ ] Требует наличия роли aflow для IGA системы. |
2.3.5. Общие компоненты систем
2.3.5.1. FailureDetector
Настройка, отвечающая за детектирование недоступных нод кластера. Данные параметры отдельно настраиваются под каждую инсталляцию и зависят от архитектуры проекта.
Параметр | Пример | Пояснение |
---|---|---|
HeartbeatInterval | "12" | Интервал в секундах между Heartbeat-сообщениями. Если HeartbeatInterval >= (AcceptableHeartbeatPause/3)*2 , то в логе будут регулярно появляться Warning сообщения "Heartbeat interval is growing too large". |
AcceptableHeartbeatPause | "21" | Количество потерянных или задержанных heartbeat-сообщений, после которого FailureDetector пометит ноду как потенциально упавшую. |
ExpectedResponseAfter | "8" | Время в секундах, которое нода будет ждать ответ на посланное heartbeat-сообщение |
Threshold | "12" | Порог срабатывания FailureDetector. Чем ниже порог, тем быстрее FailureDetector будет срабатывать, и тем больше будет ложных срабатываний. |
2.3.5.2. MemberNodes
Набор всех нод или seed-нод для заданной системы.
В случае использования seed-нод достаточно указать только первые ноды для каждой роли в данной системе.
[ { "Host": "127.0.0.1", "Port": "1777" }, { "Host": "127.0.0.1", "Port": "1779" } ]