Microservice: Preliminary Definition
The new aspect is that microservices use modules that run as distinct processes. This approach is based on the philosophy of UNIX, which can be reduced to three aspects:
- • One program should fulfill only one task, but it should perform this task really well.
- • Programs should be able to work together.
- • A universal interface should be used. In UNIX this is provided by text streams.
The term microservice is not firmly defined. Chapter 3, “What Are Microservices,” provides a more detailed definition. However, the following criteria can serve as a first approximation:
- • Microservices are a modularization concept. Their purpose is to divide large software systems into smaller parts. Thus they influence the organization and development of software systems.
- • Microservices can be deployed independently of each other. Changes to one microservice can be taken into production independently of changes to other microservices.
- • Microservices can be implemented in different technologies. There is no restriction on the programming language or the platform for each microservice.
- • Microservices possess their own data storage: a private database or a completely separate schema in a shared database.
- • Microservices can bring their own support services along, for example a search engine or a specific database. Of course, there is a common platform for all microservices—for example virtual machines.
- • Microservices are self-contained processes or virtual machines, e.g., to bring the supporting services along.
- • Microservices have to communicate via the network. To do so microservices use protocols that support loose coupling, such as REST or messaging.
Microservices are the opposite of deployment monoliths. A deployment monolith is a large software system that can only be deployed in one piece. It has to pass, in its entirety, through all phases of the continuous delivery pipeline, such as development, the test stages, and release. Due to the size of deployment monoliths, these processes take longer than for smaller systems. This reduces flexibility and increases process costs. Internally, deployment monoliths can have a modular structure; however, all modules have to be brought into production simultaneously.