object-oriented programming languages. For example, a base container image,
such as a base class, can be reused and extended by stacking containers that
further refine the functionality. Virtual machines have had a profound impact
on increasing hardware utilization, while Docker containers have revolution-
ized application development by increasing speed and agility through applica-
tion reuse and portability.
Docker vs. VM
VM
CONTAINER
App A App B App C App A App B App C
Bins/Libs Bins/Libs Bins/Libs Bins/Libs Bins/Libs Bins/Libs
Guest OS Guest OS Guest OS
Docker
Hypervisor Hypervisor
Infrastructure Infrastructure
Figure 1: Containers and Virtual Machines
Microservices
Containers not only provide a way to distribute hermetically sealed applica-
tions in a space-efficient and compact way, but they also encourage decompos-
ing large applications into smaller independent chunks, or what the industry
now calls "microservices." Instead of a monolithic application deployed within a
single operating environment, a new generation of highly distributed and
loosely coupled applications are now built on smaller, self-contained services
that can be scheduled across a sea of compute, memory and storage. These
microservices scale independently and only communicate when necessary
through well-defined and lightweight interfaces over HTTP and REST or Remote
Procedure Calls (RPCs) over wire protocols like Google’s Protocol Buffers
(protobuf).
For example, one can easily build a simple monolithic service that stands up a
Sock Shop on the web, such as the Weaveworks demo (Figure 2). Such a website
could be built with an integrated front-end web server, back-end database,
authentication system, ordering service, etc., packaged together on a single
physical server. This might be perfectly fine as you introduce your store to the
public, but as it gains popularity, how can you scale it to meet the ever increasing
60 | THE DOPPLER | SPRING 2018