Открыть сервис

Service mesh

Service mesh — это выделенный инфраструктурный слой, предназначенный для управления сетевыми взаимодействиями между микросервисами в распределённых приложениях. Он обеспечивает такие функции, как балансировка нагрузки, обнаружение сервисов, маршрутизация трафика, шифрование, аутентификация, авторизация и мониторинг, вынося их из кода приложения в отдельную плоскость управления. Основная цель service mesh — повысить наблюдаемость, безопасность и надёжность межсервисных коммуникаций, не требуя изменений в самом приложении.

История

Предпосылки появления

С развитием архитектуры микросервисов в середине 2010-х годов возникла проблема управления сложными сетевыми взаимодействиями между десятками и сотнями сервисов. Традиционные подходы, такие как библиотеки для балансировки нагрузки (например, Netflix OSS Hystrix, Finagle) или встроенные в код решения, приводили к дублированию логики, привязке к конкретному языку программирования и усложнению разработки. Потребовался универсальный, независимый от языка способ управления трафиком.

Зарождение концепции

Термин «service mesh» впервые был введён в 2016 году разработчиками компании Buoyant, создавшей проект Linkerd. В 2017 году компания Lyft опубликовала проект Envoy, который стал популярным в качестве прокси-сервера для sidecar-развёртывания. В том же году Google и IBM совместно запустили проект Istio, который быстро стал доминирующим решением в этой области. В 2018 году появился проект Consul Connect от HashiCorp, а в 2020 году — Kuma от компании Kong.

Современное состояние

К 2025 году service mesh является зрелой технологией, широко применяемой в крупных корпоративных системах, облачных платформах (Kubernetes, OpenShift) и в проектах с высокой нагрузкой. Основные проекты — Istio, Linkerd, Consul Connect, Kuma, а также специализированные решения, такие как AWS App Mesh и Google Traffic Director. Развитие идёт в сторону упрощения конфигурации, снижения накладных расходов и интеграции с сервисными сетями (например, eBPF).

Архитектура

Плоскость управления (Control Plane)

Плоскость управления — это централизованный компонент, отвечающий за конфигурацию, управление политиками и сбор метрик. Она не участвует непосредственно в обработке запросов, а лишь задаёт правила для плоскости данных. В типичной реализации (например, Istio) плоскость управления включает:

  • Pilot — отвечает за обнаружение сервисов и распределение конфигурации маршрутизации.
  • Mixer (устаревший в Istio 1.5+) — занимался сбором телеметрии и проверкой политик доступа.
  • Citadel — управляет сертификатами и шифрованием (mTLS).
  • Galley — валидирует и обрабатывает конфигурационные данные.

Плоскость данных (Data Plane)

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

  • Балансировка нагрузки (round-robin, least connections, consistent hashing).
  • Маршрутизация по заголовкам, пути, весу.
  • Ретрафик (retry) и тайм-ауты.
  • Разрыв цепи (circuit breaker).
  • Шифрование (mTLS) и аутентификация.
  • Сбор метрик (latency, throughput, ошибки) и распределённая трассировка.

Sidecar-прокси

Sidecar-прокси — это лёгкий прокси-сервер, развёрнутый в одном pod-е (или контейнере) с основным сервисом. Он перехватывает весь входящий и исходящий трафик сервиса, прозрачно для самого приложения. Наиболее популярные прокси:

  • Envoy — высокопроизводительный прокси на C++, используется в Istio, Consul Connect, Kuma.
  • Linkerd-proxy — написан на Rust, оптимизирован для низких накладных расходов.
  • Nginx — в некоторых реализациях (например, NGINX Service Mesh).

Классификация

По модели развёртывания

  • Sidecar — прокси развёрнут рядом с каждым сервисом (наиболее распространённая модель).
  • Node-level — прокси установлен на уровне узла (например, в AWS App Mesh).
  • eBPF-based — использование eBPF для перехвата трафика без sidecar (экспериментальные решения, например, Cilium Service Mesh).

По типу управления

  • Open Source — Istio, Linkerd, Consul Connect, Kuma, Maesh.
  • Проприетарные — AWS App Mesh, Google Traffic Director, Azure Service Mesh (на базе Open Service Mesh), NGINX Service Mesh.

По интеграции с Kubernetes

  • Встроенные — Istio, Linkerd, Kuma, Consul Connect (с поддержкой Kubernetes).
  • Сторонние — решения, работающие поверх Kubernetes, но не требующие его (например, Consul Connect может работать и без Kubernetes).

Основные функции

Балансировка нагрузки

Service mesh автоматически распределяет входящие запросы между экземплярами микросервисов, поддерживая различные алгоритмы (round-robin, least connections, random). Это позволяет избежать перегрузки отдельных инстансов и повысить отказоустойчивость.

Маршрутизация трафика

