Облачные вычисления
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 показывать 'в наличии' или 'нет в наличии'?