Як забезпечити відмовостійкість мікросервісів
4. Fallback — альтернативний шлях при збої 5. Bulkhead — розділяє потоки, щоб збій в одному не зачепив інші
🟢 Junior Level
Відмовостійкість — здатність системи продовжувати роботу при збої окремих компонентів.
Основні патерни:
- Circuit Breaker — розмикає коло при помилках, повертає fallback
- Retry — повторює впалий виклик із затримкою
- Timeout — обмежує час очікування відповіді
- Fallback — альтернативний шлях при збої
- Bulkhead — розділяє потоки, щоб збій в одному не зачепив інші
Сервіс A → Circuit Breaker → Retry → Timeout → Fallback → результат
🟡 Middle Level
Resilience4j
// "backend" — ім'я конфігурації з application.yml.
// fallbackMethod — метод, що викликається при спрацьовуванні circuit breaker.
// Resilience4j перехоплює виклик через AOP-проксі.
@CircuitBreaker(name = "backend", fallbackMethod = "fallback")
@Retry(name = "backend")
@TimeLimiter(name = "backend")
@Bulkhead(name = "backend")
public CompletableFuture<String> callBackend(String input) {
return backendService.callAsync(input);
}
public CompletableFuture<String> fallback(String input, Throwable t) {
return CompletableFuture.completedFuture("fallback: " + input);
}
Конфігурація
resilience4j:
circuitbreaker:
instances:
backend:
failureRateThreshold: 50
waitDurationInOpenState: 10s
retry:
instances:
backend:
maxAttempts: 3
waitDuration: 1s
timelimiter:
instances:
backend:
timeoutDuration: 5s
Типові помилки
- Retry без exponential backoff:
3 retry без затримки одразу → overload сервісу (потроєння трафіку). Потрібен exponential backoff з jitter — див. файл 20. Рішення: exponential backoff + jitter
🔴 Senior Level
Chaos Engineering
Тестування відмовостійкості:
- Chaos Monkey (Netflix) — випадково вбиває сервіси
- Gremlin — fault injection
- Toxiproxy — network latency
Мета: знайти слабкі місця до продакшену
Production Experience
Multi-region deployment:
Region 1 (active) → traffic
Region 2 (passive) → standby
Region 1 down → failover to Region 2
Best Practices
✅ Circuit Breaker для зовнішніх викликів
✅ Retry з exponential backoff
✅ Timeout на усі виклики
✅ Fallback для graceful degradation
✅ Bulkhead для ізоляції
✅ Monitoring та alerting
❌ Без timeout
❌ Retry без backoff
❌ Без fallback
❌ Без моніторингу
🎯 Шпаргалка для співбесіди
Обов’язково знати:
- 5 ключових патернів: Circuit Breaker, Retry, Timeout, Fallback, Bulkhead
- Circuit Breaker блокує виклики до сервісу, що не працює
- Retry з exponential backoff + jitter повторює виклик із зростаючою затримкою
- Timeout обмежує час очікування — захищає від зависання
- Fallback — альтернативний шлях при збої (graceful degradation)
- Bulkhead ізолює ресурси — збій в одному не зачіпає інші
- Chaos Engineering (Chaos Monkey, Gremlin) тестує відмовостійкість до продакшену
Часті уточнюючі питання:
- Чому retry без backoff поганий? Потроює трафік на падаючий сервіс — погіршує проблему.
- Що таке Chaos Engineering? Навмисне внесення збоїв (вбити сервіс, додати latency) для пошуку слабких місць.
- Resilience4j vs Hystrix? Hystrix у maintenance mode, Resilience4j — сучасний стандарт.
- Multi-region deployment як забезпечує відмовостійкість? Region 1 down → failover to Region 2.
Червоні прапорці (НЕ говорити):
- “Retry без backoff — нормально” — ні, overload сервісу
- “Circuit Breaker не потрібен, у нас надійна мережа” — збій може бути на стороні сервісу
- “Fallback = ігнорувати помилку” — ні, це альтернативний шлях (кеш, дефолтне значення)
- “Bulkhead = Circuit Breaker” — ні, Bulkhead ізолює ресурси, CB блокує виклики
Пов’язані теми:
- [[5. Що таке патерн Circuit Breaker]]
- [[6. Як працює Circuit Breaker і які у нього стани]]
- [[18. Що таке патерн Bulkhead]]
- [[19. Що таке патерн Retry і як його правильно використовувати]]
- [[20. Що таке exponential backoff]]