Distributed Systems need to be able to gracefully handle failures and recover from them. This is achieved through resilience, which involves designing systems while anticipating scenarios where nodes/services/resources over which the system is distributed may fail to be accessed or behave unexpected due to
- Slow Networks
 - Network Timeouts
 - Overcommited/Overloaded resources or Services
 - Temporarily unavailable resources or service
 - Partial loss of connectivity
 
This repository covers several patterns implemented in Golang which have been designed to handle resilience in distributed environments.