27 November 2015

Is there anything new in the field of Web Services

by Reza Rahman
Presentation was based on this article

The term "micro services" has been used a lot in the software industry but there hasn't been a very clear definition of what it really means.

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

References:

No comments: