Architectural patterns for scalability