Did you know the difference between virtual machines and containers?
What is virtualization?
Virtualisation has been known for quite a long time, at least since the 1974 seminal paper by G. J. Popek and R. P. Goldberg, who formalised the requirements to support virtualisation efficiently. At the time, the term referred to the full emulation in software on one computer system (guest) on another (host). Usually, the host and guest had different hardware architectures (CPU type, peripherals, …).
This type of virtualisation has been used with success for the emulation of long gone hardware systems, not commercially available anymore, for both specialised production systems and entertainment (for instance, the popular arcade console emulator MAME was first released in 1997). This kind of virtualisation is very demanding from the point of view of compute resources needed on the host.
The situation changed around the mid 2000s, when both Intel and AMD added to their processors the instructions for hardware-assisted virtualisation. This enabled a much more efficient virtualisation and opened the door to a new business based on renting unused compute infrastructures, started at Amazon as a way to recover the investments in hardware, which had to be provisioned for holiday seasons and remained very lightly loaded at other times of year. Such business became so profitable that Amazon grew an infrastructure dedicated to it, followed by Google and Microsoft. Today, the three companies together own a 60% share of the entire cloud computing business.
One of the crucial reasons why so many businesses accepted to move their compute infrastructure to the cloud is that virtual machines provide a very tight isolation: the companies are able to manage 100% the guest computer system, with no interference from either the cloud provider (who runs and manages the host computer systems through so-called hypervisors) or peer customers.
In parallel, in the past decade, a transformation of the software architectures has been ongoing, which has converted monolithic multi-purpose applications relying on huge relational databases into smaller single-purpose applications interacting through loose intermediaries, called micro-services. Due to their nature, it made sense from a software perspective (for deployment, management, supervision, etc.) to continue to assume that every micro-service would have its own virtual machine. But, unfortunately, this was soon found to be very inefficient from the point of view of resource utilisation.
The need for more lightweight virtualisation abstractions has led to the birth, and fast adoption, of containers. A container is a user-space program that runs in the same computer as its host but in a different namespace: the container only “sees” what the host operating system decides to show, e.g., only some directories (containing the operating system binaries and libraries, which do not need to be copied into the guest filesystem) or some network interfaces (typically virtual). By necessity, the container and host have to be compiled for the same hardware architecture, but this is not a problem as the same requirement also holds for hardware-assisted virtualisation.
Unlike virtual machines, the containers do not enjoy a very tight isolation and they cannot be managed independently from the host. Rather, since typically a production-grade application consists of many container types and instances, management is very often automated, e.g., via Docker or Kubernetes. Today, most new applications are deployed in containers rather than in virtual machines.
Virtualization in MARVEL
In MARVEL we will use containers to deploy the applications of our target use cases in the three projects pilots (Malta, Trento, Novi Sad). This will simplify the integration of contributions from the different contributing partners, as well as allow automated management and flexible adaptation to varying conditions.
- Project Coordinator: Dr. Sotiris Ioannidis
- Institution: Foundation for Research and Technology Hellas (FORTH)
- E-mail: firstname.lastname@example.org
- Start: 01.01.2021
- Duration: 36 months
- Participating Organisations: 17
- Number of countries: 12
This project has received funding from the European Union’s Horizon 2020 Research and Innovation program under grant agreement No 957337. The website reflects only the view of the author(s) and the Commission is not responsible for any use that may be made of the information it contains.