ADSyncDir: когда 11 мегабайт делают больше, чем 153

80%

ускорение процесса

62.5%

сокращение трудозатрат

До 40%

прирост производительности

6

типов создаваемых сущностей

0

Зависимость от внешних компонентов

11 MB

вес готовой к использованию утилиты

Следующий проект

Предпосылки

ООО "СТАРКОВ Групп" - генеральный партнёр 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.

Задачи:

  • Полный цикл синхронизации: 6 типов сущностей Directum RX за один запуск (логин, персона, сотрудник, организация, подразделение, должность) - включая автоматическое создание оргструктуры.
  • Поддержка Active Directory и ALD PRO.
  • Кастомные атрибуты через YAML-конфигурацию - без C# и среды разработки.
  • Пакетная обработка и многопоточность для работы с крупными каталогами.
  • Регистрация в реестре отечественного ПО.

Ход проекта

Команда: менеджер проекта и один разработчик.

Инструменты: Язык - Go. Выбран за главное преимущество: компиляция в единый самодостаточный бинарник без runtime-зависимостей.

 

Прототип за неделю, август 2025

Рабочий конвейер: LDAP -> OData API -> записи в Directum RX. Сразу с мультидоменной поддержкой и кросс-компиляцией под Linux/Windows.

 

Ядро продукта, сентябрь-октябрь 2025

Автоматическое создание оргструктуры. 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#-разработчика, создания решения в среде разработки и публикации пакета - это надёжный, но более тяжёлый путь. Мы хотели дать возможность решать такие задачи на уровне конфигурации.

 

Регистрация, октябрь 2025

Свидетельство N 2025688352 от 18.10.2025. Реестр отечественного ПО. От первого коммита до регистрации - менее 2 месяцев.

 

Стабилизация, ноябрь 2025 - март 2026

Обработка edge-case: фикс невалидного JSON от Directum RX, коллизии при связывании Login и Person, обработка кириллицы.

 

Развитие. Режим reuse - переиспользование без дубликатов

Типичная ситуация: в 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 и "Интеграция с Directory 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 месяцев

3
Поделиться материалом:
22
Авторизуйтесь, чтобы оценить материал.
Пока комментариев нет.

Авторизуйтесь, чтобы написать комментарий

У вас похожая задача?

Обсудите реализацию с экспертом Directum

Обязательное поле
Обязательное поле
Обязательное поле
Обязательное поле
Обязательное поле
Обязательное поле

Благодарим за интерес! Мы свяжемся с вами.

Directum Awards 2026
Какой проект лучше?
Авторизуйтесь, чтобы оценить материал.
Авторизуйтесь, чтобы оценить материал.
Directum Awards 2026
Спасибо за активность!
Ваш голос принят