Cloud Native Patterns
Designing change-tolerant software
Cornelia Davis
  • MEAP began March 2017
  • Publication in June 2019 (estimated)
  • ISBN 9781617294297
  • 350 pages (estimated)
  • printed in black & white

I just bought this book and I'm completely blown away. I teach some of the patterns found inside to regional technology leaders and graduate students, but this book provides a new level of clarity.

Jason Baker

Author Cornelia Davis likes to say that "the cloud" is more about how you design your applications than where you deploy them. Cloud Native Patterns: Designing Change-tolerant Software is your guide to developing strong applications that thrive in the dynamic, distributed, virtual world of the cloud. This book presents a mental model for cloud-native applications, along with the patterns, practices, and tooling that sets them apart. In it, you'll find realistic examples and expert advice for working with apps, data, services, routing, and more.

Table of Contents detailed table of contents

Part 1: The Cloud-native Context: What are we Designing to? Defined

1 You Keep Using that Word — Defining Cloud

1.1 It’s Not Amazon’s Fault

1.2 Today’s Application Requirements

1.2.1 Zero Downtime

1.2.2 Shortened Feedback Cycles

1.2.3 Mobile and Multi-Device Support

1.2.4 Connected Devices — Also Known as the Internet of Things

1.2.5 Data-Driven

1.3 Introducing Cloud-Native Software

1.3.1 Defining Cloud-Native

1.3.2 A Mental Model for Cloud-Native Software

1.3.3 Cloud-Native Software in Action

1.4 Cloud-Native and World Peace

1.4.1 Cloud and Cloud-Native

1.4.2 What is not Cloud-Native

1.4.3 Cloud-Native Plays Nice

1.5 Summary

2 Running Cloud-Native Applications in Production

2.1 The Obstacles

2.1.1 Snowflakes

2.1.2 Risky Deployments

2.1.3 Change Is the Exception

2.1.4 Production Instability

2.2 The Enablers

2.2.1 Continuous Delivery

2.2.2 Repeatability

2.2.3 Safe Deployments

2.2.4 Change Is the Rule

2.3 Summary

3 The Platform for Cloud-Native Software

3.1 The Cloud(-/native) Platform Evolution

3.1.1 It started with Cloud

3.1.2 Cloud-Native Dial Tone

3.2 Core Tenets of the Cloud-native Platform

3.2.1 First, Let’s Talk About Containers

3.2.2 Support for “Constantly Changing”

3.2.3 Support for “Highly Distributed”

3.3 Who Does What?

3.4 More Cloud-native Platform Capabilities

3.4.1 The Platform Supports the Entire SDLC

3.4.2 Security, Change-Control, Compliance (the Control Functions)

3.4.3 Controlling What Goes into the Container

3.4.4 Upgrading and Patching Vulnerabilities

3.4.5 Change Control

3.5 Summary

Part 2: Cloud-Native Foundations

4 It’s not Just Request/Response

4.1 We are (Usually) Taught Imperative Programming

4.2 (Re)Introducing Event-driven Computing

4.3 My Global Cookbook

4.3.1 Request/Response

4.3.2 Event-driven

4.4 Introducing Command Query Responsibility Segregation (CQRS)

4.5 Different Styles, Similar Challenges

4.6 Summary

5 Scale Out and Statelessness

5.1 Cloud-native Apps Have Many Instances Deployed

5.2 Stateful Apps in the Cloud

5.2.1 Decomposing the Monolith and Binding to the Database

5.2.2 Poorly Handling Session State

5.3 HTTP Sessions and Sticky Sessions

5.4 Stateful Services and Stateless Apps

5.4.1 Stateful Services are Special Services

5.4.2 Making Apps Stateless

5.5 Summary

6 Application Configuration: Not Just Environment Variables

6.1 Why are we even talking about config?

6.1.1 Dynamic Scaling — Increasing and Decreasing the Number of App Instances

6.1.2 Infrastructure Changes Causing Configuration Changes

6.1.3 Updating Application Configuration with Zero Downtime

6.2 The App’s Configuration Layer

6.3 Injecting System/Environment Values

6.3.1 Let’s See this in Action

6.4 Injecting Application Configuration

6.4.1 Introducing the Configuration Server

6.4.2 Security Adds More Requirements

6.4.3 Let’s See this in Action

6.5 Summary

7 The Application Lifecycle

