Implementing Service Resilience

1. Understanding Failure Modes

FailureSymptom
CrashProcess gone; restart
Slow / hangLatency spike, threads blocked
Partial / ByzantineInconsistent behavior
Network partitionSplit-brain risk
Resource exhaustionOOM, file descriptors, threads

2. Implementing Circuit Breaker Pattern

StateBehavior
ClosedCalls pass through; track failures
OpenFast-fail; no calls for cool-down
Half-OpenProbe small sample; close on success
Thresholde.g. 50% failures over 20 calls
ToolsResilience4j, Polly, gobreaker, Envoy

3. Implementing Retry Pattern

ElementDetail
Retry only onIdempotent ops + transient errors
BackoffExponential with jitter
Cap attempts3–5
BudgetLimit retries as % of total RPS
AvoidRetry storms (combine with circuit breaker)

4. Implementing Timeout Pattern

LayerRecommendation
Connect1–2s
Per-request1–10s based on SLA
Background jobExplicit per-job
CascadingCaller TO > downstream TO
CancelPropagate context cancellation

5. Implementing Bulkhead Pattern

TypeDetail
Thread poolPer-dependency executor
SemaphoreCap concurrent calls
Connection poolPer-upstream cap
Process / clusterWorkload isolation

6. Implementing Graceful Degradation

StrategyExample
Fallback valueCached recommendations on ML failure
Reduced feature setDisable autocomplete; main search works
Stale-while-revalidateServe last good response
Read-only modeBlock writes during partial outage

7. Using Failure Detection

DetectorDetail
Health probesK8s liveness/readiness
Outlier detectionMesh ejects bad endpoints
HeartbeatsPeriodic pings
Phi accrualAdaptive failure detector (Akka, Cassandra)

8. Handling Cascading Failures

DefenseDetail
TimeoutsFree callers when downstream slow
Circuit breakerCut traffic to failing dep
BulkheadsIsolate one slow dep from others
Load sheddingReject low-priority work first
BackpressureSignal upstream to slow down

9. Implementing Self-Healing

MechanismDetail
Auto-restartK8s restarts on liveness fail
Auto-replaceReplace unhealthy nodes (ASG, MIG)
Auto-scaleHPA / KEDA on metrics
Auto-rollbackArgo Rollouts on bad metrics

10. Managing Partial System Availability

TacticDetail
Feature flagsDisable affected features
Region failoverRoute traffic away from sick region
Quotas / fairnessPer-tenant isolation
CommunicateStatus page, in-app banner

11. Using Redundancy

TypeDetail
N+1 instancesSurvive single-instance loss
Multi-AZSpread replicas across zones
Multi-regionDR + locality
Active-activeBoth serve traffic
Active-passiveStandby; failover on incident

12. Using Resilience Libraries

LibraryLanguage
Resilience4jJava (modern, modular)
Polly.NET
gobreaker / failsafe-goGo
opossumNode.js
TenacityPython
Hystrix DEPRECATEDUse Resilience4j instead