Steinmetz
Eina visual per descompondre aplicacions Java monolítiques en microserveis.
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.
GitHub: https://github.com/loehnertz/Steinmetz
Per què el vaig crear
Havia vist múltiples equips tenir problemes amb la “transició a microserveis” on les bones intencions portaven a serveis massa granulars o a una mala separació de responsabilitats. 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 recolzades per 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
- 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
Utilitzant aquest enfocament multidimensional, empra set algorismes diferents d’agrupament de grafs per identificar fronteres naturals de serveis dins de codis font monolítics. Un algorisme genètic personalitzat després optimitza els paràmetres d’agrupament per produir les millors recomanacions de descomposició.
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ó diferents 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
El projecte complet està distribuït sota la llicència Apache 2.0 i representa 447 commits de treball de desenvolupament enfocat a fer la descomposició de microserveis més sistemàtica i menys arbitrària.
Què vaig aprendre
Crear Steinmetz em va ensenyar molt sobre la distància entre el consell teòric i les eines pràctiques. És fàcil dir “feu servir contextos delimitats” però molt més difícil identificar-los realment en un codi font de 10 anys amb una arquitectura inconsistent.
L’enfocament d’anàlisi multidimensional va resultar valuós – diferents algorismes destacaven aspectes diferents del codi font, i combinar-los donava una imatge més completa que qualsevol mètrica individual.
També vaig aprendre que la visualització és crucial. Els equips necessiten poder veure la descomposició proposada i entendre per què certes classes estan agrupades juntes. Les mètriques crues no convenç la gent; els grafs interactius sí.
L’eina està dissenyada per a equips que s’enfronten al repte de trencar monòlits legats. No prendrà les decisions per tu, però et donarà punts de partida concrets i recolzats per dades que són molt millors que endevinar.