The whole notion of microservices is about the separation of concerns. This requires a logical and architectural separation between the services with different responsibilities. Here are a few guidelines to design the microservices.
These guidelines are in line with the 12-factor applications guidelines given by Heroku engineers:
- Lightweight: Microservices have to be lightweight in order to facilitate smaller memory footprints and faster startup times. This facilitates faster MTTR, and allows for services to be deployed on smaller runtime instances, hence horizontally scaling better. Compared to heavy runtime times, such as application servers, smaller runtimes such as Tomcat, Netty, Node.js, and Undertow are more suited. Also, the services should exchange data in lightweight text formats, such as JSON, or binary formats, such as Avro, Thrift, or...