Эволюция плотности: как «Зелёный коридор» Сбера меняет экономику 8 миллионов ядер

от автора

«Зелёный коридор» (ЗК) — проект перестроения культуры потребления ресурсов в масштабах «цифрового государства». Чтобы вы понимали масштаб инфраструктуры, которой мы управляем:

  • 8 000 000 физических ядер;

  • 1,2 экзабайта данных в хранилищах;

  • Почти 600 000 серверов, считая виртуальные машины.

Когда работаешь с такими объёмами, даже микроскопическая погрешность в 1% лишней аллокации превращается в гору «мёртвого железа», на котором можно было бы запустить ещё один банк средних размеров. В начале наше фактическое потребление ресурсов находилось в районе 27%.

Звучит как катастрофа? На самом деле это был осознанный выбор, нулевая терпимость к риску. У нас в Сбере культура выживаемости систем: нормой являются схемы 2N, 4N или Active-Active на четыре площадки (одна из которых вообще в другом регионе с огромными сетевыми задержками). Добавьте к этому логистический шок 2022 года, когда железо наконец доезжало до стойки, а инженеры резервировали его под завязку: «А вдруг завтра поставки встанут?». И кто не слышал про программы импортозамещения? Или legacy to platform (L2P) — смена платформенного ПО: кто в Сбере, тот поймёт, почему по завершению программы некоторые сотрудники неподдельно радовались и кричали «Ура!». В итоге квоты выбраны, бюджет потрачен, а процессоры недоиспользованы. 

Проект такого уровня не потянет горстка людей. Да, у нас есть «ядро» в лице Вадима Татарницева, Евгения Акинчица, Анны Осиповой и Евгения Бинна. Но также у нас есть команда эксплуатации, которой руковожу я, Максим Халматов, и подразделение Алексея Нестеренко, которое тянет огромные стримы по аналитике и методологии.

Методология: почему $Среднее + 2\sigma$ — это не просто математика

«Зелёный коридор» — это методика, позволяющая с помощью единого интегрального показателя оценить эффективность использования инфраструктуры на самых детальных уровнях: от виртуальных машин до контейнерных кластеров. В первой версии наш интегральный показатель зависел от шести ключевых метрик: 

  1. Потребление процессора и памяти виртуальными машинами.

  2. Потребление дисков виртуальными машинами.

  3. Потребление квот OpenShift Enterprise (OSE).

  4. Потребление лимитов OSE.

  5. Потребление квот DropApp (DA).

  6. Потребление лимитов DA.

Почему именно эти метрики? По ним была достаточно точная отчётность, а в инфраструктуре с десятками тысяч серверов это уже значимое преимущество. Полная точность при таких масштабах недостижима: что‑то ломается, где‑то пропадают данные. Это всё-таки инфраструктура, которая живёт и дышит.

Контейнеризация в банке занимает значительную долю инфраструктуры. В периоды активных миграций объём фактически удваивается, а команды при планировании традиционно закладывают ресурсы с запасом.

Главный вопрос: как отделить плохое потребление от хорошего? Идти классическим путём — проводить исследования и нагрузочные тесты для каждого из 50+ продуктов в режиме эксплуатации — нереально. Хотя нам всё равно пришлось этим заниматься, потому что у нас не было времени на академические исследования. Сейчас мы уже поменяли методику нагрузочного тестирования и теперь ищем не только максимумы-минимумы, но и параметры оборудования для попадания в параметры Зелёного коридора. 

Мы выбрали прагматичный подход: взяли среднее значение с верхним доверительным интервалом по двум квадратичным отклонениям на периоде в 90 дней. Почему 90? Чтобы сгладить сезонность, дать время на «разогрев» сервера и отсечь разовые пики, которые не отражают реальную жизнь продукта. Если система попадает в этот расчётный «коридор», то она считается эффективной, а если нет, то мы идём к владельцу с вопросами.

Но давайте чуть подробнее. Начнём с классики — виртуальных машин. Мы считаем среднее значение с верхним доверительным интервалом по двум квадратичным отклонениям на периоде в 90 дней. CPU и RAM считаем по-отдельности, затем для группы (или одной VM) берём минимум из двух значений. Если расчёт ведём для группы, то сначала считаем средневзвешенные значения по процессору и памяти, затем берём минимум из них — это и есть потребление.

Зачем минимум? Чтобы исключить ситуацию, при которой процессор загружен полностью, а память простаивает (или наоборот), но ресурс формально считается «потреблённым».

Логика коридоров

Для каждого типа стенда (пром, тест и так далее) и класса критичности автоматизированной системы заданы собственные границы нормальности. В Сбере используются четыре класса критичности: от основных клиентских сервисов до внутренних систем, не взаимодействующих с внешними клиентами.

На уровне сущности в ITSM (фактически — для каждого продукта) мы:

  1. Берём рассчитанные метрики потребления.

  2. Проверяем, попадает ли конкретная VM в свой «Зелёный коридор».

  3. Для подразделения считаем средневзвешенную долю виртуальных машин, прошедших в коридор.

Остальные метрики считаем по схожей логике, но с другим базовым показателем.

Как считаются остальные метрики

