Essential Patterns for Reliable, Scalable Microservices Architecture