Scalability Patterns for Modern Distributed Systems