Много лет ты читаешь отчёты с HighLoad++, следишь за докладами и обсуждениями в кулуарах, но все это обычно воспринимается как что-то, наблюдаемое со стороны. Момент же, когда твоя собственная заявка попадает в программу,   становится переломным и воспринимается совсем иначе.

HighLoad++ давно стал местом концентрации лучших технарей со всей страны –   самого смузи индустрии – и площадкой обсуждения сложных инженерных задач. Поэтому приглашение на конференцию с докладом для нас – это не про "ещё один слот в очередном мероприятии", а про возможность поделиться практическим опытом нескольких лет разработки с аудиторией, которую сложно удивить красивыми слайдами без реальных технических результатов.

Выбор темы был довольно рискованным и не самым очевидным, но тем и интереснее. Вокруг HighLoad обычно много разговоров про микросервисы, безопасность, Kubernetes, AI. Ну а мы (команда Avanpost DS) позволим себе выйти с докладом о разработке собственной службы каталогов enterprise-уровня.

Звучит, конечно, не столь интригующе, как привычные highload-ные кейсы, но под капотом службы каталогов скрывается не меньше интересных задач, чем в любой распределённой системе.

Именно об этом мы и хотим поговорить на Saint HighLoad++ 2026.

Краткий экскурс: эволюция хайлоада (версия ChatGPT)

Для объективности я попросил нейросеть сгруппировать тематику докладов HighLoad последних лет по характерным эпохам. Вот что вышло:

  • 2015-2018: Эпоха «Монолит — зло, нарезаем всё в 100500 микросервисов». Главные боли — сеть и сериализация.

  • 2019-2022: Эпоха «Реактивщина и асинхронность». Гонка за нулевым оверхедом. Vert.x, Akka, Project Loom (который тогда был мифом).

  • 2023-2025: Эпоха «Data Intensive». Все вдруг поняли, что микросервисы — это легко, а вот данные… данные больно. Дебаты вокруг NewSQL, векторных БД и шардирования как искусства.

А теперь внимание вопрос: Где во всей этой картине место для службы каталогов, которая хранит оргструктуру по типу «Организация → Подразделение → Отдел → Сотрудник» и напоминает картотеку из старых детективных фильмов? 

Замена Active Directory в энтерпрайзе – не так просто, как кажется

Здесь, наверное, излишним будет напоминать зачем вообще понадобилось менять MS AD, который просто работал все эти годы, на что-то другое. Я искренне удивлюсь, если на Хабре найдется хоть один человек, который не в курсе процесса импортозамещения в России. Однако задача импортозамещения MS AD далеко не так тривиальна, как могло показаться на первый взгляд.

Проблема в том, что за 20+ лет эволюции AD оброс множеством неочевидных оптимизаций, к которым привыкли и разработчики приложений, и сами администраторы. Например,AD умеет выполнять сложные поиски с транзитивным членством в группах за десятки миллисекунд на миллионах объектов. Open-source аналоги в таких запросах либо падают в линейный обход дерева, либо требуют предрасчета всех замыканий, что взрывает объём хранимых данных. Или взять репликацию: AD использует устаревший, но феноменально живучий протокол с семантикой «последний победил» и восстановлением после длительного отсутствия связи. Классические LDAP-движки просто не проектировались для таких нагрузок и масштабов.

Опенсорсная боль: почему «бесплатно» оказалось слишком дорого?

Мы не гонимся за хайпом. Наша ЦА — это серьезная корпоративная инфраструктура с legacy в 20 лет и нагрузкой в сотни тысяч операций в секунду. Мы честно пытались не изобретать велосипед и взять готовые опенсорсные каталоги.

Что мы увидели на нагрузочном тестировании (сценарий: каталог на 50K  пользователей, глубокая вложенность групп, имитация «logon storm»):

SambaDC: С чего ещё начинать, как не с проекта, построенного на реверс инжиниринге MS AD. Увы Самба не только не справляется с нагрузкой, выдавая жалкие 5% пропускной способности MS AD, но и просто падает на бок и больше не встает.

