During the last months, I’ve been researching and experimenting with microservices and Vaadin applications. My goal was to test Vaadin “compatibility” with some of the techniques associated with microservices. In short, Vaadin is as compatible with microservices as any other component-based web framework. Moreover, many of the challenges you would face when implementing microservices with Vaadin you would face with any JavaScript/HTML framework.
Microservices bring advantages such as independent development and deployment of services, but they come with a cost, mainly, an increase in complexity, brilliantly explained by Dave Kerr in his article The Death of Microservice Madness in 2018, a highly recommended read for everyone evaluating microservices. One of the key technical challenges with microservices which is related to web frameworks is how to create a “mash-up” UI that combines two or more web applications.
Ignoring the fact that microservices embrace technology independence to some extent (that is, teams can decide which technologies to use, including web frameworks), I was interested in how to render two independently deployed Vaadin applications into one single page in the browser. It turned out, again, the challenges I faced were almost the same I would have faced with any other web framework, especially, dealing with CSS and JavaScript collisions and HTTP session management.
I was able to develop an application using Spring Boot with Spring Cloud to show a web page with a CRUD UI on the left and a Twitter feed on the right, both developed with Vaadin:
Running this application requires starting at least 7 processes, 3 orchestration services, 1 back-end service, and 3 web applications:
You can find detailed information about my experiment in this series of articles:
- Getting Started with Microservices
- Microservices: Service Registration and Discovery
- Microservices: Externalized Configuration
- Microservices: Consuming stateless services from Vaadin UIs
- Microservices: Fault Tolerance
- Microservices: UI composition
- Microservices: High availability
- Microservices: Health monitoring