In recent years microservices have emerged as a new architectural style, offering enhanced scalability, maintainability, and agility compared to monolithic structures. Consequently, numerous organizations like Netflix, Facebook and Amazon among others, have started their transition towards microservices-based environments. Nevertheless, this migration process is usually complex and challenging to be manually performed, and requires careful planning and execution. As a result, several software solutions have been developed to automate the delineation of microservice boundaries, optimizing service decoupling, enhancing internal cohesion, and minimizing inter-service communication, leaving to the user the actual code refactoring. In this perspective we designed "Menhir", a semi-automatic tool bridging the gap between the microservice identification and the actual microservices implementation of the monolith. Specifically, provided a couple of configuration files as input, Menhir decomposes a Spring Boot-based web application into the designated number of microservices, thus modifying the associated classes and methods. For instance, this could result in direct calls transformed into remote ones, or in database relationships previously enforced at the DB level now managed at the application layer. We evaluated our work on two applications: one self-created to elicit most of the features, and one publicly available taken from GitHub. Our examination, focused on verification and validation, has shown promising results, especially when compared to the resource-intensive nature of manual decomposition. Therefore, we are confident that, with the help of some future enhancements, Menhir could proficiently tackle a majority of standard Rest decomposition scenarios.

Negli ultimi anni le architetture a microservizi sono emerse come nuovo stile architetturale, offrendo maggiore scalabilità, manutenibilità, e agilità rispetto alle strutture monolitiche. Di conseguenza, molte organizzazioni quali Netflix, Facebook ed Amazon fra tutte, hanno intrapreso il loro processo di transizione verso ambienti a microservizi. Tuttavia, questo processo di migrazione è solitamente complesso e impegnativo da svolgere manualmente, richiedendo un’attenta progettazione ed esecuzione. Pertanto, diverse soluzioni software sono state sviluppate al fine di automatizzare il delineamento dei confini di ogni microservizio, ottimizzare il disaccoppiamento, migliorare la coesione interna, e minimizzare le chiamate tra microservizi diversi, lasciando all’utente il refactoring del codice. In quest’ottica abbiamo sviluppato Menhir, un tool semi-automatico con l’obiettivo di colmare il divario tra l’identificazione dei microservizi e la vera e propria implementazione in microservizi del monolite. In particolare, forniti in ingresso due file di configurazione, Menhir decompone una web application basata su Spring Boot nel numero designato di microservizi, modificando quindi le relative classi e metodi. Ad esempio, questo può significare una conversione di una chiamata diretta ad una remota, o una relazione gestita a livello di DB ora controllata a livello applicativo. Abbiamo esaminato il nostro lavoro su due applicazioni, una creata da noi stessi al fine di sollecitare tutte le caratteristiche, ed una disponibile pubblicamente presa da GitHub. La nostra analisi, focalizzata su verifica e validazione, ha mostrato risultati promettenti, specialmente quando comparati con la quantità di risorse necessarie in una decomposizione manuale. Siamo quindi fiduciosi che, con l’aiuto di qualche miglioria futura, Menhir possa affrontare in modo proficuo la maggior parte degli scenari di decomposizione Rest.

Menhir: semi-automatic tool for monolith to microservices code rewriting

Cappelletti, Edoardo;BRUNATI, STEFANO
2022/2023

Abstract

In recent years microservices have emerged as a new architectural style, offering enhanced scalability, maintainability, and agility compared to monolithic structures. Consequently, numerous organizations like Netflix, Facebook and Amazon among others, have started their transition towards microservices-based environments. Nevertheless, this migration process is usually complex and challenging to be manually performed, and requires careful planning and execution. As a result, several software solutions have been developed to automate the delineation of microservice boundaries, optimizing service decoupling, enhancing internal cohesion, and minimizing inter-service communication, leaving to the user the actual code refactoring. In this perspective we designed "Menhir", a semi-automatic tool bridging the gap between the microservice identification and the actual microservices implementation of the monolith. Specifically, provided a couple of configuration files as input, Menhir decomposes a Spring Boot-based web application into the designated number of microservices, thus modifying the associated classes and methods. For instance, this could result in direct calls transformed into remote ones, or in database relationships previously enforced at the DB level now managed at the application layer. We evaluated our work on two applications: one self-created to elicit most of the features, and one publicly available taken from GitHub. Our examination, focused on verification and validation, has shown promising results, especially when compared to the resource-intensive nature of manual decomposition. Therefore, we are confident that, with the help of some future enhancements, Menhir could proficiently tackle a majority of standard Rest decomposition scenarios.
CUGOLA, GIANPAOLO
ING - Scuola di Ingegneria Industriale e dell'Informazione
5-ott-2023
2022/2023
Negli ultimi anni le architetture a microservizi sono emerse come nuovo stile architetturale, offrendo maggiore scalabilità, manutenibilità, e agilità rispetto alle strutture monolitiche. Di conseguenza, molte organizzazioni quali Netflix, Facebook ed Amazon fra tutte, hanno intrapreso il loro processo di transizione verso ambienti a microservizi. Tuttavia, questo processo di migrazione è solitamente complesso e impegnativo da svolgere manualmente, richiedendo un’attenta progettazione ed esecuzione. Pertanto, diverse soluzioni software sono state sviluppate al fine di automatizzare il delineamento dei confini di ogni microservizio, ottimizzare il disaccoppiamento, migliorare la coesione interna, e minimizzare le chiamate tra microservizi diversi, lasciando all’utente il refactoring del codice. In quest’ottica abbiamo sviluppato Menhir, un tool semi-automatico con l’obiettivo di colmare il divario tra l’identificazione dei microservizi e la vera e propria implementazione in microservizi del monolite. In particolare, forniti in ingresso due file di configurazione, Menhir decompone una web application basata su Spring Boot nel numero designato di microservizi, modificando quindi le relative classi e metodi. Ad esempio, questo può significare una conversione di una chiamata diretta ad una remota, o una relazione gestita a livello di DB ora controllata a livello applicativo. Abbiamo esaminato il nostro lavoro su due applicazioni, una creata da noi stessi al fine di sollecitare tutte le caratteristiche, ed una disponibile pubblicamente presa da GitHub. La nostra analisi, focalizzata su verifica e validazione, ha mostrato risultati promettenti, specialmente quando comparati con la quantità di risorse necessarie in una decomposizione manuale. Siamo quindi fiduciosi che, con l’aiuto di qualche miglioria futura, Menhir possa affrontare in modo proficuo la maggior parte degli scenari di decomposizione Rest.
File allegati
File Dimensione Formato  
2023_10_Cappelletti_Brunati_01.pdf

accessibile in internet solo dagli utenti autorizzati

Descrizione: Thesis
Dimensione 3.53 MB
Formato Adobe PDF
3.53 MB Adobe PDF   Visualizza/Apri
2023_10_Cappelletti_Brunati_02.pdf

accessibile in internet solo dagli utenti autorizzati

Descrizione: Executive Summary
Dimensione 868.09 kB
Formato Adobe PDF
868.09 kB Adobe PDF   Visualizza/Apri

I documenti in POLITesi sono protetti da copyright e tutti i diritti sono riservati, salvo diversa indicazione.

Utilizza questo identificativo per citare o creare un link a questo documento: https://hdl.handle.net/10589/209154