• Load balance across the healthy processes • Processes should be physically separated • Example ◦ Heroku: Multiple Dynos ◦ Digital Ocean: Droplets in different datacenters ◦ AWS: Instances in different availability zones
• Exponential backoff + jitter reduces load on the flakey component • Give up after a given number of retries or time retrying • Examples ◦ zeit/async-retry
fail or hang • Tracks error rates and request latency • “Opens” the circuit under high latency or error rates • When available, a fallback response can be returned • Allows some request through to test if it should “Close” • Often incorporates timeouts and is combined with retries
fast and don’t tie up resources waiting • Allows the system to recover ◦ Removes load from dependencies so they can recover • Examples ◦ Shopify/semian ◦ nodeshift/opossum