Micro services are regular REST services with a narrow functional scope. Micro services don’t implement full CRUD functionality, but just a one or more POST methods. Micro services and their underlying resources are deployed in a single container. Containerization gives micro services specific performance and reliability benefits that sets them apart from other types of services.
The benefits of micro services include:
- Small components. Micro services are easy to design (targeted requirements), develop and test.
- Environmental isolation. Micro services don’t have shared resources. This leads to better performance, reliability and fine-grained scalability.
- Agility. Micro services allow for parallel development with small, autonomous teams and continuous delivery (CI/CD). No monolithic deployment.
The above benefits are specific to individual micro services. The more and finer grained the micro services become, the more challenges you will encounter. The impacts will likely be minimal if you peripherally use coarse-grained micro services as part of a larger solution. Common micro service design challenges include:
- Complexity of a distributed system with many fine-grained micro services. Complexity can come from: communication latency, unreliable networks, sensitivity to errors and complexity of the underlying infrastructure.
- Increased network traffic. Fine-grained micro services elevate the need for cross-service (asynchronous) communication.
- Increased data synchronization requirements. In a micro service environment databases are replicated and constantly need to be synchronized (pattern: eventual consistency).
- Integration effort for disparate API’s. Differences between micro services are overcome through a complex integration layer with many orchestrations, data format transformations, data model transformations and protocol bridging.
- Increased operational overhead. Each micro service has its own lifecycle for change and release management (versioning) and thus needs to be managed and operated independently.