A pattern describes a problem which occurs over and over again in an environment, and then describes a solution to that problem that has been proven multiple times, in such a way that you can use this solution over and over again. Patterns are documented in a format that inform you, how you use them, when, why, and what trade-offs you have to make in doing so. You can view patterns as formalized best practices. So rather than reinventing the wheel, patterns provide a means of reuse, where architects have access to a catalog of classified patterns in which they can review.

Wading through pattern after pattern is very time consuming and tedious if all the patterns were possible solutions for each requirement. So I decided to employ use cases and platform deployment decisions to reduce the number of applicable patterns for each requirement; thus reducing the number of applicable patterns to a manageable number.

I decided not to cover any patterns that are solely utilized on-premise. (for obvious reasons). It made sense to focus on patterns and deployments that are applicable to hybrid and multi-cloud environments. I used a simple high level notation to depict the patterns. More details can be found here.

Each pattern has a definition and one or more interaction diagrams. The pattern definition provides:

  • A unique and descriptive name representing the essence of the pattern
  • A description of the problem that the pattern intends to solve in the form of a question e.g. “How do I…”
  • A description of situations in which the problem occurs and any preconditions on when the pattern can be applied
  • A description of the relevant forces and constraints for when the pattern is applicable
  • A textual description of how the pattern provides a solution to the problem being addressed by the pattern.
  • A description of the pros and cons to assist with trade-off analysis

My intent is also to map common cloud services and open source products to these patterns but this is going to be a work in progress and the rate at which the cloud vendors update their products will more than likely become out of date. (so any help would be appreciated)

Because the patterns are at a relatively high-level of abstraction, there are frequently options concerning the implementation of the pattern. The interaction diagrams illustrate “some” of the possible interactions between the the associated platforms. The interaction diagrams for each pattern provide the details necessary to make informed decisions about the most appropriate way to implement the pattern for a particular need.