Al momento disponiamo di una grande applicazione web Django: tutti i dati sono gestiti centralmente dalla webapp, tramite i modelli supportati da Postgres.
Vogliamo offrire l'accesso ai dati in modo più decentralizzato, e la soluzione alla quale miriamo è fornire piccoli uServies che si occupino dei diversi domini applicativi. Cioè, da questa architettura:
- Django + singolo DB
Vogliamo passare alla seguente architettura:
- Django (senza dati)
- uServizio 1 + DB1
- uService 2 + DB2
- ...
Quindi avremo un percorso di transizione agevole: la webapp continuerà a funzionare come prima, ma ora avremo la possibilità di offrire l'accesso ai dati in maniera dettagliata, con requisiti diversi (per la scalabilità, ... ) per ciascuno dei nostri domini applicativi.
Il refactoring deve essere eseguito nel modo seguente:
- La webapp di Django deve rimanere invariata (ad eccezione dei modelli). In particolare, le visualizzazioni e i modelli devono rimanere invariati.
- Ciascun uService gestirà un sottodominio problematico e sarà completamente autonomo, offrendo accesso ai dati tramite REST. La tecnologia per ogni uService non è definita: potrebbe essere DRF, o Flask, o Scala, o Java, non ha molta importanza; questo è in realtà uno dei punti di forza della nuova architettura: ogni problema può essere risolto con lo strumento giusto per il lavoro.
- L'accesso tramite la webapp django alla fine OTTIENE / POST / DELETE / PUT dai servizi u.
Come si può usare Django in questo modo? Idealmente avremmo ancora dei modelli nella webapp, ma invece di essere supportati dal database, dovrebbero accedere agli endpoint REST per ottenere / modificare i dati.
Esistono applicazioni di esempio che utilizzano questo tipo di architettura nel mondo di Django?