by Reza RahmanPresentation was based on this article
In its essence this phenomenon is simply breaking down large and complex applications into smaller, independent (in terms of deployment) parts.
And because it has reached the point of becoming a full fledged technology hype there are both a lot of success stories, where microservices are adopted with great success, and a lot of failures where misconceptions about how they are supposed to work have lead to unnecessary increase of complexity of the system, unbearable management and disappointing results.
What successful microservices usually focus on :
- creating components that work in a service oriented architecture (SOA)
- using lightweight and popular protocols like REST for communication
- utilizing some messaging (e.g. JMS) technology in cases where there is a lot of chatter between the components
What creators of microservices should avoid :
- EJBs are hardly the best technology to build microservices with
- focus on building ridiculously small services
- CI, DevOps and granular testing are often hard to achieve
The need to build microservices in the first place is often rooted in large, monolithic applications, where the team has grown so much and the codebase - so complex, that maintenance has become a nightmare. Even worse - in the modern world a successful application needs to be very elastic - it needs to scale easily so it could fit it's users needs and also provide some advanced availability failover mechanisms. Typically this is very hard to achieve with a monolithic applications. Microservices to the rescue!
Hype vs reality
Microservices come with a cost.
- They require a much more elaborate form of administration, deployment and monitoring
- They increase the complexity of testing, debugging and diagnostics
- They also add new challenges such as the one with code sharing and defining module boundaries
- They operate under some false assumptions (see Fallacies of distributed computing)
(map of the Netflix microservices, source )
Where is Java EE in this picture
Here is a good example of converting a monolithic application to a set of microservices using Java EE
- Microservices by Martin Fowler
- Microservices is SOA, for those who know what SOA is