Microservices is a form of service-oriented architecture style wherein applications are built as smaller services. Instead of a monolithic application, you have several independent applications loosely coupled and each one provide a different service.
Services communicate using either synchronous protocols such as HTTP/REST or asynchronous protocols such as AMQP.
Services can be developed and deployed independently of one another. Each service has its own database in order to be decoupled from other services. Data consistency between services is maintained using the Saga pattern
Let’s imagine that you are building an e-commerce application that takes orders from customers, verifies inventory and available credit, and ships them. The application consists of several components including the StoreFrontUI, which implements the user interface, along with some backend services for checking credit, maintaining inventory and shipping orders. The application consists of a set of services
Each service is :
Easy to understand.
Faster to develop in an IDE.
Can be deployed independently.
Easy to maintain.
Difficult to achieve strong consistency across services.
ACID transactions do not span multiple processes.
Distributed System so hard to debug and trace the issues.
Greater need for end to end testing.
Required cultural changes in across teams like Dev and Ops working together even in same team.