Developers need to deal with the additional complexity of creating a distributed system.
Complete end-to-end testing is difficult. Due to distributed deployment, testing can become complicated and tedious as compared with Monolith applications.
The Increasing number of services can result in information barriers.
Inter-service communication mechanism is required.
Implementing use cases that span multiple services without using distributed transactions is difficult and requires careful coordination between the teams.
Increased memory consumption. The microservice architecture replaces N monolithic application instances with NxM services instances. If each service runs in its Container, which is usually necessary to isolate the instances, then there is the overhead of M times as many Containers.
When the number of services increases, integration, and managing whole products can become complicated.
https://www.javatpoint.com/advantges-and-disadvantages-of-microservices
Benefits:
Self-contained, and independent deployment module.
Independently managed services.
In order to improve performance, the demand service can be deployed on multiple servers.
It is easier to test and has fewer dependencies.
A greater degree of scalability and agility.
Simplicity in debugging & maintenance.
Better communication between developers and business users.
Development teams of a smaller size.
Drawbacks:
Due to the complexity of the architecture, testing and monitoring are more difficult.
Lacks the proper corporate culture for it to work.
Pre-planning is essential.
Complex development.
Requires a cultural shift.
Expensive compared to monoliths.
Security implications.
Maintaining the network is more difficult.