mory and CPU footprint. With the advent of 5G, telecom architectures are evolving from virtual network functions (VNFs) into container network functions (CNFs), realizing the gains mentioned above. Figure 6.2.2 highlights the difference between two approaches, VMs and containers, using a Docker2 framework as an example. As can be observed, the hypervisor and the guest operat- ing system components (used in the VM architecture) are replaced by a thin Docker engine, eliminating the concept of the guest operating system entirely. This reduces the memory and the CPU footprint, making it lightweight and more efficient. In order to make full use of the container platform, a good software design practice is to break the application into microservices. The key motivation of a microservices-based architecture is to partition a large and complex monolithic software application into multi- ple smaller self-contained modules (referred to as microservices), where each microservice can be designed, built, and tested individually. Thus, when an application has to be scaled 2 Docker is a popular container implementation. The software that hosts the containers is called Docker Engine. For more details refer to (Docker). 6 Enabling Technologies App 1 App 1 App 1 Bins/Libs Bins/Libs Bins/Libs App 1 App 1 App 1 Guest OS Guest OS Guest OS Bins/Libs Bins/Libs Bins/Libs Hypervisor Docker Engine Host Operating System Host Operating System Server Infrastructure Server Infrastructure VIRTUAL MACHINES CONTAINERS Figure 6.2.2 Virtual machines versus containers. based on workload, only the particular microservices that are impacted by the workload are scaled instead of the entire application. As shown in Figure 6.2.3, scaling a VM typi- cally involves putting all the application functionalities into one server and replicating them across multiple servers. In contrast, in a microservice architecture, each functional compo- nent of an application is implemented as a service. Scaling is achieved by distributing these services across servers as 