Contesto
Sto sviluppando un'applicazione java Spring Boot. Attualmente è un monolite con il resto dell'API e il front-end (basato su vaadin) nello stesso grande progetto.
Sebbene sia molto facile da sviluppare e implementare, è sempre più difficile aggiungere funzionalità. Ci sono troppe preoccupazioni nella stessa applicazione.
Inoltre, ho eseguito alcuni test di carico sulla mia app e non sono sopravvissuti più di ~ 1.5k (virtuali) utenti che lo utilizzavano durante 1 minuto (da +/- 1000 a 4000 richieste / s).
Cosa ho già studiato
Ho letto dei microservizi per il ridimensionamento ma dovrei dover riscrivere quasi l'intera applicazione per questo, dal momento che tutti i miei dati sono relazionali e memorizzati in un database relazionale (e non ho idea di come cambiare quello a dati indipendenti).
Il problema
Quello che ho cercato di fare ora è dividere il progetto in tre sottoprogetti. Un progetto di dati che contiene tutti i domini e servizi, un progetto API che contiene l'API REST e un progetto front-end interno che contiene il frontal interad vaadin.
Il progetto di dati sarebbe solo una libreria per gli altri progetti. Il progetto API e il progetto di frontend includevano entrambi questo progetto di dati nel loro gradle ed entrambi utilizzerebbero questo progetto come libreria per accedere al database.
La suddivisione di questo progetto è piuttosto difficile e non so nemmeno se questa è la strada giusta da seguire. Quindi, in questo caso, sta dividendo una decisione corretta?
Il mio processo di pensiero è stato che una volta suddivisi i progetti, avrei potuto sviluppare con più facilità, e inoltre avrei potuto generare istanze API indipendenti e collegarle a un servizio di bilanciamento del carico (sebbene tutti utilizzerebbero lo stesso database).
D'altro canto, questa scissione sta causando molti problemi di dipendenza dal momento che il progetto originale era Spring boot e il progetto di dati non sarebbe "eseguibile" (quindi non può dipendere dal plugin di avvio come ho letto). Ma questa è una domanda per StackOverflow solo se l'architettura è giusta.
TL; domande DR
- È corretto utilizzare un progetto con dominio e livello di servizio, come libreria?
- È corretto accedere allo stesso database con più di un'applicazione?
- In caso contrario, qual è la forma corretta di dati di acessing (lettura e scrittura) da istanze di un progetto API (per bilanciare il carico)?