The team at Vodafone Greece kept trying to make do with its legacy systems but the need for a nimbler option became impossible to ignore. Christos Sotiriou, backend chapter lead at Vodafone Greece, says they wanted to better serve requests and increasing demand on services such as distant payment solutions and mobile applications. He says they had been using a monolithic service architecture that was in place for decades. A newer option emerged when Quarkus came on the scene.
In 2019, Red Hat rolled out its build of Quarkus, a container-first, next-generation Kubernetes-native Java stack. It is billed as a more cloud-oriented option for app development that spoke to the needs at Vodafone Greece.
At the time, Vodafone Greece was dealing with long development cycles that needed to be trimmed down to be more reactive, Sotiriou says. “In order to push a new feature, no matter how small, it required two or three months of development.” The volume of people developing on the same architecture became a problem, he says, along with delays in aggregation to present information to users.
That led to Vodafone introducing a digital experience layer, based on Kubernetes and comprised of microservices that sit between the front-end channels, including web and mobile applications, and backend systems. “In this Kubernetes cluster, we have developed 80 microservices,” Sotiriou says. The goal is to develop up to 300 microservices, he says, when the full scope of the digital experience layer is realized.
Sotiriou says his team worked with the Spring Boot framework when they began developing microservices. Though he says Spring Boot is widely used, his team had concerns. “We became increasingly worried about resource consumption that Spring Boot was having while being deployed on the Kubernetes cluster,” Sotiriou says. For example, they faced slow boot times when a microservice was deployed because systems needed to be aggregated before it could come online.
Vodafone Greece was eventually able to decrease boot times of about 2 minutes to around 60 seconds, Sotiriou says, but a search began to find alternatives. “It became increasingly cumbersome to find ways to circumvent the methodology we were using just to squeeze ever little bit of performance out of Spring Boot,” he says.
Delays in booting, especially during traffic spikes, can cause headaches with microservices and result in an unhealthy cluster, Sotiriou says. “If booting of a new microservice takes too long it means that the old microservice that is already running is going to be killed because of heavy load.”
The development of Quarkus was a response to the need to alleviate overhead and better serve modern ecosystems, says Rich Sharples, senior director of product management at Red Hat. “Java was designed for a very, very different era of computing with big honking, mainframe-class Solaris servers running for years and decades,” he says. “That’s not the world we live in.”
Now in a containerized world, the resources that applications have access to are much smaller, Sharples says. In extreme cases, he says, such as functions-as-a-service, applications may only get enough memory and CPU to run a function one time. “That’s what we are trying to change with Quarkus,” Sharples says, “to move a lot of that processing into the compilation stage so it doesn’t affect your startup time and to lower the significant memory overhead that Java comes with.”
Sotiriou says his team considered options that included Node.js and Golang but went with Quarkus because of the ecosystem and programming language choice. In March 2019, he says his team began writing their entire stack toward Quarkus. “Not only were we beginning to write microservices using Quarkus, we also had a plethora of common libraries, shared libraries across the whole ecosystem we needed to rewrite as well.” That included common business cases that the microservices were using such as customized database connectivity and authorization authentication.
Vodafone Greece entered into a staggered migration, Sotiriou says, where the team initially tried to keep older applications running as they moved Spring Boot into maintenance phase while newer applications were written in Quarkus. The need to accelerate that migration became apparent earlier this year.
In January, Vodafone Greece released a new version of the My Vodafone application. Sotiriou says it was the first time the digital experience layer was used to draw the main screen for the app. “The main screen had so much information that we needed to aggregate information from three or four or five microservices at the same time,” Sotiriou says. When this version of the app was rolled out to about 30% of Vodafone Greece users, problems emerged. “The microservices the main screen used were written in Spring Boot, so it nearly tore down our cluster,” he says.
With increased traffic spikes, there were long boot times of about 40 seconds, Sotiriou says. The app was rewritten in Quarkus to rectify the issues, using half the resources. He says using Quarkus in JVM (Java Virtual Machine) mode without compiling to native led to boot times of about 14 seconds, a 60% performance increase. “That was the breaking point for us,” Sotiriou says. “We decide to migrate even more microservices from Spring Boot to Quarkus.” Vodafone Greece now has 40 microservices written in Quarkus, with another 20 microservices in the pipeline, he says.
For more information on DevOps and Cloud, read these articles: