The Doppler Quarterly Spring 2018 | Page 62

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