Abílio Azevedo.

Cloud Design Patterns

Cover Image for Cloud Design Patterns
Abílio Azevedo
Abílio Azevedo

In the dynamic landscape of cloud computing, design patterns have emerged as a powerful tool for building robust, scalable, and efficient applications. These patterns, distilled from the experiences of seasoned developers, provide a roadmap for addressing common challenges that arise in cloud-based architectures.

1. Ambassador

Create helper services that send network requests on behalf of a consumer service or application.

2. Anti-Corruption Layer

Implement a façade or adapter layer between a modern application and a legacy system.

3. Asynchronous Request-Reply

Decouple backend processing from a frontend host, where backend processing needs to be asynchronous, but the frontend still needs a clear response.

4. Backends for Frontends

Create separate backend services to be consumed by specific frontend applications or interfaces.

Read More

5. Bulkhead

Isolate elements of an application into pools so that if one fails, the others will continue to function.

6. Cache-Aside

Load data on demand into a cache from a data store.

7. Choreography

Let each service decide when and how a business operation is processed, instead of depending on a central orchestrator.

8. Circuit Breaker

Handle faults that might take a variable amount of time to fix when connecting to a remote service or resource.

9. Claim Check

Split a large message into a claim check and a payload to avoid overwhelming a message bus.

10. Compensating Transaction

Undo the work performed by a series of steps, which together define an eventually consistent operation.

11. Competing Consumers

Enable multiple concurrent consumers to process messages received on the same messaging channel.

12. Compute Resource Consolidation

Consolidate multiple tasks or operations into a single computational unit.

13. CQRS (Command Query Responsibility Segregation)

Segregate operations that read data from operations that update data by using separate interfaces.

14. Deployment Stamps

Deploy multiple independent copies of application components, including data stores.

15. Edge Workload Configuration

The great variety of systems and devices on the shop floor can make workload configuration a difficult problem.

16. Event Sourcing

Use an append-only store to record the full series of events that describe actions taken on data in a domain.

17. External Configuration Store

Move configuration information out of the application deployment package to a centralized location.

18. Federated Identity

Delegate authentication to an external identity provider.

19. Gatekeeper

Protect applications and services by using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them.

20. Gateway Aggregation

Use a gateway to aggregate multiple individual requests into a single request.

21. Gateway Offloading

Offload shared or specialized service functionality to a gateway proxy.

22. Gateway Routing

Route requests to multiple services using a single endpoint.

23. Geodes

Deploy backend services into a set of geographical nodes, each of which can service any client request in any region.

24. Health Endpoint Monitoring

Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals.

25. Index Table

Create indexes over the fields in data stores that are frequently referenced by queries.

26. Leader Election

Coordinate the actions performed by a collection of collaborating task instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the other instances.

27. Materialized View

Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations.

28. Pipes and Filters

Break down a task that performs complex processing into a series of separate elements that can be reused.

29. Priority Queue

Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those with a lower priority.

30. Publisher/Subscriber

Enable an application to announce events to multiple interested consumers asynchronously, without coupling the senders to the receivers.

31. Queue-Based Load Leveling

Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads.

32. Rate Limit Pattern

Limiting pattern to help you avoid or minimize throttling errors related to these throttling limits and to help you more accurately predict throughput.

33. Retry

Enable an application to handle anticipated, temporary failures when it tries to connect to a service or network resource by transparently retrying an operation that's previously failed.

34. Saga

Manage data consistency across microservices in distributed transaction scenarios. A saga is a sequence of transactions that updates each service and publishes a message or event to trigger the next transaction step.

35. Scheduler Agent Supervisor

Coordinate a set of actions across a distributed set of services and other remote resources.

36. Sequential Convoy

Process a set of related messages in a defined order, without blocking processing of other groups of messages.

37. Sharding

Divide a data store into a set of horizontal partitions or shards.

38. Sidecar

Deploy components of an application into a separate process or container to provide isolation and encapsulation.

39. Static Content Hosting

Deploy static content to a cloud-based storage service that can deliver them directly to the client.

40. Strangler Fig

Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services.

41. Throttling

Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service.

42. Valet Key

Use a token or key that provides clients with restricted direct access to a specific resource or service.

By understanding and applying these patterns, developers can harness the power of the cloud, crafting solutions that are scalable, resilient, and highly performant.

As the cloud ecosystem continues to evolve, the importance of design patterns will only grow. By staying informed and embracing these proven approaches, developers can navigate the complexities of cloud computing with confidence, delivering innovative and reliable applications that meet the ever-changing needs of today's digital landscape.

Resources

https://learn.microsoft.com/pt-br/azure/architecture/patterns


More posts

Cover Image for The Phychology of Money

The Phychology of Money

Morgan Housel offers valuable insights on financial management and decision-making. The author emphasizes that financial success depends more on behavior than on intelligence or technical knowledge. Housel highlights the importance of long-term vision and resilience in the face of market volatility, encouraging us to focus on sustainability rather than short-term gains.

Cover Image for Bellsant

Bellsant

I've been at the forefront of developing a cutting-edge health and wellness app. Our tech stack combines React Native for cross-platform mobile development with a serverless NodeJS backend, leveraging AWS Lambda for scalability and cost-efficiency.

Abílio Azevedo
Abílio Azevedo

NewsLetter

I will send the content posted here. No Spam =)

Experienced Software Engineer with degree in Electrical Engineering with over 10 years of hands-on expertise in building robust and scalable mobile, web and backend applications across various projects mainly in the fintech sector. Mobile (React Native), Web (React and Next.JS) and Backend (Node.JS, PHP and DJANGO). My goal is to create products that add value to people. - © 2024, Abílio Azevedo