Microservices is a relatively new term in the world of software engineering. The microservice architectural style lets us develop a single application as an aggregation of small services. Each independent service will be lightweight mechanisms working on a specific scope, often with the support of an HTTP resource API. One desirable feature of microservice is that each service will be a unit of software that is independently replaceable and upgradeable.
Although software development is moving in the direction modularity, it will come up with its margin of complications.
The communication between microservices should be carefully handled. The requests traveling between modules should not be broken. Faulty communication between modules will cause inconsistent output.
Management of multiple databases can be painful with microservices.
Finding out bugs can be cumbersome. Since the application is an aggregation of small services, finding the origin of the bug will be difficult. Reproduction of an issue will prove to really hectic.
One worth serious consideration for enterprise applications is microservice. A simple and straightforward application can use monolithic architecture but it will become a maintenance nightmare if used for a larger/enterprise applications. Despite drawbacks and implementations challenges, the microservices architecture is superior for complex and evolving applications. The exertion of MicroServices by giants like NetFlix, Amazon, eBay, and others, provides enough mettle that this architectural style is here to stay.