# A Comparative Assessment of JVM Frameworks to Develop Microservices
###### Abstract  
With the ever-increasing wide spread of the Internet, the number of web services, web applications, and IoT devices is growing every year. This brings a number of challenges, both in terms of network bandwidth and the ability to scale individual computing nodes, whether they are large systems running in computing clouds or smaller IoT devices running closer to their data sources (so-called edge computing). In both cases, the way to cope with handling large numbers of users/requests is horizontal scaling, the implementation of which today is using the concept of microservices. However, the concept itself is not enough--we need ready-made application frameworks that allow us to easily implement and deploy efficient services. In the case of the Java ecosystem, which is one of the most mature platforms for enterprise-class software development, several frameworks dedicated to the development of microservices have been engineered recently. These tools support system developers in implementing communication, computation, and data storage mechanisms. However, so far, there is a lack of comparative analysis of individual solutions in the scholarly discourse to assess their performance and production maturity, so the authors in this article try to fill this gap. Based on synthetic tests developed by the authors, the most promising frameworks (Spring Boot, Micronaut, Quarkus) were analyzed both in terms of computational, compilation, or deployment performance. The results obtained can help system architects make rational and evidence-driven choices of system architecture and technology stacks. microservices; scaling: JVM; spring boot; quarkus; micronaut; benchmarks 2023133431033310331033103310331031033103  
the entire system--i.e., provisioning computing nodes, deploying successive instances of services on them, monitoring the load, and, finally, a specific approach to building software that gives little overhead for deployment and running. This is particularly important for two reasons. The first is to support scaling server-based systems (which provide their services to other clients including IoT devices) deployed in large data centers. The second is to increase the computing power of systems run at the edge (so-called edge computing), where individual computing nodes, often supporting IoT devices or being IoT devices themselves, have limited capacity. The emergence of an architectural style of software development and deployment called microservices [4] can be considered a milestone in the developing of horizontal scaling techniques for computer systems. The main principles behind the microservices approach are to divide a complex system into smaller self-containing, lightweight, independently deployable executable units that can be easily instantiated in multiple copies in areas of increased throughput demand when needed. A big significant advantage in deploying microservices is the ability to containerize them, that is, to package executable code with all dependencies and a minimalist operating system into a single file (a so-called image), which can then be deployed and run in multiple instances on the host operating system and even in a cluster. The most popular containerization standard at the moment is Docker, and the cluster used to host containers that allow them to scale dynamically is Kubernetes [5]. However, their use is not a prerequisite for building a system that follows the microservices approach. The need to scale services along with the ability to scale them dynamically (autoscaling) [3] when system load variability is challenging to predict makes the cloud computing model particularly interesting. This is because the owner of the system does not have to worry about the infrastructure, and does not need to buy it in advance, but can use the infrastructure provided by a third party and pay for it in a pay-as-you-go model, i.e., only for the computing resources actually allocated and consumed.