Designing for Scalability: Architectural Considerations