The approach to application deployment has changed dramatically over the past two decades. When low-cost basic servers replaced mainframes in the late 1990s and early 2000s, companies finally found a convenient way to isolate applications from each other:
- they have been able to deploy only one main service on each physical machine;
- they configured each server according to the resource and security needs of the application it was hosting. This was useful because if a server failed, only one application would be affected.
There was, therefore, a huge growth in the number of servers within data centers, which made them less and less manageable and, consequently, less utilized.
With the new era of virtual machines (VMs), it has been possible to use computing resources more efficiently by allowing the same hardware to host more than one server, each of which behaves as a stand-alone machine.
However, in recent years all web platforms have begun to adopt a different method of infrastructure partitioning and a new type of application architecture, using containers, microservices and orchestrators, respectively.
What are containers?
Containers are a lightweight alternative to virtual machines for providing isolated operating environments for workloads, using a different method of abstracting resources. Instead of relying on a hypervisor, containers share the host operating system (OS) kernel. As a result, they avoid the infrastructure overhead of a full OS and provide only the resources that applications actually need. This means they can be stopped and started more quickly in response to fluctuations in scalability requirements and offer better overall performance than virtual machines. In addition, by construction, they turn out to be an isolated system with all the dependencies needed for the service they host, thus being portable and shareable across different infrastructures.
What are microservices?
The microservice architecture is an approach to software design in which an application is divided into a distributed set of services that interact with each other. Each microservice performs its specific function independently of the other microservices that make up the application. Microservices are a logical fragmentation that fits well with containers, which offer fine-grained control over resource allocation and more efficient use of computing capacity.
What are orchestrators?
Orchestrators are a higher level of abstraction, allowing for a global management interface for individual containers. Since each container is a microservice, it may be necessary to have hundreds of them, making their administration very complex. Orchestrators, on the other hand, allow containers to be logically grouped together, making troubleshooting activities easier. Similarly, they can contribute to better infrastructure management by decreasing the number of interventions needed, for example, to allocate resources, configure networks and assign dedicated volumes.
Containerized microservices provide greater resilience than a traditional monolithic application. In the event of failure of a single component, it can be replaced in seconds by a clone of it, and none of the other services will stop working. In addition, fragmentation makes it possible to allocate only the required amount of resources, thus making hardware utilization more efficient.