9 основных паттернов для создания отказоустойчивых приложений
(продолжение предыдущего поста)
### 1. Предохранитель (Circuit Breaker)
* Работает как электрический предохранитель.
* Когда сервис сталкивается с повторяющимися сбоями, предохранитель срабатывает и прекращает отправку запросов к этому сервису на определённый период.
* Это позволяет проблемному сервису восстановиться, не подвергаясь дополнительной нагрузке.
Основные состояния предохранителя:
* Закрыто: запросы пропускаются.
* Открыто: запросы немедленно отклоняются с ошибкой.
Эффективен для защиты от каскадных сбоев и изоляции проблемных сервисов.
### 2. Повтор запроса (Retry)
* При сбое запроса система автоматически повторяет его определённое количество раз перед отказом.
* Помогает преодолеть временные ошибки, такие как сетевые сбои или временная недоступность.
* Повышает доступность системы и маскирует временные ошибки.
* Важно учитывать штормы повторных запросов (когда чрезмерные повторы перегружают систему) и использовать экспоненциальное отступление (увеличение времени между повторами).
### 3. Таймаут (Timeout)
* Устанавливает максимальное время ожидания для запроса.
* Если ответ не получен в течение заданного периода, запрос считается неудачным.
### 4. Переборка (Bulkhead)
* Паттерн переборка изолирует различные части приложения в отдельные пулы или отсеки.
* Такая изоляция ограничивает влияние сбоев или перегрузки в одном отсеке, предотвращая их распространение на всю систему.
### 5. Ограничение скорости (Rate Limiting)
* Контролирует частоту входящих запросов для защиты системы от перегрузки.
* Защищает от атак типа «отказ в обслуживании», обеспечивает справедливое использование и помогает поддерживать стабильность системы.
### 6. Запасной вариант (Fallback)
* Предоставляет альтернативный (часто менее оптимальный) ответ или действие при сбое основного.
* Повышает доступность системы и улучшает пользовательский опыт, обеспечивая определённый уровень сервиса даже при недоступности основной функции.
### 7. Хеджирование (Hedging)
* Отправляет дублирующие запросы к нескольким идентичным сервисам и использует самый быстрый ответ.
* Снижает влияние медленных ответов и сбоев, улучшая отзывчивость системы.
### 8. Сброс нагрузки (Load Shedding)
* Отбрасывает некритичные запросы при перегрузке системы для защиты её основной функциональности.
* Помогает поддерживать стабильность и доступность системы при пиковых нагрузках.
### 9. Обратное давление (Backpressure)
* Имеет некоторое сходство с другими паттернами отказоустойчивости.
Основной механизм обратного давления — это петля обратной связи между отправителем (производителем данных) и получателем (потребителем данных).
Потребитель сигнализирует о своей пропускной способности производителю, позволяя тому динамически регулировать скорость вывода данных.
Существует несколько стратегий обратного давления:
* Реактивный запрос — потребитель явно запрашивает данные у производителя, получая их в своём темпе.
* Ограничение скорости — производитель ограничивает скорость вывода данных на основе обратной связи от потребителя.
* Буферизация — используется буфер для временного хранения данных, когда потребитель работает медленно.
Post #2213
1.65K