Отказоустойчивость Fault tolerance
Зачем
Отказоустойчивость — это способность системы продолжать полноценно работать при выходе из строя отдельных компонентов — серверов или каналов связи, сбоев на уровне отдельных модулей системы и т.д.
- CAP теорема - концепции распределённости — расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций:
- согласованность (consistency)
- доступность (availability)
- устойчивость к разделению (англ. partition tolerance)
- Вы хотите консистентность или доступность в случае инцидента?
Факторы риска
- Сбой электропитания
- Сбои Сервера, ос
- Ошибки софта
- Выход из строя канала интернет
- умышленное или случайное изменение данных в базе данных
- Ddos атаки
- Некорректная обработка ошибок
Паттерны
Методы инфраструктуры, физической архитектуры
- исключение единой точки отказа — это либо решения с «горячей заменой»
- резервирование, дублирование, кластеры, либо горизонтальное масштабирование.
- Прокси, файервол, капча
- Балансировка
- api management
- Установка лимитов запросов rate limits, тайм-аут
- Dev ops ci/cd:
- docker
- kubernetes
- jenkins
- авто распределенный конфиг etcd
- кеш redis
- системы мониторинга - аптайм доступность сервиса, выраженная в процентах
- ИБП, генератор электричества, охлаждение серверов
- DB:
- репликации
- кластер
- Горизонтальное шардирование данных
- Распределенные файловые системы
- Бэкапы, логи
Методы разработки
Design for failure
- Идемпотентность, Retry Policy, Fail Fast, Rate Limit, Circuit Breakers
- распределенная архитектура
- Микросервисы: слабая связность, изоляция сбоев
- stateless
- модульный монолит
- Health check
- CQRS
- Асинхронная обработка - Брокер очереди, воркеры, буферы входного потока данных
- Git, rollback
- миграции бд
- graceful shutdown
- Message Bus