“Write programs that do one thing and do it well” – Unix Philosophy
Microservices is a modern architectural style in which applications are designed as collections of services that are accessed through a defined set of service APIs.
In a microservices architecture, each application is expected to perform just one task and is independent of the status of other services which means each service is loosely coupled with other services and is independently deployable. Another important feature of each microservice is the ease of maintenance and testability.
Microservices interacts with each other and may also interact with external systems. Services may need to be load balanced or new instances of same services can be spawned if load of a system rises.
With microservices we ultimately build applications which service external system and like any other applications these needs to be designed the standard way other applications must be developed. This means to simplify development and deployment process we need to follow the widely accepted 12-factor methodology of app development.
Microservices composes of services which interact with one another. These connections are like wires connecting our electrical equipments in buildings and get very messy. To simply these complexities we need to design the interactions and interfaces. Otherwise the domino effect of even small failure can be catastrophic for over all system like in the following GIF: