Much has surely been heard about microservices, however, the probability of knowing and widely understanding the concept is perhaps low. Talking about Microservices Architecture is, basically, referring to a method of development of applications or software systems, made up of smaller services that provide complete business functionality (microservices).
Each microservice performs a specific function deployed in isolation with its own database, being able to communicate with other microservices. On the sidewalk in front, you will find the most traditional monolithic solutions, where all the functional elements are united in a program or application.
The use of microservices has grown considerably in recent years. However, the lack of consensus in the definition of what is a microservice and what methodology to adopt in the migration of traditional services for this new paradigm presents several challenges to IT teams. With time and resources dwindling, making services available quickly has become essential for IT teams.
Although microservices have emerged in the software industry and have been the focus of software developers in the last decade, in academia there are several lines of research that need to be addressed on this subject. On the other hand, a still little explored line of research is the use of DevOps for infrastructure management, which aims to establish a culture in development teams in order to build and deliver software quickly and reliably.
Along these lines, a currently recommended practice is the use of container technologies, as they consume few resources, are scalable and allow rapid migration between heterogeneous infrastructures. Having a well-defined integration of the use of microservices architecture and container technology would allow to deliver an environment in an agile and scalable way. This new paradigm guarantees a plasticity to meet simple demands of companies as well as to support global scale demands, such as smart cities. In this way, researchers and IT teams can focus on what really matters: efficiently generating solutions and value for society and their companies.
Microservices have grown linked to container technology. Containerization is a technology to virtualize applications in an agile way, resulting in significant savings in the administration of applications in the cloud. However, how to build, deploy and orchestrate containers, individually and in clusters, has become a central problem. Each container works as an isolated process in user space, using fewer resources than a virtual machine, with the process starting almost instantaneously. Since there is no hardware virtualization layer, container overhead is minimal.
This technology allows you to isolate and track the use of resources, promoting a marked increase in performance and optimization of the use of hardware. For developers this represents a notable advantage, since they do not have to worry about what the host machine of the application would look like, so that the container can be easily transferred to other computers, making the productivity gain one of the greatest attractions. for new adopters of this development model.
However, all this availability of new architectures and technologies has a cost, and in the case of microservices and containers, it is the absence of a standard model for the implementation of an infrastructure where it is possible to integrate them, providing a stable environment and agile for teams. On the microservices side, these are specified using standards such as OpenAPI or Swagger, while from the container perspective, Docker has become the dominant technology. Tools like Docker 1 play the role of containers and act as portable means of packaging applications. In effect, there is a need to manage dependencies between application containers.
Tools like Kubernetes 2 is a case of container orchestration. Kubernetes enables a container-based deployment within platform-as-a-service (PaaS) clouds. It can provide a cloud-native application, and even a horizontally scalable, distributed system comprised of microservices, with operational capabilities such as resilience and elasticity support.