389 DS(FreeIPA) : Неплохая производительность на поиск (если сравнивать с самбой), но ужасная работа с массовыми изменениями, тяжеловесная ACL и вечные проблемы с репликацией. Не помогает даже миграция на LMDB, пропускная способность все равно на порядок уступает MS AD.

OpenLDAP(режим back-mdb): На 20-30K rps начиналась жуткая фрагментация памяти. Поиск по индексу работал отлично, пока вы не добавляли атрибут с подстановочными знаками (*). Тогда движок падал в sequential scan. Да и подсистема репликации существует в OpenLDAP как некий afterthought.

Мы поняли главное: ни один Open-Source LDAP каталог не способен заменитьMS AD на масштабах крупного предприятия, единственно-верное решение – это писать свой каталог с нуля, сразу закладывая масштабирование и производительность в архитектуру.

Как мы это сделали (коротко, подробности — на докладе)

Оглядываясь на пройденный нами путь, можно с уверенностью утверждать, что львиная доля работ по созданию Avanpost DS – это R&D в том или ином виде. Конечно, основные протоколы взаимодействия с инфраструктурой –LDAP и Kerberos – открытые и хорошо задокументированы в документации IETF, однако целый пласт задач ещё требовал исследований:

Производительность: Обеспечить производительность на уровне AD оказалось не так просто, за 20+ лет развития команда MS выжала из JET Blue все, что было можно, результатом стала единственная служба каталогов в мире, способная предоставлять аутентификацию и авторизацию в инфраструктурах на сотни тысяч пользователей без прерывания обслуживания. Одной из основных задач для нас стало добиться производительности на уровнеMS AD – здесь R&D исчисляется годами. Небольшой спойлер – добились мы таких результатов за счет использования хранилища LSM-tree с кастомными индексами на базе BadgerDB, но подробнее об этом в своем докладе на HL расскажет мой коллега, Собир Абдуллаев.

Горизонтальная масштабируемость: Ещё одна область, практически не охваченная документацией на базовые протоколы – это репликация данных. Стандартное решение CAP теоремы, к которому рано или поздно приходили все каталоги, начиная от MS AD и заканчивая Open LDAP – это мультимастер репликация. Однако несмотря на большое количество примеров тут тоже было много почвы для исследований, начиная с пограничных кейсов конфликтов репликации, заканчивая тем, что репликация это в общем то тоже нагрузка (и нагрузку на запись она нисколько не снижает, даже скорее наоборот).

Совместимость: MS AD за время своего существования оброс огромным количеством расширений, с которыми теперь оказались плотно завязаны многие инфраструктурные и прикладные сервисы (ага, то самое легаси 20-летней давности, опирающееся на функционал, который уже лет 10 как deprecated). Тема обеспечения совместимости как с существующей инфраструктурой заказчика, так и с самой MS AD (доверительные отношения и миграция), стала основным поставщиком задач по реверс инжинирингу в нашем продукте. 

Как видите скучная на первый взгляд задача по созданию службы каталогов на замену MS AD оказалась весьма нетривиальной и обросла кучей приключений по дороге. Но, результат того стоил, посмотреть хотя бы даже на графики пропускной способности по результатам сравнительного нагрузочного тестирования – здесь нам действительно есть чем гордиться:

Так с чем мы идём на HighLoad?

С первой службой каталогов enterprise уровня за последние 20 лет, с рассказом о том, как решили задачи производительности и масштабируемости, с историей реверс инжиниринга и реальными цифрами из боевой инфраструктуры.

На нашем докладе мы расскажем:

  • Как выбирали базу данных и почему остановились на BadgerDB;

  • Как мы строили индексы для поиска по поддереву и по связанным атрибутам;

  • Каких показателей производительности нам удалось добиться (и чего это стоило).

Надеюсь, удалось вас заинтересовать, будем рады вас видеть на конференции)

Тема доклада: Реализация высокопроизводительной распределенной службы каталогов на Go и Badger DB
Где и когда: 
HighLoad.ru, 23 июня, 10:00, «Зал Розовый»