Cloud Design Patterns =================================== Cloud Design Patterns -Used at Different Software Layers **Client Layer** - Client-side Load Balancing: Distributes requests from the client directly to the available service instances. - State Pattern: Allows an object to alter its behavior when its internal state changes. - Composite UI Pattern: Composes responses from multiple microservices to render the complete UI. **Load Balancer Layer** - Geographical Distribution: Routes traffic based on the geographical location of the client. - Health Checks: Periodically checks the health of the servers and routes traffic only to healthy ones. - Affinity Based Routing: Routes the user's request to the same server for maintaining session persistence. - Least Connections: Routes traffic to the server with the fewest active connections. **API Gateway Layer** - Backend for Frontend (BFF): Tailors API responses to the needs of individual client types. - Circuit Breaker: Detects failures and prevents applications from trying to perform actions that are doomed to fail. - Retry Pattern: Helps to handle transient failures when it tries to connect to a remote service or network resource. - Request Collapsing: Collapses multiple requests for the same operation into a single request. **Web Server Layer** - Page Cache Pattern: Stores the output of expensive operations and reuse it to avoid duplicated work. - Compression Pattern: Reduces the size of the response to improve load times. - Lazy Loading: Defers initialization of an object until the point at which it is needed. - Content Negotiation Pattern: The server generates different versions of a resource and serves the one matching the client’s criteria. **Application Server Layer** - Saga Pattern: Manages long-running transactions and deals with failures and compensating transactions. - CQRS (Command Query Responsibility Segregation): Separates read and write operations to improve performance and scalability. - Proxy Pattern: Provides a surrogate or placeholder for another object to control access to it. - Chain of Responsibility: Passes the request along a chain of handlers. **Caching Layer** - Sidecar Caching: Deploy a dedicated cache alongside each microservice to provide isolated and scalable caching functionality. - Cache Chaining: Arrange multiple cache layers hierarchically to handle different granularity or lifetime, querying each layer sequentially on a cache miss. - Time-to-Live (TTL) Caching: Assigns a predefined lifespan to each cache entry, removing or refreshing the entry once its lifespan expires. **CDN Layer** - Prefetching: Anticipates user actions and loads resources ahead of time. - Parallel Requesting: Makes multiple requests in parallel to improve load times. - Edge Computing: Processes data closer to the location where it is needed. - Domain Sharding: Splits resources across multiple domains to increase parallel downloads. - Adaptive Image Delivery: Delivers images tailored to the device and user context. **Database Layer** - Sharding Pattern: Distributes data across multiple databases to improve scalability. - Replication Pattern: Keeps copies of data in multiple locations for availability and reliability. - Read-Replica Pattern: Uses read replicas to offload read operations from the primary database instance. - Query Object Pattern: An object that represents a database query.