1.2 Existing resources
The scope defined in § 1.1 creates an interesting gap that no existing source seems to comprehensively cover.
This section provides what the author hopes to be a comprehensive review of existing literature on distributed systems patterns. Only major works containing constructed pattern sets or catalogues were considered to ensure relevancy and consistency in selection.
Methods employed include online searches, querying academic databases, and reviewing the works’ bibliographies. Unfortunately, many non-academic works fail to provide a comprehensive list of references, so almost every pattern required additional research to find the original source.
1.2.1 Classics
Martin Fowler’s Patterns of Enterprise Application Architecture [7] is a natural place to start, but it pertains mostly to layered monolithic systems (the chapter on distribution patterns only contains two patterns) and, importantly – as Fowler notes [8] – completely omits asynchronous messaging.
This led to the creation of Gregor Hohpe and Bobby Woolf’s Enterprise Integration Patterns (2003) [4]. However, this, in turn, only covers messaging patterns and not the architecture as a whole.
The Pattern-Oriented Software Architecture (POSA) series defined a multitude of patterns during its run. Frank Buschmann et al.’s Volume 2: Patterns for Concurrent and Networked Objects (2000) [9] and Volume 4: A Pattern Language for Distributed Computing (2007) are most relevant to distributed systems, with the latter being the last complete book on this topic. This work considers all patterns later confirmed by Volume 5 (2007) [10], which was, unfortunately, the last in the series.
Michael Nygard’s influential Release It! (2007) [11] focuses on stability patterns, a few of which are architectural. This work uses the updated 2018 second edition [12].
1.2.2 Service Oriented Architecture
SOA, although now declined in popularity [2, p. 242], was an important milestone in distributed computing, and it brought Arnon Rotem-Gal-Oz’s SOA Patterns (2012) [13]. Despite the ageing technology references and vocabulary, it still holds up remarkably well, with quite a large overlap with later works, but often uses different names for the same patterns.
1.2.3 Cloud computing
Due to the rise of cloud computing in recent years, several works have been published documenting patterns used for architecting cloud applications. The first was Bill Wilder’s Cloud Architecture Patterns (2012) [14], documenting a handful of patterns in depth. Fehling et al.’s Cloud Computing Patterns (2014) [15] was one of the inspirations for this work’s structure and visual style and has a whole chapter dedicated to cloud application architecture patterns. It also has an accompanying website.
The major cloud providers have also published their own pattern catalogues. The first was Alex Homer et al.’s Cloud Design Patterns (2014) [16], which later evolved into the open-source Azure Architecture Center series on Cloud Design Patterns [17]. It provides the most comprehensive list and often tops the search results for the given pattern. However, it suffers from inconsistency both in the selection of patterns1 and in structure, and is prone to wrapping Azure products as patterns. Amazon Web Services also hosts Cloud design patterns, architectures, and implementations, a catalogue by Anitha Deenadayalan [18], which covers fewer patterns but more consistently.
However, while many cloud architecture patterns are applicable to any kind of distributed system, many require a cloud environment to be fully utilised.
1.2.4 Microservices
The advent of microservices brought Sam Newman’s Building Microservices (2015) [19] and the expanded 2021 second edition [3], which offer a comprehensive guide but buries the patterns in the text. Chris Richardson’s Microservices Patterns (2018) [20] fills this gap with a complete catalogue but lacks structure or overview diagrams. This is offset somewhat by the accompanying website [21], but at the time of writing, it is still under construction, and several patterns only have a skeletal structure.
1.2.5 Distributed systems
In the last few years, several works have been published that focus on distributed systems in general. Brendan Burns’ Designing Distributed Systems (2018) [22] is closest to the scope of this work (with some focus also on containers), but similarly to Richardson, opts for a deep dive instead of a catalogue. While Mark Richards and Neal Ford’s Fundamentals of Software Architecture (2020) [2] covers a few well-known patterns, it takes a “new approach” and only mentions them in passing. Unmesh Joshi’s Patterns of Distributed Systems (2023) [5] is the most recent and most in-depth work, but focuses more on the technical aspects of constructing distributed systems and infrastructure, with a focus on data replication instead of the overall architecture.
There is also a work-in-progress sequel to EIP, Conversation Patterns, by Hohpe [23], with a last update in 2017. Since it is not finished, is not considered for selection of patterns, but it already includes useful patterns that are referenced when appropriate.
1.2.6 Wikipedia
Wikipedia has a wide coverage of common software patterns and, due to its freedom of access, is often linked to, especially with older patterns, such as the Gang of Four patterns [24], where it is quite comprehensive [25]. However, when it comes to distributed systems, this coverage is often sporadic and lacklustre. This is a shame, as Wikipedia’s encyclopedic nature and focus on secondary sources would make it a valuable resource for this work. Still, due to its open access and the educational nature of this work, it is referenced as an additional source wherever applicable.
E.g. it includes the Index Table – a database pattern – in the list↩︎