Курс обучения SRE

Надежность — это не отсутствие сбоев. Это способность системы, команды и человека вместе подняться после падения, переосмыслить, перестроить и идти дальше — с новыми правилами игры, где человеческая уязвимость не угроза, а часть уравнения

Паттерны надежности с примерами

1. Circuit Breaker (Автоматический выключатель)

Суть: Защищает систему от повторных сбоев, временно блокируя запросы к неработающему сервису.
Пример: Если платежный шлюз перестает отвечать, Circuit Breaker блокирует новые запросы к нему на 30 секунд, чтобы избежать перегрузки. За это время сервис может восстановиться, а клиенты получают понятную ошибку вместо долгого ожидания.

2. Sidecar (Сайдкар)

Суть: Вынос вспомогательных функций (балансировка, шифрование) в отдельный контейнер рядом с основным сервисом.
Пример: В Kubernetes сайдкар Envoy обрабатывает TLS-шифрование для микросервиса, освобождая разработчиков от внедрения криптографии в код приложения.

3. Exponential Backoff (Экспоненциальная задержка)

Суть: Увеличение интервалов между повторными запросами при ошибках.
Пример: Мобильное приложение при потере связи ждет 1 сек, затем 2, 4, 8 сек и т.д., снижая нагрузку на сервер и экономя заряд батареи.

4. Partitioning (Шардирование)

Суть: Разделение данных на независимые части для повышения производительности.
Пример: База данных соцсети делится на шарды по странам: пользователи из ЕС обращаются к европейскому шарду, что ускоряет доступ и снижает задержки.

5. Fail Static (Статический отказ)

Суть: Ограничение ресурсов для предотвращения коллапса при перегрузке.
Пример: Веб-сервер ограничивает одновременные подключения до 1000. Лишние запросы отклоняются с ошибкой «Сервер перегружен», сохраняя работоспособность для текущих пользователей.

6. Caching (Кэширование)

Суть: Хранение часто используемых данных для ускорения доступа.
Пример: Redis кэширует результаты поисковых запросов в интернет-магазине. Это снижает нагрузку на основную базу данных и ускоряет ответ на 80%.

7. Queuing (Очереди)

Суть: Асинхронная обработка запросов через очередь.
Пример: Система рассылки email помещает письма в очередь RabbitMQ. Даже при пиковой нагрузке (например, Black Friday) сервис обрабатывает их постепенно, избегая сбоев.

8. Throttling (Регулирование)

Суть: Ограничение скорости запросов для защиты ресурсов.
Пример: API Google Maps разрешает не более 50 запросов в секунду на аккаунт. При превышении лимита запросы отклоняются, предотвращая злоупотребление.

9. Load Shedding (Сброс нагрузки)

Суть: Отключение некритичных функций при перегрузке.
Пример: Во время DDoS-атаки стриминговый сервис отключает рекомендации контента, но сохраняет возможность просмотра уже начатых трансляций.

10. Bulkhead (Переборка)

Суть: Изоляция компонентов для предотвращения каскадных сбоев.
Пример: В банковском приложении сервис перевода денег и сервис уведомлений работают в отдельных контейнерах. Даже если уведомления падают, переводы продолжают обрабатываться.

11. Waiting Room (Зал ожидания)

Суть: Приоритезация запросов в условиях высокой нагрузки.
Пример: Во время распродажи на сайте электроники пользователи попадают в виртуальную очередь (как у Ticketmaster). Премиум-клиенты обслуживаются первыми, остальные ждут своей очереди.

12. Compensating Transaction (Компенсирующая транзакция)

Суть: Отмена предыдущих операций при сбое.
Пример: Если оплата заказа в интернет-магазине не проходит, система автоматически отменяет резервирование товара на складе и уведомляет пользователя.

13. Event-Driven Architecture (Событийно-ориентированная архитектура)

Суть: Интеграция сервисов через публикацию/подписку на события.
Пример: При оформлении заказа в Uber сервис заказов публикует событие «Заказ создан». На него подписываются сервисы уведомлений, платежей и логистики, запуская свои процессы.

14. Сервисная сетка и API Gateway

Суть: Инструменты для управления коммуникациями между микросервисами.
Пример: