Jakob Löhnertz

Enginyer de Software Sènior i líder d'equips

Vista prèvia del projecte Steinmetz – eina de descomposició de microserveis.

Steinmetz

Eina visual per descompondre aplicacions Java monolítiques en microserveis.

2 min de lectura

Què és?

Steinmetz és una eina que vaig crear per al meu treball de fi de màster que ajuda els equips a descompondre aplicacions Java monolítiques en microserveis mitjançant anàlisi visual i recomanacions basades en dades. En lloc de confiar únicament en el coneixement del domini o la intuïció, analitza el codi font des de múltiples angles i suggereix on s’haurien de dibuixar les fronteres dels serveis.

El nom ve de la paraula alemanya per a “picapedrer” – algú que talla i dona forma a la pedra. Em va semblar adequat per a una eina que trenca monòlits.

Pots trobar el document del treball de fi de màster aquí.

GitHub: https://github.com/loehnertz/Steinmetz

Per què el vaig crear

Les “transicions a microserveis” eren el tema popular durant l’any que estudiava. El problema és que decidir on dibuixar les fronteres és difícil, i la majoria del consell és vague (“contextos delimitats!”) sense orientació concreta.

Volia alguna cosa que pogués analitzar un codi font real i proporcionar recomanacions basades en dades en lloc de només principis. No per substituir el judici humà, sinó per informar-lo amb mètriques concretes.

Com funciona

Steinmetz analitza el codi backend des de quatre dimensions diferents:

  • Anàlisi estàtica: Examina l’estructura del codi font i les dependències (AST)
  • Anàlisi dinàmica: Processa el comportament en temps d’execució via enregistraments del perfilador
  • Anàlisi semàntica: Entén la semàntica del codi i les relacions mitjançant processament de llenguatge natural
  • Anàlisi evolutiva: Rastreja els patrons de desenvolupament a través dels registres de control de versions

Amb aquest enfocament múltiple, utilitza set algorismes diferents d’agrupament de grafs per identificar fronteres naturals de serveis dins de codis font monolítics. Un algorisme genètic optimitza els paràmetres d’agrupament per produir els millors pesos de descomposició.

flowchart TD
    S["Static Analysis\n(AST & Dependencies)"] --> C["7 Graph Clustering\nAlgorithms"]
    D["Dynamic Analysis\n(Runtime Profiling)"] --> C
    SE["Semantic Analysis\n(NLP Processing)"] --> C
    E["Evolutionary Analysis\n(Version Control)"] --> C
    C --> G["Genetic Algorithm\nOptimization"]
    G --> R["Service Boundary\nRecommendations"]
Com les quatre dimensions d'anàlisi alimenten l'agrupament i l'optimització

Funcionalitats principals:

  • Agrupament multialgorisme: Set algorismes diferents analitzen el codi font des d’angles diversos
  • Optimització amb algorisme genètic: Ajusta els paràmetres d’agrupament automàticament
  • Visualització avançada: Tres formats de visualització per explorar i validar les fronteres proposades
  • Requisits mínims: Només necessita codi font, registres de control de versions, i opcionalment dades del perfilador

Stack tecnològic

Vaig crear Steinmetz amb:

  • Backend: Kotlin per al motor d’anàlisi i l’API
  • Frontend: Vue.js per a visualitzacions interactives
  • Base de dades: Neo4j amb algorismes de grafs per a l’anàlisi de relacions
  • Desplegament: Docker i Docker Compose per a la configuració en contenidors

Tot el programari es distribueix sota la llicència Apache 2.0.

EN