Поддерживается гибкая маршрутизация на основе правил: по заголовкам HTTP, пути, cookie, версии сервиса (canary-развёртывание), весу (A/B-тестирование). Например, можно направить 10% трафика на новую версию сервиса, а 90% — на старую.

Обнаружение сервисов (Service Discovery)

Плоскость управления автоматически отслеживает состояние всех экземпляров сервисов (их IP-адреса, порты, здоровье) и обновляет конфигурацию плоскости данных. Это избавляет разработчиков от необходимости вручную настраивать DNS или балансировщики.

Безопасность

  • mTLS (mutual TLS) — шифрование трафика между сервисами и взаимная аутентификация.
  • Авторизация — политики доступа на основе ролей (RBAC) или атрибутов (ABAC).
  • Аудит — логирование всех запросов для последующего анализа.

Наблюдаемость (Observability)

  • Метрики — сбор данных о задержках, пропускной способности, количестве ошибок (например, с помощью Prometheus).
  • Трассировка — распределённая трассировка запросов через несколько сервисов (Jaeger, Zipkin).
  • Логирование — структурированные логи запросов и ответов.

Управление отказоустойчивостью

  • Retry — автоматические повторные попытки при временных сбоях.
  • Timeout — ограничение времени ожидания ответа.
  • Circuit breaker — разрыв цепи при превышении порога ошибок.
  • Rate limiting — ограничение частоты запросов.

Применение

Крупные корпоративные системы

Service mesh используется в компаниях с высоконагруженными микросервисными архитектурами, таких как eBay, Airbnb, Netflix, Uber, а также в российских компаниях (например, Яндекс, Сбер, ВКонтакте). Он позволяет централизованно управлять политиками безопасности, маршрутизации и мониторинга, что критически важно для систем с сотнями и тысячами сервисов.

Облачные платформы

Service mesh интегрируется с Kubernetes (K8s) и OpenShift, обеспечивая управление трафиком между pods. Платформы, такие как Google Kubernetes Engine (GKE) и Amazon EKS, предлагают встроенные решения (Traffic Director, App Mesh).

Canary-развёртывания и A/B-тестирование

С помощью service mesh можно безопасно тестировать новые версии сервисов, направляя на них только часть трафика. Это снижает риски при внедрении изменений.

Безопасность в многоарендных средах

Service mesh позволяет изолировать трафик между разными клиентами или командами, применяя политики mTLS и авторизации на уровне сервисов.

Преимущества и недостатки

Преимущества

  • Прозрачность для приложения — разработчики не пишут код для балансировки, безопасности или мониторинга.
  • Универсальность — работает с любыми языками программирования.
  • Централизованное управление — политики можно менять без перезапуска сервисов.
  • Наблюдаемость — единый источник метрик и трассировок.

Недостатки

  • Накладные расходы — каждый запрос проходит через sidecar-прокси, что увеличивает задержку (обычно на 1–5 мс) и потребление ресурсов (CPU, RAM).
  • Сложность — внедрение и настройка service mesh требует знаний о сетях, прокси и Kubernetes.
  • Отладка — из-за дополнительного слоя сложнее диагностировать проблемы.
  • Зависимость от проекта — привязка к конкретному решению (Istio, Linkerd) может усложнить миграцию.

Интересные факты

  • Проект Istio изначально разрабатывался Google и IBM, но в 2022 году был передан в управление CNCF (Cloud Native Computing Foundation).
  • Linkerd — первый service mesh, который получил статус «incubating» в CNCF (2017 год).
  • Envoy, используемый в Istio, был создан в Lyft для управления трафиком между микросервисами и позже стал отдельным проектом CNCF.
  • В 2023 году Google представил проект «Istio Ambient Mesh», который отказывается от sidecar в пользу node-level прокси для снижения накладных расходов.

Критика

Основная критика service mesh связана с его сложностью. Многие команды считают, что для небольших проектов (менее 10–20 микросервисов) внедрение service mesh избыточно и создаёт ненужные накладные расходы. Также отмечается, что sidecar-модель увеличивает потребление ресурсов (каждый sidecar требует отдельного контейнера), что может быть критично для систем с ограниченными ресурсами. Некоторые эксперты критикуют Istio за излишнюю сложность конфигурации и высокий порог входа, в то время как Linkerd хвалят за простоту, но критикуют за меньший функционал.

Источники

  • «What is a service mesh?» — Buoyant (2016)
  • «Istio: Up and Running» — O’Reilly Media (2020)
  • «Service Mesh: A Pattern for Microservices» — CNCF (2018)
  • «Linkerd: The Service Mesh for Kubernetes» — Buoyant (2021)
  • «Envoy Proxy: The Architecture» — Lyft (2017)
  • «Service Mesh: A Comprehensive Guide» — Kubernetes Documentation (2024)
  • «Istio Ambient Mesh: A New Approach» — Google (2023)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →