Design patterns for container-based distributed systems
Venue
The 8th Usenix Workshop on Hot Topics in Cloud Computing (HotCloud '16) (2016)
Publication Year
2016
Authors
Brendan Burns, David Oppenheimer
BibTeX
Abstract
In the late 1980s and early 1990s, object-oriented programming revolutionized
software development, popularizing the approach of building of applications as
collections of modular components. Today we are seeing a similar revolution in
distributed system development, with the increasing popularity of microservice
architectures built from containerized software components. Containers are
particularly well-suited as the fundamental “object” in distributed systems by
virtue of the walls they erect at the container boundary. As this architectural
style matures, we are seeing the emergence of design patterns, much as we did for
objectoriented programs, and for the same reason – thinking in terms of objects (or
containers) abstracts away the lowlevel details of code, eventually revealing
higher-level patterns that are common to a variety of applications and algorithms.
This paper describes three types of design patterns that we have observed emerging
in container based distributed systems: single-container patterns for container
management, single-node patterns of closely cooperating containers, and multi-node
patterns for distributed algorithms. Like object oriented patterns before them,
these patterns for distributed computation encode best practices, simplify
development, and make the systems where they are used more reliable.
