Microservice architectural style is an approach to developing a single application as a suite of small services.
Services are built around business capabilities , independently deployable and packaged, each running in its own process.
Each Service should have separate database layer.
Each Service can have independent codebase, CI/CD tooling sets.
Each Service can be tested in isolation without dependent on other services.
Each service can pick the best technology stack for its use cases (no need to stick into one framework throughout the entire application).
Each Service should have monitoring and troubleshooting capabilities for operation team
Services should implement Retry functionality in case of network failure or system failure
Each Service can implement independent security mechanism
The main difference between SOA and MicroServices is that a microservice employs a practice that attempts to eliminate any dependencies on other microservices. SOA does not make this
practice explicit as a requirement.
Services can use HTTP(Rest) or messaging for communication or any other lightweight communication protocol.
Well understood Distribution Transaction management
Presenting API
Clean and Clear Separation of Stateless and Stateful Services
Do Not Share Libraries or SDKs
Each Service can be run without waiting for other service to go online
Implement a Self-Registration and Discovery Mechanism
Service can use different language,framework and technologies
Maintain Independent Revisions and Build Environments to maintains compatibility with other services.
An architect can explicitly check for rules and constraints.
https://medium.com/@anilkkurmi/20-characteristics-of-microservices-architecture-fbd3da151384