Перейти к основному содержимому

Cost attribution в микросервисах: кто платит за auth?

· 9 мин. чтения
Artur Pan
CTO & Co-Founder at PanDev

Платформенная команда из 6 инженеров стоит $156K в квартал. Они держат auth, observability, внутренний API gateway, общий кэш и деплой-пайплайн. Восемь продуктовых команд используют эти сервисы каждый день. Спросите CFO, кто за это платит — ответ «центральный R&D». Спросите тимлида платформы, кто это потребляет — ответ «все одинаково». Оба не правы, и зазор между ними — это место, где инжиниринг-финансы каждый год теряют шестизначные суммы на искажённых решениях.

Adrian Cockcroft изначально сформулировал этот аргумент, когда Netflix дробился на микросервисы: общая инфраструктура имеет unit cost, и unit cost должен следовать за запросом. CNCF FinOps Working Group в отчёте 2024 State of FinOps for Engineering нашли, что меньше 24% микросервисных организаций аллоцируют время платформенной команды обратно на команды-потребителей. Остальные 76% считают платформу overhead — то есть команда, потребляющая 41% запросов, получает тот же счёт, что и команда с 1%.

Контр-интуитивный тезис​

Большинство дискуссий по инжиниринг-финансам останавливаются на «платформа — это overhead». Именно из-за этого платформенные команды хронически недоукомплектованы, а продуктовые — хронически беспечны в том, что они от них требуют. Реальный chargeback говорит: каждая команда-потребитель платит за то время платформы, которое она реально съела. Запустите shadow chargeback на полгода, потом сделайте его реальным — и разговор по бюджету изменится за один финансовый год.

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

Три модели chargeback​

Atlassian в State of DevOps 2024 выяснили, что средняя продуктовая команда в микросервисах зависит от 5.3 платформенных сервисов и кидает в платформу 17 тикетов в квартал. Вот эту нагрузку и нужно аллоцировать. Три варианта:

МодельЧто измеряемТочностьОперационная стоимость
Flat-taxСтоимость платформы ÷ число команд-потребителейНизкаяНикакой
ProportionalТикеты платформы, привязанные к команде-потребителюВысокаяСредняя (дисциплина тегирования)
ConsumptionAPI-вызовы / запросы / события от команды-потребителяВысочайшаяВысокая (телеметрия)

Flat-tax — это то, к чему по умолчанию приходят CFO, когда их вынуждают распределять. И это почти специально неверная модель. Proportional и consumption обе работают, но требуют от организации разного.

Flat-tax: просто, часто несправедливо​

Берём квартальную стоимость платформы ($156K), делим на 8 команд, шлём каждой счёт на $19.5K. Готово за пять минут.

Проблема: команда A создала 35% тикетов и сделала 41% API-вызовов. Команда H — два тикета и 1% вызовов. Обе платят $19.5K. Команда H субсидирует команду A примерно на $15K в квартал. У команды A нет ни одного стимула оптимизировать использование платформы — стоимость фиксирована независимо от поведения.

Flat-tax уместна ровно в одной ситуации: когда разброс потребления между командами действительно мал (все используют платформу примерно одинаково) и когда chargeback нужен ради бухгалтерской чистоты, а не ради поведенческого сигнала. На практике это редкость.

Proportional: по числу Jira-тикетов​

Считаем тикеты платформенной команды, привязанные к каждой команде-потребителю за период. Аллоцируем стоимость пропорционально. Команда A драйвила 35% тикетов — команда A платит 35% от $156K = $54.6K.

Это работает, потому что время платформенных инженеров — связывающий ресурс. Будь это однострочный конфиг или двухнедельная миграция, единица потребления — инженеро-час. Тикеты приближают часы с точностью ±20%, если команда работает в более-менее однородных по размеру задачах.

