Cloud native patterns

It is easy enough to say that we will architecture cloud-native systems based on Reactive principles and leverage event streaming to ultimately turn the cloud into the database, but it is another thing entirely to show how the pieces fit together. There is a relatively small collection of proven patterns that can be leveraged as templates to build cloud-native systems that solve a wide variety of valuable problems. Many of these patterns may already be familiar but have cloud-native twists.

Each pattern describes a solution to a specific problem in the context of cloud-native systems and addresses various forces, issues, and trade-offs. The patterns are interrelated and thus can be pieced together to build systems composed of bounded isolated components. There are many ways to document patterns. Martin Fowler has an excellent summary of various pattern forms in his posting on Writing Software Patterns (https://www.martinfowler.com/articles/writingPatterns.html).

Our cloud-native patterns are documented in the following form. Each will start with its name, a brief description of its intent, and a diagram that represents a sketch of the solution. These three pieces are critical to forming a pattern language that teams can use to facilitate architecture and design discussions and to train new team members. When additional details are needed we can refer to the body of each pattern.

Each pattern body includes sections discussing the context, problem, and forces; the solution, the resulting context, and one or more examples of the solution in action. The solution may include variations that can be applied in different scenarios. The resulting context section discusses the consequences, benefits, and drawbacks of applying the pattern, along with how it relates to the other cloud-native patterns. The patterns are grouped into three categories: Foundation, Boundary, and Control, to emphasize their relationships to each other and their place in cloud-native systems in general. The examples are real working solutions. However, they are purposefully simplified to focus in on the specific pattern.

Thus far we have established the overall context for our cloud-native patterns. The promise of cloud-native is to enable everyday companies to rapidly and continuously deliver innovation with confidence. To this end we want to empower self-sufficient, full-stack teams, leverage value-added cloud services, and embrace disposable architecture so that teams can focus on the value proposition of their bounded isolated components. We want to achieve global scale by recognizing that the cloud is the database, applying Reactive principles, and turning the database inside out to create proper bulkheads through the replication of data to materialized views built on event streaming, Polyglot Persistence, and cloud-native databases.

This context will be at the heart of all our cloud-native patterns. The following is a catalog of the patterns organized by category. Each category section includes a description of the category, the name, and intent of each pattern, and a summary diagram with a thumbnail image of each pattern sketch. Plus all the images are available for download as mentioned in the Preface of the book.