Al momento stiamo progettando la nostra nuova versione di un'applicazione esistente. Questa nuova versione non riutilizzerà alcun codice esistente poiché il vecchio codice ha più di 10 anni e è strettamente accoppiato.
Con questa nuova applicazione creeremo un livello di persistenza. E poiché vogliamo aderire a un ciclo di sviluppo agile. Avremo bisogno di un modo per far affiancare sia le vecchie che le nuove applicazioni. Personalmente potrei pensare a due soluzioni per far funzionare le applicazioni sugli stessi dati, e mi piacerebbe avere il tuo input su quale sia la soluzione più praticabile. Naturalmente se conosci una soluzione completamente diversa, sentiti libera di rispondere anche a questo.
impostazione corrente
Attualmente stiamo eseguendo due MariaDB nella replica master-master. Gli ID vengono incrementati automaticamente con uno che genera gli odd e gli altri id.
nuova configurazione
Non abbiamo ancora chiarimenti su questo. Tranne che vorremmo rimuovere la generazione di chiavi primarie dal livello di persistenza e infrastruttura. Un altro desiderio è la scalabilità. Quest'ultimo preferibilmente con segregazione in lettura (se pertinente alla domanda)
1. Sync
Crea codice per sincronizzare continuamente tutti i dati tra vecchio e nuovo. Ciò significa che deve conoscere la vecchia struttura e la nuova struttura ed essere in grado di spostarlo. Il problema più grande sembra essere la latenza introdotta dalla sincronizzazione che potrebbe causare anomalie nei dati. Per ridurlo, potremmo fare in modo che uno dei sync termini il "master"
2. Implementa nuova persistenza nei vecchi
Fondamentalmente l'idea sarebbe di avere tutta la logica di persistenza nella propria base di codice. In questo modo potremmo inserirlo nella nostra vecchia applicazione e scrivere adattatori per far sì che utilizzi già il nuovo sistema. Mi piace questo approccio in quanto rafforza una fonte di verità. Problemi con questo approccio potrebbero essere che potrebbe richiedere molto più tempo per implementare gli adattatori; così come potrebbe essere problematico far sì che il codice legacy funzioni insieme alla nuova struttura. Per non parlare, dovendo dilettarsi nel codice spaghetti non testato.
Quale sarebbe il corso migliore? (Preferibilmente con argomenti oggettivi sui vantaggi rispetto all'altro metodo