Операционная стоимость реальна. Каждый тикет платформы должен иметь поле consumer_team или label. Без этого модель деградирует до flat-tax под другим именем. Механику issue-level атрибуции мы разбирали в Cost per Jira Ticket: Trace Spend to a Single Issue — proportional chargeback это просто кросс-командная свёртка той же примитивной операции.

Consumption: по API-вызовам или запросам​

Инструментируем платформенный сервис. Считаем запросы по командам-потребителям. Аллоцируем стоимость пропорционально потреблению. Если auth-сервис обрабатывает 10M запросов в квартал, а команда A сделала 4.1M — её доля 41% × $156K = $63.9K.

Это самая точная модель, потому что она измеряет ровно то, что сервис делает. И самая дорогая в настройке. Нужно консистентное тегирование команды на API-границе (X-Team-ID header, service-mesh label, OAuth client claim — выберите одно и форсайте). Без этого вы не отличите 10K запросов от order-сервиса команды A от такого же количества от recommendation-сервиса команды H.

Consumption-chargeback также вытаскивает наружу проблемы, которые flat-tax не видит: команда со сломанной retry-логикой, дубасящая платформу в 5 раз больше, чем нужно, платит в 5 раз больше. Замечает, чинит баг, нагрузка падает. Сигнал ровно тот, что нужен.

Разбор: $156K платформы на 8 продуктовых команд​

Реальная команда платформы — 6 инженеров, $52K loaded cost в месяц, $156K в квартал. Восемь продуктовых команд, обозначим A–H по убыванию зависимости от платформы. Три месяца данных. Вот что каждая команда должна по каждой модели.

КомандаТикетыДоля APIFlat-taxProportionalConsumption
A35%41%$19.5K$54.6K$63.9K
B22%19%$19.5K$34.3K$29.6K
C18%14%$19.5K$28.1K$21.8K
D9%11%$19.5K$14.0K$17.2K
E7%7%$19.5K$10.9K$10.9K
F5%4%$19.5K$7.8K$6.2K
G3%3%$19.5K$4.7K$4.7K
H1%1%$19.5K$1.6K$1.6K
Итого100%100%$156K$156K$156K

Сравнение моделей chargeback: счёт команды A при flat-tax, proportional и consumption Один и тот же квартал, та же платформа, та же команда A. Flat-tax счёт примерно в три раза меньше того, что выставила бы consumption-модель.

Три наблюдения, которые таблица заставляет сделать.

Команда A сильно зависит от платформы. По proportional платит $54.6K, по consumption — $63.9K. Их доля API (41%) обгоняет долю тикетов (35%) — обычно это значит, что они автоматизировали использование платформы: меньше тикетов на единицу извлечённой ценности. По flat-tax платят $19.5K и выглядят как все. Тимлид платформы понятия не имеет, что A — самый тяжёлый клиент.

Команда H платит в 12 раз больше своей реальной доли. По flat-tax — $19.5K за 1% потребления. Это $17.9K трансфер от H к среднему. Если H — это маленький продуктовый направление, пытающееся доказать unit-экономику, оно решит, что у них сломанная база затрат. База не сломана. Аллокация сломана.

Proportional и consumption не всегда совпадают. Команда B драйвила 22% тикетов, но только 19% вызовов. Их тикеты тяжелее среднего — меньше запросов, больше штучной работы. Proportional выставляет им больше ($34.3K vs $29.6K). Обе цифры защитимы. Выбирайте модель под то поведение, которое хотите видеть: хотите, чтобы меньше просили — proportional; хотите, чтобы меньше дёргали — consumption.

Как PanDev Metrics реализует proportional и consumption​

Большинство команд тормозят на proportional chargeback из-за неровной Jira-гигиены. PanDev считает per-ticket стоимость через mv_activity_total_user_issue_daily — материализованное представление, агрегирующее секунды IDE-активности по пользователю, Jira issue и дню. Свёртка по полю consumer_team тикета — и у вас есть proportional cost без ручной арифметики со ставками.

