System Design: Fault Tolerance and Resilience Patterns