Для остальных метрик используется максимум за 90 дней по отношению «использовано/выделено». Это применительно к другим сущностям:

  • Диски VM: максимальное отношение использованного к выделенному за 90 дней.

  • Квоты OSE: максимальное отношение лимитов проекта к квоте проекта за 90 дней.

  • Лимиты OSE: максимальное отношение потребления процессоров и памяти в проекте к лимитам проекта за 90 дней.

  • Квоты DA: максимальное отношение лимитов кластера к квоте кластера за 90 дней (из квоты вычитаем неуправляемую клиентом техническую обвязку — 15% размера кластера).

  • Лимиты DA: максимальное отношение потребления процессоров и памяти кластера к лимитам кластера за 90 дней.

Почему для контейнеризации берём максимумы, а не средние?

На начало 2025 года скважность сбора данных по проектам и кластерам составляла 1 раз в час. При такой частоте среднее значение имеет высокую волатильность. В первом квартале мы довели частоту до одного замера в 15 минут, однако для расчёта средних с доверительными интервалами требуется частота не реже одного раза в минуту, как в виртуализации.

При этом у нас более 8 млн контейнеров, с каждого снимается до восьми сырых метрик каждую минуту. Для хранения хотя бы двух дней таких данных (на случай инцидента) требуется порядка 100 ТБ — это само по себе инфраструктурная задача.

Агрегировать всё на стороне мониторинга тоже нельзя: он перестанет выполнять свою основную функцию и превратится исключительно в «двигатель потребления». Сейчас мы нашли техническое решение этой задачи (об этом выпустим отдельную статью), но в начале 2025 года приняли прагматичное решение: для контейнеризации считать по максимумам.

Детектив на проде: сайдкары и «обогреватели» стоек

Когда мы начали оптимизировать лимиты в Kubernetes, вскрылся пласт проблем, о которых мы даже не подозревали. Сбер — это про безопасность. На каждое приложение навешивается куча «сайдкаров» (proxy, security-агенты, журналирование). Выяснилось, что эта инфраструктурная «обвязка» в некоторых проектах потребляла больше ресурсов, чем само полезное приложение! В итоге пришлось создавать отдельный инженерный стрим, пересматривать лимиты для этих сервисов и проводить кратную оптимизацию. Эффект на масштабе в 8 млн ядер был просто колоссальным.

Конечно, были и те, кто пытался «хакнуть» систему. Как только «Зелёный коридор» начал реально влиять на KPI подразделений, в журналах замелькали странные вещи. Некоторые писали скрипты, которые имитировали нагрузку на процессор («грелки») или искусственно раздували Xmx у Java-машин, чтобы не отдавать квоты по памяти. 

Мы быстро разработали инструменты обнаружения таких аномалий. К чести коллег, эта «партизанская война» длилась недолго. Сейчас все понимают: проще и честнее оптимизировать архитектуру или признать необходимость масштабирования, чем оправдываться за бессмысленный обогрев серверной.

Интеграл эффективности: 80% против 27%

Самый частый вопрос, который нам задают: «Как у вас в отчётах может стоять 80% выполнения целей ЗК, если реальная загрузка железа 27%?».

Тут нет магии или подтасовки. Это двухэтапный процесс.

  1. Этап первый (Зелёный коридор): мы заставляем клиентов эффективно использовать те квоты, которые они уже получили. Если ты взял 100 ядер, а используешь 10 — верни 90. Когда все «сдают лишнее», квоты освобождаются.

  2. Этап второй (уплотнение): на освободившиеся «виртуальные» ресурсы мы сажаем новых клиентов или расширяем старые проекты без закупки нового железа.

В результате мы уже подняли производственное потребление с 27% до 37%. Кажется, что 10% — это мало? Но в пересчёте на сэкономленные средства это сопоставимо с годовой прибылью среднего банка.

Взгляд за горизонт: от процентов к FinOps

Мы не хотим, чтобы «метрика стала целью» (эффект Гудхарта). Поэтому «Зелёный коридор» — это лишь фундамент для перехода к полноценному FinOps.

Что мы строим сейчас:

  • Unit-экономику. Мы хотим точно знать Cost-to-Value — сколько ИТ-денег тратится на обслуживание одного клиента или одной транзакции. Только так можно понять реальную эффективность бизнеса.

  • Managed Inference Platform. Наша собственная разработка для совместного использования GPU-ресурсов. Дорогие видеокарты не должны простаивать, они должны «нарезаться» между проектами в зависимости от текущей нагрузки.

  • DB-as-a-Service. Мы ломаем старый подход «один сервер — одна база». Разработчику проще и быстрее получить контейнер с PostgreSQL, чем ждать развёртывания тяжёлой версии, которая наполовину будет стоять пустой.

Наш идеал — потребление не менее 50% при сохранении всех стандартов надёжности. Это амбициозно, это сложно, но это единственный путь для компании такого масштаба. 

В следующих статьях мы подробнее расскажем о том, как решали проблему сбора метрик (8 млн контейнеров — это вам не шутки) и как наша BI-команда создаёт витрины, которые видят каждое ядро.

А как у вас обстоят дела с «переподпиской» и борьбой за квоты? Пишите в комментариях, обсудим.

ссылка на оригинал статьи https://habr.com/ru/articles/1043194/