Blueprints for High Availability: Designing Resilient Distributed Systems