Netflix → Platform Console: федеративная платформа для Full Cycle Developers
Как Netflix объединил десятки инструментов в единую консоль через GraphQL Federation и дизайн-систему Hawkins
Первоисточник
Unifying the Netflix Engineering Experience with a Federated Platform ConsoleBrian Leathem, 2022
Контекст: Full Cycle Developers и «мощёные дороги»
Netflix строит свою инженерную культуру вокруг принципа «operate what you build». Full Cycle Developer в Netflix отвечает за свой сервис от написания кода до мониторинга в продакшене. Компания не делит инженеров на тех, кто пишет код, и тех, кто его эксплуатирует. Каждый инженер владеет полным циклом.
Такой подход требует инструментов. Netflix вкладывает ресурсы в «paved roads» (мощёные дороги): набор инструментов и практик, которые централизованная платформенная команда поддерживает и развивает — классический пример IDP в действии. Компания не заставляет инженеров использовать paved roads, но делает работу с ними настолько удобной, что альтернативы проигрывают по всем параметрам.
Вот масштаб: централизованная платформенная команда Netflix насчитывает 150 человек, из которых 80 инженеров занимаются продуктивностью разработчиков. Эти люди отвечают за внутренний цикл разработки: сборку, тесты, CI, управление зависимостями и общий разработческий опыт.
Проблема: слишком много инструментов
У Netflix богатый арсенал внутренних инструментов. Spinnaker управляет деплойментами. Titus оркестрирует контейнеры. Jenkins собирает код. Внутренние системы алертинга отслеживают метрики. Bitbucket (позже GitHub) хранит код. И ещё десятки специализированных инструментов для конкретных задач.
Full Cycle Developer каждый день открывал несколько из этих инструментов. Код ревью в одном месте, статус деплоя в другом, алерты в третьем, логи в четвёртом. Каждый инструмент со своим интерфейсом, своей навигацией, своей моделью данных. Контекст между инструментами инженер держал в голове — типичная проблема, которую описывает модель Team Topologies через призму когнитивной перегрузки.
Brian Leathem из команды Platform Experiences and Design (PXD) описал проблему на PlatformCon 2022: разработчик хочет понять, что происходит с его сервисом. Для этого ему нужно проверить статус CI-билда, посмотреть пайплайн деплоя, глянуть метрики в продакшене, проверить алерты. Четыре инструмента, четыре вкладки в браузере, четыре переключения контекста.
Решение: федеративная платформенная консоль
Команда PXD построила платформенную консоль как единую точку входа для инженеров. Ключевое архитектурное решение: федерация на всех уровнях.
Федерация API через GraphQL
Netflix использовал GraphQL Federation для объединения данных из разных инструментов. Каждая команда, которая владеет инструментом (Spinnaker, Titus, CI-система), создаёт свой Domain Graph Service (DGS). Этот сервис предоставляет данные в виде части единого GraphQL-графа. Федеративный gateway собирает граф из всех DGS и предоставляет его клиентам.
Инженер делает один GraphQL-запрос: «покажи мне всё о сервисе X». Gateway собирает данные из DGS сборки, DGS деплоя, DGS мониторинга и возвращает полную картину. Ни одна централизованная команда не владеет всеми данными. Каждая команда-владелец инструмента предоставляет свой кусок графа и поддерживает его сама.
Федерация UI через Backstage
Для фронтенда Netflix взял Backstage как основу. Плагинная архитектура Backstage позволила командам добавлять свои UI-компоненты в консоль без координации с централизованной командой. Каждая команда отвечает за свой плагин: команда Spinnaker строит плагин деплоя, команда CI строит плагин сборки, команда мониторинга строит плагин алертов.
Федерация дизайна через Hawkins
Hawkins — это внутренняя дизайн-система Netflix с более чем 80 приложениями. PXD команда создала Hawkins как набор переиспользуемых, конфигурируемых и композируемых компонентов. Каждая команда, которая строит плагин для консоли, использует компоненты из Hawkins. Пользователь видит единый визуальный язык, хотя за разными частями интерфейса стоят разные команды.
Коллекции: группировка сервисов
Команда PXD ввела концепцию «коллекций»: инженер группирует свои сервисы и видит их статус вместе. Вместо того чтобы проверять каждый сервис по отдельности, инженер открывает свою коллекцию и оценивает здоровье всего флота на одном экране.
Чем этот подход отличается
Netflix выбрал федеративную архитектуру вместо централизованной. Spotify построил Backstage как единую платформу, где централизованная команда контролирует основной опыт. Netflix дал каждой команде-владельцу инструмента возможность предоставлять свои данные и UI самостоятельно.
У такого подхода есть цена. Координация сложнее: нужно следить за консистентностью GraphQL-схемы, за соответствием UI-компонентов дизайн-системе, за производительностью федеративного gateway. Но этот подход масштабируется с ростом организации. Централизованная команда PXD не становится бутылочным горлышком, потому что каждая команда управляет своим куском платформы.
Уроки
Федерация работает при наличии контрактов. Netflix не просто дал командам свободу строить плагины. Компания установила контракты: GraphQL-схемы для API, Hawkins-компоненты для UI, документацию по стандартам интеграции. Без контрактов федерация превращается в хаос.
Дизайн-система окупается на масштабе. Hawkins стоил инвестиций: команда дизайнеров создала и поддерживает библиотеку компонентов. На масштабе 80+ приложений эта инвестиция многократно окупается через консистентный пользовательский опыт и скорость разработки новых плагинов.
Paved roads сильнее мандатов. Netflix не запрещает инженерам использовать собственные инструменты. Но когда платформенная консоль позволяет увидеть все сервисы, деплойменты и алерты на одном экране за один клик, инженеры переходят на неё сами. Принуждение заменяет удобство.
150 человек в платформенной команде для Netflix оправданы. Но это Netflix с его масштабом и культурой full cycle development. Компании меньшего размера могут достичь похожих результатов с командой в 5-10 человек, используя Backstage и готовые плагины вместо построения федеративной архитектуры с нуля.