Кросс-командная аллокация работает через членство в gitProject в user_departments. Когда инженер платформы коммитит в репозиторий, принадлежащий департаменту команды A, время автоматически отправляется в chargeback-бакет команды A. Teams Widget на /dashboard/finances показывает это как radar chart — один взгляд на то, какая команда-потребитель сколько платформенной работы спровоцировала за период.

Для consumption-chargeback платформенный сервис всё равно придётся инструментировать самим (PanDev не собирает телеметрию API-gateway). Что PanDev даёт — это математика cost-per-engineer-hour, которая превращает доли потребления в реальные доллары; конверсия «команда A сделала 41% запросов» → «команда A должна $63.9K» консистентна по всем командам с одной loaded rate. Подложку по бюджетной математике мы разбирали в Bottom-up Engineering Budget: From Rate to Annual P&L.

Когда chargeback работает, а когда это театр​

Chargeback работает только если у команды-потребителя есть бюджетная власть над тем, что она тратит. Если платформа финансируется централизованно и продуктовая команда не может отказаться — счёт это просто отчёт. Интересный, но не инструмент решения. Команда читает цифру, рычага у неё нет, а команда платформы тоже не может конвертировать данные в headcount.

Лекарство — shadow chargeback. Гоните модель полгода. Шлите командам phantom-счета. Смотрите, что происходит. Большинство потребителей корректируется добровольно ещё до того, как chargeback станет реальным — никто не хочет быть командой, которая драйвит 41% стоимости платформы, когда дашборд видит VP. Поведенческий сигнал работает, даже когда финансовый трансфер не работает.

Делайте его реальным после того, как организация приняла цифры как справедливые. Реальный chargeback означает, что у команд-потребителей есть бюджетная строка на платформу в их P&L и они могут выбрать тратить больше (просить больше платформенной работы) или меньше (строить альтернативу in-house). Это и есть тот разговор, который инжиниринг-финансы должны включать.

Чего данные не скажут​

Цифра chargeback говорит, кто заплатил. Она не говорит, правильно ли укомплектована платформенная команда. Тяжёлый потребитель (команда A) может быть знаком, что платформа делает ровно то, что должна — даёт leverage. А может быть знаком, что платформа построила не ту абстракцию, и команда A вынуждена обходить её через дорогие workaround-ы. Цифра одна, диагнозы противоположные.

Наша IDE-телеметрия показывает инженерное время. Она не показывает, родило ли это время правильные результаты. Мы честно про лимит: chargeback подсвечивает стоимость, не ценность. Парьте chargeback-вид с удовлетворённостью команд-потребителей и трендом инцидентов платформы перед выводами о её здоровье.

Второй лимит: общие сервисы, которые реально являются общественным благом (security review, сбор SOC2-доказательств, compliance), должны быть flat-tax. Аллоцировать security review по числу тикетов — создавать порочный стимул проскочить ревью. Часть выхлопа платформы недискреционна, и chargeback здесь — не тот инструмент. Прежде чем выбирать модель, поделите платформенные сервисы на discretionary vs mandatory.

Что отгрузить в следующем квартале​

Запустите proportional shadow первым. Это самая дешёвая модель для старта — Jira-данные уже есть, нужно только добавить label consumer_team к платформенным тикетам. Три месяца phantom-счетов скажут, реален ли разброс потребления (обычно да) и являются ли самые тяжёлые потребители теми, кого вы ожидали (часто нет). Когда цифры перестают удивлять — включайте финансовый трансфер и смотрите, как меняется поведение. Atlassian-исследование показывает, что объём тикетов в платформу падает на 12-18% в первые два квартала после реального chargeback — не потому, что спрос исчез, а потому что потребители расставили приоритеты на том, что им реально нужно.

Это падение и есть весь смысл упражнения. Стоимость платформы не изменилась. Её leverage — изменился.

Связанные материалы​

Готовы увидеть метрики своей команды?

30-минутная персональная демонстрация. Покажем как PanDev Metrics решает задачи именно вашей команды.

Забронировать демо