7.1 Having Empathy for Operations

7.2 Single App Lifecycle, Multiple Instance Lifecycles

7.2.1 Blue/Green Upgrades

7.2.2 Rolling Upgrades

7.2.3 Parallel Deploys

7.3 Coordinating Across Different App Lifecycles

7.4 Let’s See this in Action: Credential Rotation and App Lifecycle

7.5 Dealing with Ephemeral Runtime Environments

7.6 Visibility of App Lifecycle State

7.6.1 Let’s See this in Action: Health Endpoints and Probes

7.7 Serverless

7.8 Summary

8 Accessing Apps: Services, Routing and Service Discovery

8.1 The Service Abstraction

8.1.1 Service Example: Googling

8.1.2 Service Example: Our Blog Aggregator

8.2 Dynamic Routing

8.2.1 Server-side Load Balancing

8.2.2 Client-side Load Balancing

8.2.3 Route Freshness

8.3 Service Discovery

8.3.1 Service Discovery on the Web

8.3.2 Service Discovery with Client-side Load-balancing

8.3.3 Service Discovery in Kubernetes

8.4 Example: Using Service Discovery

8.5 Summary

9 Resilient Interactions: Retries and Other Control Loops

9.1 Request Retries

9.1.1 The Basic Request Retry

9.1.2 Let’s See this In Action: Simple Retries

9.1.3 Retries: What Could Go Wrong?

9.1.4 Creating a Retry Storm

9.1.5 Avoiding Retry Storms: Kind Clients

9.1.6 When Not to Retry

9.2 Fallback Logic

9.3 Control Loops

9.3.1 Controlling the Control Loop

9.4 Summary

10 Fronting Services: Circuit Breakers and API Gateways

10.1 Circuit Breakers

10.1.1 The Software Circuit Breaker

10.1.2 Implementing a Circuit Breaker

10.2 API Gateways

10.2.1 The Case for API Gateways in Cloud Native Software

10.2.2 API Gateway Topology

10.3 The Service Mesh

10.3.1 The Sidecar

10.3.2 The Control Plane

10.4 Summary

11 Troubleshooting: Finding the Needle in the Haystack

11.1 Application Logging

11.2 Application Metrics

11.2.1 Pulling Metrics from Cloud-native Applications

11.2.2 Pushing Metrics from Cloud-native Applications

11.3 Distributed Tracing

11.3.1 Tracer Output

11.3.2 Assembling Traces via Zipkin

11.3.3 Implementation Details

11.4 Summary

12 Cloud Native Data: Breaking the Data Monolith

12.1 Every Microservice Needs a Cache

12.2 Moving from Request/Response to Event Driven

12.3 The Event Log

12.3.1 Implementing Event-driven Microservices

12.3.2 What’s new with Topics and Queues?

12.3.3 The Event Payload

12.3.4 Idempotency

12.4 Event Sourcing

12.4.1 The Journey so Far

12.4.2 The Source of Truth

12.4.3 Implementing Event-sourcing

12.5 We’re Just Scratching the Surface

12.6 Summary

About the Technology

We are amid a radical change in how we design and build applications. With cloud platforms like AWS, Azure, and Google Cloud, even small teams can take full advantage of web-scale distributed application patterns and practice. Users and customers have higher expectations for reliability, availability, and performance. Cloud-native software promises near-zero downtime, shortened feedback cycles, multi-device support, and improved cost control. All this means developers need to learn new skills and techniques, along with a new way of thinking about application design.

What's inside

  • The application lifecycle of Cloud Native apps
  • Automated configuration management
  • Multi-tenant services, versioned services, and parallel deploys
  • Understanding Cloud Native Routing
  • Managing dependencies between apps and services

About the reader

Requires intermediate programming skill with Java or a similar language. Some experience with server-side development is helpful.

About the author

Cornelia Davis is the Sr. Director of Technology at Pivotal Software. A teacher at heart, Cornelia has spent the last 25 making better software and better software developers.

Manning Early Access Program (MEAP) Read chapters as they are written, get the finished eBook as soon as it’s ready, and receive the pBook long before it's in bookstores.
MEAP combo $49.99 pBook + eBook + liveBook
MEAP eBook $39.99 pdf + ePub + kindle + liveBook

placing your order...

Don't refresh or navigate away from the page.

FREE domestic shipping on three or more pBooks