Creating Java Microservices to Improve Business Agility
Our client is one of the biggest low-cost carriers in Europe, with thousands of routes to more than 270 destinations. One of their mission statements from the very beginning was to make flying affordable to everyone. As a result, they have been recognized for their achievements in this regard with prestigious awards such as the Passengers’ Choice Awards for Best Low-Cost Carrier in Europe and as the Best Low-Cost Long-Haul Airline by Skytrax World Airline Awards.
Business Issue (Dismantling the Monolith)
The client’s ticket booking system was part of a legacy monolithic architecture that made it difficult for customers to search for flights and generate the ticket’s cost. In addition, there was significant lag time, and it was difficult for the system to handle the volume of incoming internet traffic, especially sudden spikes. They needed something more flexible, and what better serves customer needs.
The application was broken down into microservices individually for each function. For example, the search function was now a separate microservice, as was the price formation and all of the other features. The microservices were created with Java and Spring because it is a very easy framework for creating and running the microservices in production at scale. This framework also helps with the distributed nature of the microservices and allows us to mitigate these risks.
Since there are many microservice in play, it is crucial to make sure that they can all communicate with each other. We used our Java and Spring framework expertise to create service discovery, load-balancing distributed tracing to pinpoint poor performance and possible failures.
Powering Business Agility with Microservices
Thanks to the new Java microservices architecture, the client was able to increase the resilience of their application. Previously, a single failure in the code in one part of the application could have side effects on other services. Even if the client brought down specific systems for maintenance, it would go almost unnoticed by the users.
The client was able to scale a single service without having to scale the entire application. It was now possible to deploy multiple instances of every service to improve availability. Having such flexibility allowed them to account for sudden spikes in traffic and achieve greater flexibility to handle unexpected business needs.
We implemented CI/CD for microservices, which allowed us to reduce the development time significantly. Now, one team could release an update to one service at any time without having to wait for all of the changes made to another service to be merged, tested, and deployed. The implementation also decreased the time to market, which also helped increase customer satisfaction.