guh.me - gustavo's personal blog

Cloud Native Patterns: Designing Change-tolerant Software

1. Cloud-Native (CN) Software

Cloud-native software is highly distributed, must operate on a constantly changing environment, and is itself constantly changing.

The Three Parts of Cloud-Native Software

  1. The cloud-native app is where you write code, containing the business logic of your software.
    • The right patterns should be used for each component to integrate well with each other.
    • It should be constructed in a manner that allows cloud-native operational patterns such as upgrading or scaling to be performed.
  2. Cloud-native data is where the state lives in your cloud-native software. Data (and databases) are decomposed and distributed.
  3. Cloud-native interactions define how cloud-native apps and cloud-native data interact - many of these patterns are new. They may be request/response, push-centric or pull-centric.

Cloud-Native Apps Concerns

Cloud-Native Data Concerns

Cloud-Native Interactions

2. Running Cloud-Native Applications in Production

Cloud Native Factors

Continuous Delivery

Continuous Delivery

Repeatability

Safe deployments

Change is the rule

3. The Platform for Cloud-Native Software

Core Tenets of the Cloud Native Platform

Platform Capabilities

4. Event-Driven Microservices

Event-driven Computing

Event-driven Computing

Command Query Responsibility Segregation (CQRS)

5. App Redundancy: Scale-out and Statelessness

Stateful Apps in the Cloud

Stateful services and stateless apps

6. Application Configuration

Injecting Application Configuration

7. Application Lifecycle

8. Accessing Apps: Services, Routing and Service Discovery

Service Discovery

9. Interaction Redundancy: Retries and Control Loops

Request Retries (client)

Fallback Logic (client)

Control Loops (server)

10. Fronting Services: Circuit Breakers and API Gateways

Circuit Breakers

API Gateways

Service Mesh

11. Troubleshooting: Finding the Needle in the Haystack

Application Logging

Application Metrics

Distributed Tracing

12. Cloud-native Data: Breaking the Data Monolith