DevOps

Reliability Engineering at Scale

Amazon Prime Day 2018: за первые 2 часа технические проблемы привели к $72M потерь. После этого Amazon ускорил внедрение cell architecture и chaos engineering. Netflix Chaos Monkey убивает production серверы каждый рабочий день - это не паранойя, это единственный способ убедиться что система действительно resilient, а не просто должна быть resilient по документации.

  • **Netflix** с 2011 года запускает Chaos Monkey каждый рабочий день - случайно terminates production EC2 инстансы; инциденты стали настолько редкими что новые инженеры часто не замечают что Chaos Monkey активен
  • **Stripe** использует cell architecture с 2016 года - при инциденте в одной cell (15% merchants) остальные 85% не испытывают никаких проблем; rolling deployment cell за cell исключил production incidents от деплоев
  • **Google** с 2019 года публично описал свои chaos experiments (DiRT - Disaster Recovery Testing) - ежегодные учения когда команды симулируют потерю целого ДЦ и проверяют действительно ли failover работает как задокументировано

Cell Architecture

Cell Architecture - паттерн разбиения системы на независимые 'ячейки' (cells), каждая из которых обслуживает subset пользователей. Ячейки изолированы: сбой в cell-3 не затрагивает cell-1 и cell-2. Каждая cell - полная копия системы (compute + database + cache). Routing происходит на уровне entry point (DNS, load balancer) по user ID или tenant ID.

Примеры cell размера: Stripe - cell обслуживает N merchant accounts; DoorDash - cell обслуживает конкретный city/region. Преимущества: blast radius ограничен одной cell (~5-10% пользователей), деплои катятся cell за cell (canary без изменения трафика), compliance (EU данные в EU cells). Недостаток: N-кратное увеличение operational complexity.

Главное преимущество cell architecture перед обычным horizontal scaling?

Blast Radius Reduction

Blast radius - масштаб ущерба при сбое компонента. Reduction techniques: circuit breakers (не распространять сбой downstream), bulkheads (изолированные thread pools для разных downstream), timeout + retry с exponential backoff, graceful degradation (показывать cached/partial данные вместо error). Цель - сделать сбой isolated, а не cascading.

Graceful degradation примеры: Netflix при сбое recommendation engine показывает популярный контент вместо error; Amazon при сбое ratings service показывает товары без рейтингов. Feature flags позволяют быстро выключить конкретную функцию без deploy. Bulkhead pattern: payment и search имеют отдельные connection pools - перегруженный search не займёт соединения payment.

Что такое bulkhead pattern в контексте микросервисов?

Chaos Engineering

Chaos Engineering - намеренное внесение отказов в production (или production-like) системы для проверки устойчивости. Принципы: начинать с малого (отдельный сервис, не весь регион), иметь monitoring и автоматическую остановку, формулировать гипотезу ('если сервис X упадёт, система покажет degraded вместо 500'). Netflix Chaos Monkey - пионер: случайно убивает production EC2 инстансы.

Инструменты: AWS Fault Injection Simulator (FIS) - managed chaos в AWS: terminate EC2, inject network latency, throttle SSM, остановить AZ. Chaos Mesh (CNCF) - kubernetes-native: kill pods, inject network partition, memory pressure, CPU stress. Gremlin - enterprise managed. Литургия chaos experiment: Steady State → Hypothesis → Inject Failure → Observe → Revert → Report.

Зачем проводить chaos experiments в production, а не только в staging?

Multi-Region Deployment

Multi-region deployment - запуск системы в нескольких AWS/GCP/Azure регионах для geographical redundancy и low latency. Паттерны: Active-Active (трафик в оба региона, требует глобальная БД или репликация), Active-Passive (standby регион без трафика, failover при сбое primary). Active-Active сложнее но даёт лучший RTO/RPO.

Ключевые метрики: RTO (Recovery Time Objective) - максимальное допустимое время восстановления; RPO (Recovery Point Objective) - максимально допустимая потеря данных. Active-Passive с CockroachDB или Aurora Global Database: RPO < 1s, RTO < 1min. Synchronous cross-region replication: RPO = 0 но добавляет 50-200ms latency к каждому write.

Multi-region автоматически означает 99.99% availability

Multi-region устраняет single region outage, но не все причины недоступности: баги в коде деплоятся во все регионы одновременно, неправильный DNS failover может быть медленнее чем RTO цель, данные могут быть inconsistent при active-active без careful conflict resolution

AWS us-east-1 outage в 2021 году затронул сервисы которые называли себя multi-region, потому что управляющая плоскость (CloudFormation, IAM) была в us-east-1

Что означает RPO = 1 минута в контексте multi-region disaster recovery?

Итоги

  • **Cell Architecture** изолирует пользователей в независимые ячейки - blast radius ограничен N% пользователей; деплои катятся cell за cell для безопасного rollout
  • **Blast Radius Reduction** через circuit breakers, bulkheads и graceful degradation - сбой компонента не каскадирует, система деградирует контролируемо
  • **Chaos Engineering + Multi-Region** - проверка устойчивости через намеренные отказы в production; Aurora Global Database даёт RPO < 1s и RTO < 1min для cross-region failover

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

Reliability engineering опирается на observability и incident management:

  • On-Call и Incident Management — Chaos experiments требуют чёткого incident response процесса - chaos без runbooks опасен
  • CDN и Edge Computing — Cloudflare geo-routing и Load Balancing - первый уровень multi-region failover без изменения DNS TTL

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

  • При каком размере компании и нагрузке cell architecture начинает окупать операционную сложность?
  • Как организовать первый chaos experiment в команде которая никогда этого не делала и боится?
  • Aurora Global Database добавляет latency к каждому write при synchronous replication. Как балансировать RPO и performance?

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

  • dist-03-fallacies
Reliability Engineering at Scale

0

1

Войти