ускорение процесса
сокращение трудозатрат
прирост производительности
типов создаваемых сущностей
Зависимость от внешних компонентов
вес готовой к использованию утилиты
ООО "СТАРКОВ Групп" - генеральный партнёр Directum. Мы внедряем Directum RX и знаем систему изнутри.
Обязательный этап каждого внедрения - загрузка оргструктуры и учётных записей в систему. У вендора для этого есть решение "Интеграция с Directory Service". Оно решает задачу, но в ходе работы с ним мы поняли, что для наших сценариев хочется чего-то более лёгкого и гибкого.
Зависимость от пакета разработки. Вендорское решение состоит из двух частей: утилита DSIntegration и пакет прикладной разработки ADIntegrationSolution.dat, который нужно опубликовать в Directum RX. Это не "скопировал и запустил" - это полноценный компонент системы, который нужно поддерживать при каждом обновлении. Для задачи "перенести 100 пользователей из каталога" - избыточно.
Подразделения и организации не создаются. В текущей реализации вендорского решения новое подразделение в Directum RX при синхронизации не создаётся - если подходящих подразделений несколько или нет ни одного, возникает ошибка. Организации (справочник "Наши организации") тоже не входят в список синхронизируемых сущностей. То есть перед каждой синхронизацией администратор должен вручную завести всю структуру подразделений и организаций в Directum RX. На проекте с десятком подразделений это терпимо. На проекте с пятьюдесятью - уже нет.
Кастомные атрибуты через C#. Если нужно синхронизировать нестандартное поле (фото, номер кабинета, кастомный идентификатор) - требуется среда разработки Directum RX, создание решения, перекрытие модуля ADIntegrationCore, переопределение серверных функций на C#, публикация пакета. Полноценная разработка ради одного дополнительного поля.
Только однопоточная обработка. Вендорское решение поддерживает пакетную отправку данных, но работает строго в один поток. Многопоточности нет.
Только AD и Samba. Формально ALD PRO построен на базе Samba/FreeIPA, но на практике у него свои атрибуты, своя логика групп, своё поведение при привязке. Работа с ALD PRO "из коробки" через Samba-совместимость - это компромисс, а не полноценная поддержка. А заказчики уже мигрируют.
Мы столкнулись с этим на собственных проектах - подготовка демостендов, развёртывание тестовых сред, пилотные внедрения. Каждый раз одна и та же история: нужно быстро и точно перенести оргструктуру, а существующий инструмент не покрывал все наши сценарии. Так родилась идея сделать своё решение.
Главная цель: самодостаточное решение для синхронизации учётных записей и оргструктуры из LDAP-каталогов в Directum RX. Один бинарник. Без пакетов разработки. Без зависимостей внутри Directum RX. С возможностью кастомизации синхронизации для любого человека, который умеет в YAML.
Задачи:

Команда: менеджер проекта и один разработчик.
Инструменты: Язык - Go. Выбран за главное преимущество: компиляция в единый самодостаточный бинарник без runtime-зависимостей.
Рабочий конвейер: LDAP -> OData API -> записи в Directum RX. Сразу с мультидоменной поддержкой и кросс-компиляцией под Linux/Windows.
Автоматическое создание оргструктуры. ADSyncDir берёт названия организаций из атрибута company в Active Directory (в ALD PRO - из company, o или businessCategory, с возможностью принудительного задания через флаг --company). Подразделения извлекаются из атрибута department в AD (в ALD PRO - из rbtadp). Если организация или подразделение не существуют в Directum RX - утилита создаёт их автоматически с идемпотентным контролем и in-memory кэшированием. В вендорском решении подразделения и организации необходимо создавать заранее - мы хотели убрать этот ручной этап.
Автоматический offboarding. Если пользователь исключён из группы безопасности или удалён из OU, по которому идёт синхронизация, утилита закрывает и логин, и запись сотрудника в Directum RX. Сервисные учётные записи (administrator, service user, integration service и др.) защищены жёстким списком - утилита их не тронет.
Поддержка ALD PRO. Множественные попытки привязки (до 4 вариантов DN с нормализацией регистра). Обработка Size Limit Exceeded с корректной работой на частичных результатах. Верификация SSL-сертификата по thumbprint для собственных CA.
Пакетная обработка через OData $batch. Каждый пользователь в своей транзакционной группе (atomicityGroup) - падение одного не откатывает остальных. Прирост производительности: до 40%.
Многопоточность. Goroutines с группировкой по департаментам и round-robin распределением. У каждого воркера собственный кэш; HTTP-клиент и debug-лог переиспользуются потокобезопасно.
Гибкий маппинг атрибутов - без среды разработки. Это, пожалуй, ключевое отличие с точки зрения эксплуатации. Стандартные поля переопределяются через attr_map, дополнительные - через sync_map в файле extra-sync.yaml. Хотите синхронизировать номер кабинета из AD в кастомное поле Directum RX? Две строки в YAML. Изменились требования заказчика к составу синхронизируемых данных? Администратор правит YAML-файл и перезапускает утилиту. Не нужен разработчик, не нужна среда разработки Directum RX, не нужна публикация пакета. В вендорском решении аналогичная задача требует привлечения C#-разработчика, создания решения в среде разработки и публикации пакета - это надёжный, но более тяжёлый путь. Мы хотели дать возможность решать такие задачи на уровне конфигурации.
Свидетельство N 2025688352 от 18.10.2025. Реестр отечественного ПО. От первого коммита до регистрации - менее 2 месяцев.
Обработка edge-case: фикс невалидного JSON от Directum RX, коллизии при связывании Login и Person, обработка кириллицы.
Типичная ситуация: в Directum RX уже есть записи, заведённые ранее вручную. Обычный импорт создаст дубликаты. ADSyncDir в reuse-режиме выполняет трёхуровневый поиск: для персоны - по email, затем по имени и фамилии; для сотрудника - по ID логина, затем по ID персоны; для логина - по имени учётной записи.
Если совпадение найдено - поэлементное сравнение полей. PATCH-запрос только при реальных изменениях. Результат: ни дубликатов, ни лишних API-вызовов. Запускайте повторно - утилита сама разберётся, кого создать, кого обновить, а кого не трогать.
Для сравнения: вендорское решение сопоставляет сотрудников по одному ключевому атрибуту (employee_key_settings/person_key_settings). Мы пошли дальше и реализовали многоуровневый поиск.

