I servizi Micro devono comunicare al monolite da cui sono stati estratti?

8

Sto pianificando un'adozione di microservizi per un monolite piuttosto grande. Il piano attuale è quello di creare nuove funzionalità utilizzando microservizi e estraendo costantemente funzionalità dal monolite in servizi.

Durante questo processo è problematico lasciare che i microservizi parlino con il vecchio monolite? Ad esempio, viene sviluppato un nuovo prodotto ma il servizio Cart è ancora all'interno del monolite, quindi il nuovo microservizio deve chiamare il monolite per aggiungere elementi e rimuoverli.

Qualcuno ha esperienza con questo tipo di problemi? Questo è generalmente considerato una cattiva pratica e perché? È meglio solo passare attraverso il dolore e migrare solo i servizi che possono essere eseguiti indipendentemente dal monolite?

Nota: Sono generalmente consapevole del fatto che fare "chiacchiere" tra i servizi è considerato negativo, ma in alcuni casi è ancora richiesto.

    
posta gries 18.04.2017 - 13:50
fonte

2 risposte

12

Se dividi un monolite in microservizi, allora quei microservizi dovranno parlarsi per ottenere il risultato che hai richiesto (invece di un monolite che fa tutto, hai i servizi di comunicazione che fanno lo stesso). Certo, non dovrebbero essere troppo loquaci, ma hanno ancora bisogno di comunicare tra di loro quando necessario.

Se la parte con cui devi comunicare è ancora nel monolite, non c'è alcun problema a parlare con il monolite. Sei "work in progress" a questo punto, devi ancora dividere il servizio Cart (o qualunque cosa sia) dal monolite. Inoltre, a un servizio non interessa che parli con un altro servizio o con il monolite, parla solo con un'altra parte.

Assicurati che i servizi che hai estratto finora (e che estraggono successivamente) siano autonomi, indipendenti, coesi, liberamente accoppiati e divisi su un confine aziendale (cioè hai diviso una funzionalità dal monolite, e non solo codice), altrimenti avrai problemi peggiori di quello di parlare con il monolite.

    
risposta data 18.04.2017 - 14:15
fonte
1

Non penso che questo sia un problema finché tutte le parti concordano che questo è un mezzo per raggiungere un fine.

La tentazione, naturalmente, è quella di rifattorizzare oltre a spostare la logica fuori dal livello. Tieni presente che qualsiasi refactoring di questo tipo potrebbe rendere il test delle due basi di codice in parallelo molto più difficile.

    
risposta data 18.04.2017 - 14:37
fonte

Leggi altre domande sui tag