Microservices are a type of IT architecture. Their goal is to provide small business functionalities (or capabilities) in independent clusters that each for itself can provide a business outcome. The individual microservices would still function even if some other microservices stop working. This allows for independent development, deployment, and maintenance. In a monolithic architecture, this would not be possible.
So, what is a microservice?
Microservices are small, individual, and independent components of the software that, together, make an application. Microservices are business-oriented, which means that the software architecture focuses on business purposes, such as a business capability, or a particular product or service. Every microservice provides a small piece of software for a greater purpose. Therefore, microservices regularly communicate with each other when in operation. A major purpose of microservices is that they can be developed and deployed independently from each other. This leads to a decentralization of development teams in practice, which enables them to develop and deploy faster and with fewer dependencies and constraints. Due to the modular architecture and the increased amount of communication interfaces between the microservices, errors and failures can be analyzed more precisely. In addition, microservice architectures are usually designed in such a way that they still function in the case that single microservices have an error. A microservices architecture is often used in areas that are continuously developed further. In such environments, the advantages of independent development and deployment, as well as failure tolerance are of the highest importance.
How does a microservice architecture look like?
A microservice architecture puts single application functions into separate clusters. Those clusters are deployed in virtual hosting environments. In the early days, this would have been done via virtual machines, which virtualize the operating system so that applications can run in that cluster. Nowadays, this is normally done in containers, which only virtualize a small part of an operating system (e.g. libraries and images), while it accesses the operating system of the host environment. The result is much more lightweight and therefore faster scalable and cheaper in terms of computing and storage costs.
In a microservice architecture, there are many containers each containing a microservice. Those communicate with each other via standardized APIs. Therefore, if a microservice fails, the others are only affected if they require information from that particular microservice. If they do not, they continue to work normally. The standardization of APIs allows also for scaling microservices or replacing them – as long as the API standard stays the same. This allows for continuous development, deployment, and maintenance. This is also why microservice architecture is preferred in environments in which systems need to be continuously updated.
In a microservice architecture, application functions are clustered into containers, which run the microservices. The output of a microservice is a business capability. If you want to learn more about business capabilities, take a look here.
How does a microservice architecture help organizations?
Apart from the advantages mentioned above, there are additional benefits of microservices to an organization. Due to the standardization of the communication between them, the core of a microservice is not visible to the others. Hence, a microservice can be developed in the programming language that best suits the development team, the microservices, or that uses the most recent technology.
Further, IT architectures can become very large. By using microservices, responsibilities can be easily divided among different teams, making large IT landscapes manageable. Teams can develop their microservices and provide new code into a DevOps pipeline without fearing interdependencies with other microservices.