Облачные вычисления

Microservices в облаке

Netflix запускает 1000+ микросервисов. Uber - 2000+. Как они находят друг друга, защищаются от каскадных отказов и шифруют трафик между собой? Service Discovery, Circuit Breakers, Service Mesh - вот ответ.

  • **Netflix Hystrix:** В 2012 Netflix открыл исходный код Circuit Breaker библиотеки. Hystrix предотвратил каскадные отказы при инцидентах в downstream сервисах. Сейчас Netflix мигрировал на Envoy/Service Mesh.
  • **Lyft:** Создала Envoy в 2016 для управления трафиком между микросервисами. Envoy стал основой для Istio, AWS App Mesh, Google Traffic Director. Решала проблему наблюдаемости трафика между 150+ сервисами.
  • **Uber:** Kong API Gateway управляет 100+ микросервисами. Rate limiting через Redis cluster: 1M+ requests/sec. JWT верификация централизована в Gateway - каждый сервис не реализует auth.

Service Discovery

Service Discovery - механизм обнаружения сервисов в динамическом окружении где IP-адреса меняются при каждом деплое. Client-side: клиент запрашивает реестр и выбирает инстанс (Eureka, Consul). Server-side: load balancer запрашивает реестр и проксирует (AWS ALB + ECS Service Discovery, Kubernetes kube-dns). Netflix Eureka - один из первых service discovery в production, обслуживает тысячи микросервисов Netflix.

В Kubernetes service discovery встроен через kube-dns: `http://service-name.namespace.svc.cluster.local`. Service объект абстрагирует Pod IP адреса. AWS Cloud Map - managed service discovery для ECS, EC2 и Lambda; интегрирован с Route53 для DNS-based discovery.

Почему в Kubernetes используется DNS-based service discovery вместо client-side (как Netflix Eureka)?

Api Gateway

API Gateway - единая точка входа для всех внешних запросов к микросервисам. Берёт на себя: аутентификацию и авторизацию, rate limiting, SSL termination, request routing, response transformation, logging. AWS API Gateway (REST/HTTP/WebSocket), Kong, Nginx, Envoy, AWS ALB + Lambda Authorizer. Uber использует Kong для управления 100+ микросервисами.

AWS API Gateway HTTP API: в 70% дешевле REST API, sub-10ms добавочная латентность. Поддерживает JWT авторизацию из коробки (без Lambda Authorizer). Для WebSocket real-time: API Gateway WebSocket + Lambda/DynamoDB. Kong Gateway - open-source с плагинами для rate limiting, OAuth, tracing.

Какую функцию API Gateway берёт на себя, снимая её с каждого микросервиса?

Circuit Breaker

Circuit Breaker - паттерн защиты от каскадных отказов. Когда downstream сервис деградирует (высокая error rate или latency), Circuit Breaker 'разрывает цепь': запросы к нему немедленно отклоняются с fallback, не ждут таймаута. Состояния: Closed (нормальная работа), Open (запросы блокируются), Half-Open (тестируем восстановление). Netflix Hystrix (deprecated), Resilience4j, Polly (.NET), Envoy built-in.

Bulkhead паттерн (ещё один инструмент resilience): изоляция thread pools для разных downstream сервисов. Если сервис А тормозит, его thread pool заполняется, но не блокирует thread pool сервиса Б. Авиационная аналогия: переборки корабля предотвращают затопление при пробоине одного отсека.

Circuit Breaker в состоянии OPEN делает что с входящими запросами?

Mesh

Service Mesh - инфраструктурный слой для управления коммуникацией между сервисами. Sidecar proxy (Envoy) перехватывает весь трафик Pod'а и реализует: mTLS, Circuit Breaking, Retries, Rate Limiting, Observability - без изменений в коде. Istio (Google), Linkerd, Consul Connect. AWS App Mesh использует Envoy. Lyft создала Envoy и открыла его в 2016.

eBPF-based Service Mesh (Cilium, Cilium Service Mesh) - новое поколение без sidecar. eBPF работает в Linux kernel: меньше latency overhead (~0.1ms vs ~1ms для sidecar), меньше memory per Pod (~10MB vs ~60MB Envoy). Istio Ambient Mode (2023) - режим без sidecar через shared node-level proxy.

Главное преимущество Service Mesh (Istio/Linkerd) перед реализацией Circuit Breaking в коде каждого сервиса:

Ключевые идеи

  • **Service Discovery:** Kubernetes kube-dns: `service-name.namespace.svc.cluster.local`. AWS Cloud Map для ECS. DNS-based discovery - stable endpoint, Pod IP меняются.
  • **API Gateway:** Единая точка входа. Централизует: JWT auth, rate limiting, SSL, routing, CORS. AWS HTTP API (дешевле, JWT из коробки), Kong (open-source с плагинами).
  • **Circuit Breaker + Service Mesh:** CB (opossum, Resilience4j) защищает от каскадных отказов через fail-fast. Service Mesh (Istio) - CB, retries, mTLS без кода в сервисах. eBPF mesh (Cilium) - без sidecar overhead.

Связанные темы

Микросервисная архитектура в облаке требует наблюдаемости и оркестрации:

  • Distributed Tracing (Jaeger, OpenTelemetry) — Service Mesh (Istio) автоматически генерирует spans для каждого HTTP вызова. OpenTelemetry SDK в сервисах добавляет бизнес-контекст к автоматическим spans
  • Kubernetes Deployments и Rolling Updates — Circuit Breaker + Istio outlierDetection защищают от bad pods при rolling update: деградирующие поды автоматически исключаются из балансировки
  • Event-Driven Architecture (SQS, Kinesis) — Circuit Breaker применим к синхронным вызовам. Асинхронный через SQS/Kinesis - альтернативный паттерн для decoupling без прямых HTTP зависимостей

Вопросы для размышления

  • Как настроить Circuit Breaker порог для сервиса с естественной высокой error rate (например, 404 для несуществующих ресурсов)?
  • Стоит ли использовать Service Mesh для кластера с 5-10 микросервисами, или overhead не оправдан?
  • Как организовать graceful degradation: при недоступности inventory service показывать 'в наличии' или 'нет в наличии'?

Связанные уроки

  • devops-04
Microservices в облаке

0

1

Войти