Netflix построила Service Topology: живая карта микросервисов
В распределённой системе из тысяч микросервисов найти источник сбоя — всё равно что собирать пазл в темноте. Netflix решила проблему, построив живую карту зависимостей в реальном времени. Разбираем, из чего она состоит и какие уроки можно перенести в свою архитектуру.
Если вы хоть раз отлаживали микросервис ночью, знаете главный вопрос: это мой сервис сломался или его уронило что-то выше по течению? В системе из тысяч сервисов ответ приходится искать по кускам — метрики, логи и трейсы показывают симптомы, но не дают единой карту зависимостей. Netflix столкнулась с этой же болью и построила инструмент под названием Service Topology, который рисует живую карту зависимостей в реальном времени.
Service Topology — это не статическая схема из вики, а динамическая карта связей между сервисами. Она обновляется по мере того, как меняется трафик, появляются новые зависимости или старые исчезают. Карта показывает не только «кто с кем говорит», но и контекст: уровень доступности, бизнес-домен, владельца и текущее состояние здоровья.
Если тема микросервисов для вас новая, начните с базового разбора «Что такое микросервисы», а если выбираете архитектуру для проекта — сравните варианты в материале «Монолит или микросервисы». Авторский разбор внутреннего устройства Netflix читайте в статье «Разработчик изучал систему рекомендаций Netflix месяцами».
Ключевые выводы
- Netflix объединила три источника данных:
eBPF-сетевые потоки,IPC-метрики и распределённые трейсы. - Каждый источник строит свой граф; общий вид получается параллельным слиянием слоёв.
- Карта обновляется почти в реальном времени и отвечает на запросы быстрее секунды.
- Инженеры используют её для поиска причин сбоев, оценки зоны поражения и планирования изменений.
- Подход можно перенести в любую распределённую систему, где нужно понимать зависимости.
Почему обычной наблюдаемости мало
Традиционные инструменты наблюдаемости показывают фрагменты картины. Метрики говорят, что что-то болит. Логи рассказывают, что конкретно произошло в одном сервисе. Трейсы прослеживают путь отдельного запроса. Но ни один из этих сигналов не показывает полную топологию зависимостей — ту самую основу, на которой держится распределённая архитектуры.
Инженеру в три часа ночи приходится мысленно склеивать данные из разных источников. Это медленно, чревато ошибками и добавляет стресса. Netflix проанализировала тысячи обращений в поддержку за четыре года и увидела повторяющиеся вопросы: кто мои upstream и downstream, что упадёт вместе со мной, почему сервис отображается в панели мониторинга как Unknown (неизвестный сервис). Ответы на них требовали единого представления о зависимостях.
Три источника данных Service Topology
Главный вывод Netflix: ни один источник не рассказывает всю историю. Поэтому система строит три независимых графа и объединяет их по запросу.
Сетевые потоки eBPF
На сетевом уровне Netflix собирает потоки ядра через eBPF. Это даёт полноту: сюда попадают все соединения, независимо от того, инструментирован сервис или нет. Слой показывает связи между кластерами и приложениями такими, какими они есть на самом деле. Недостаток — не хватает прикладного контекста: видно, что сервис А достучался до IP-адреса сервиса Б, но неизвестно, какой конкретно endpoint вызывался.
IPC-метрики
На прикладном уровне собираются метрики межпроцессного взаимодействия. Когда сервис обращается к другому через gRPC, GraphQL или REST, он фиксирует endpoint, ошибки, задержки и протокол. Этот слой даёт детали, которых нет у сетевого: какой именно путь вызывается и с какой вероятностью ошибки. Ограничение очевидно: если сервис не отправляет метрики, его вызовов здесь не будет.
Распределённые трейсы
Третий слой — трейсинг запросов от начала до конца. Он показывает не «может ли сервис А позвонить сервису Б», а «звонил ли он в рамках этого конкретного пользовательского запроса». Это помогает увидеть поведение во время выполнения, ветвления, фича-флаги и редкие пути. Поскольку трейсы собирают выборочно, редкие сценарии могут не попасть в агрегированный вид.
Когда инженер запрашивает общую картину, система обходит все три графа параллельно и сливает результаты. Сеть обеспечивает полноту, IPC добавляет контекст, трейсы показывают реальное поведение. Каждый источник компенсирует слабости остальных.
Как собирают Service Topology
Приём и обработка потоков
За кулисами работает конвейер, который держит миллионы событий в секунду. Потоки сетевых логов читаются из Kafka в нескольких регионах AWS. Для обработки Netflix использует Apache Pekko Streams — форк Akka, который разбивает нагрузку по группам автомасштабирования и сам управляет обратным давлением.
Восстановление прямых связей
Сетевой лог показывает отдельные сетевые прыжки: например, приложение → балансировщик → приложение или приложение → NAT-шлюз → приложение. Чтобы получить настоящие связи, запускается трёхступенчатая агрегация. Первая стадия забирает сырые записи, вторая распознаёт посредников и восстанавливает прямые пути между приложениями, третья финализирует агрегаты и добавляет статус здоровья. Такой градуированный подход раскидывает нагрузку и не даёт горячим узлам уронить весь конвейер.
Готовая топология хранится в графовой базе Netflix — абстракции поверх распределённого хранилища «ключ — значение». Она заточена под быстрый обход графа в несколько хопов. Поверх базы — gRPC-API с фильтрами по уровню доступности и домену, постраничным выводом больших выборок и ответом менее чем за секунду.
Хранение и API
Отдельно стоит возможность «путешествия во времени». Система не хранит каждый момент отдельно, а накапливает данные в скользящих окнах. Это позволяет спросить «как выглядела топология вчера в полночь» без взрыва объёмов хранения.
Что даёт инженерам
Интерфейс и API дают инженерам несколько рабочих сценариев — от ручного расследования до автоматических проверок.
- Видеть upstream и downstream для любого сервиса с фильтрами по уровню доступности и домену.
- Переключаться между единым видом и отдельными слоями: только сеть, только IPC или только трейсы.
- Одним кликом переходить от узла топологии к логам, трейсам и детальным метрикам.
- Оценивать зону поражения перед отключением сервиса на обслуживание и понимать, кого уведомлять.
- Накладывать статус здоровья на граф и быстро понимать, локальная ли это проблема или каскадный сбой.
- Обращаться к топологии программно — например, чтобы автоматически проверять классификацию доступности критичных сервисов.
- Смотреть историю зависимостей и находить, что изменилось перед инцидентом.
Как перенести в свою систему
Не каждая компания работает в масштабе Netflix, но логика подхода универсальна. Если у вас десятки сервисов, уже появляется эффект «тысячи кусочков пазла». Начать можно с малого: собрать список зависимостей из существующих источников и периодически сверять его с реальным трафиком.
Чек-лист для первых шагов:
1. Выберите один настоящий источник связей: логи балансировщика, агент на хосте или метрики вызовов.
2. Не пытайтесь сразу построить идеальную модель — начните с автоматически обнаруженных рёбер.
3. Добавьте контекст: владельца сервиса, уровень критичности и домен.
4. Сделайте карту доступной программно, а не только в интерфейсе — инцидент-боты и скрипты будут благодарны.
5. Проверяйте актуальность: в динамичной среде карты, устаревшие на несколько часов, быстро теряют ценность.
Для иллюстрации вот минимальный скрипт, который строит рёбра графа из логов балансировщика:
Часто задаваемые вопросы
Часто задаваемые вопросы
Что такое Service Topology?
Это динамическая карта зависимостей между сервисами, которая обновляется по реальному трафику и показывает не только связи, но и контекст: владельцев, уровни доступности и состояние здоровья.
Почему для построения карты нужно три источника?
Каждый источник компенсирует ограничения остальных.
Что значит «живая» карта?
Карта не рисуется разово и не хранится в документации. Она обновляется по мере появления новых сервисов, изменения трафика и исчезновения старых зависимостей.
Как это помогает при инциденте?
Инженер может за секунды увидеть, кто зависит от упавшего сервиса и от чего зависит он сам, а также наложить статус здоровья на граф, чтобы найти источник сбоя.
Какие технологии использует Netflix?
eBPF для сетевых потоков, IPC-метрики от инструментированных сервисов, распределённые трейсы, Kafka, Apache Pekko Streams и собственная графовая база поверх хранилища «ключ — значение».
Выводы
Service Topology — не просто красивая картинка для панели мониторинга. Это операционная основа, которая ускоряет расследования, снижает риск изменений и даёт автоматическим системам общую картину инфраструктуры. Netflix называет её knowledge graph foundation — фундаментом для интеллектуальной автоматизации, в том числе для автоматического поиска первопричины сбоев.
Service topology provides the knowledge graph foundation that makes this kind of intelligent automation possible.
Для российских команд, где инфраструктура тоже стремительно усложняется, главный урок в другом: не ждите идеальной полноты данных. Начните с одного реального источника, добавьте контекст, сделайте карту программно доступной — и она начнёт приносить пользу раньше, чем вы построите «полноценную» систему.