ADSyncDir работает на внутренних ресурсах "СТАРКОВ Групп": демонстрационные стенды, тестовые среды, пилотные проекты. ~100 пользователей со всей оргструктурой за один запуск.
Самодостаточный бинарник ~11 МБ. Скопировал на сервер, указал конфиг, запустил. Внутри Directum RX ничего устанавливать не нужно - утилита работает через стандартный OData API Integration Service.
|
Возможность |
ADSyncDir |
DSIntegration (вендор) |
|
Создание подразделений |
Автоматически |
Не создаёт |
|
Создание организаций |
Автоматически |
Не создаёт |
|
Типов сущностей |
6 |
4 |
|
Кастомные атрибуты |
YAML-конфигурация |
C# в среде разработки Directum RX |
|
Многопоточность |
Есть |
Нет |
|
Пакет разработки в Directum RX |
Не требуется |
Обязателен |
|
Встроенная диагностика |
--check (5 проверок) |
Нет (отдельное решение "Мониторинг") |
|
Dry-run |
Полноценный |
Нет |
Отдельно про установку и запуск - наглядная разница в подходах.
Вендорское решение: скачать архив DSIntegration.zip, положить в папку Directum Launcher, выполнить components add + dsi install, опубликовать пакет разработки ADIntegrationSolution.dat через DeploymentToolCore, на Ubuntu 22.04 создать символическую ссылку на libldap. Обновление - остановить утилиту, заменить архив, повторить установку, перенести настройки из резервной копии конфига.
ADSyncDir: скопировал бинарник на сервер, указал действующий config.yml Directum RX где уже прописаны домены, запустил. Обновление - заменил бинарник.
17 параметров командной строки. 8 режимов работы. 5 882 строки Go-кода. 3 прямые зависимости. Свидетельство N 2025688352, реестр отечественного ПО.
Ближайший шаг: вывод на проекты внедрения для внешних заказчиков. Утилита обкатана на внутренних ресурсах и готова к промышленной эксплуатации. Планируется включение в стандартный инструментарий при реализации проектов внедрения Directum RX.
Стратегическое направление: мультиисточниковая синхронизация. Сейчас ADSyncDir работает по схеме "LDAP -> Directum RX". Следующий шаг - добавление 1С как второго источника кадровых данных.
В большинстве российских компаний кадровый учёт ведётся в 1С, управление доступом - в AD/ALD PRO. Ни один из этих источников по отдельности не даёт полной картины. ADSyncDir сможет агрегировать данные из нескольких систем и формировать единую актуальную оргструктуру в Directum RX.
Дальнейшие планы: развитие мониторинга и оповещений, расширение возможностей reuse-режима для batch/concurrent синхронизации.
11 мегабайт - это только начало.
|
Показатель |
Значение |
|
Самодостаточность |
Единый бинарник, 0 компонентов внутри Directum RX |
|
Создаваемые сущности |
6 типов (логины, персоны, сотрудники, организации, подразделения, должности) |
|
Прирост производительности (batch) |
до 40% |
|
Кастомные атрибуты |
YAML-конфигурация, без среды разработки |
|
Кросс-платформенность |
Linux + Windows |
|
Время от прототипа до реестра ОПО |
менее 2 месяцев |
Опубликовано:
24 марта в 11:12
Авторизуйтесь, чтобы написать комментарий
Обсудите реализацию с экспертом Directum