Sto pensando di utilizzare l’architettura Microservices per l’implementazione del nostro sito web. Volevo sapere se è giusto condividere i database tra i servizi o se è preferibile avere un database separato per ciascun servizio. A questo proposito, posso considerare di avere un database comune per tutti i servizi o viola l’essenza stessa dell’architettura di Microservice?
Microservices offre il disaccoppiamento . È necessario suddividere l’applicazione in domini indipendenti. Ogni dominio può avere un DB. Nel caso in cui altri Stati membri debbano accedere a dati di proprietà di altri microservizi, devono comunicare attraverso la rete.
Nel caso in cui si ritenga che ci siano troppi servizi dipendenti e le chiamate di rete sarebbero troppe, è ansible definire un dominio, raggruppando insieme i servizi dipendenti.
Ad esempio, supponiamo di avere un servizio di valutazione dei test online in cui un manager di un’azienda può pubblicare test e può visualizzare i risultati di tutti i dipendenti del suo dipartimento.
I miei microservizi per questo scenario sarebbero:
Design iniziale
Dopo averlo analizzato, sembra che il servizio di dipendente, organizzazione e dipartimento farebbe troppe chiamate di rete / API perché sono strettamente dipendenti l’uno dall’altro. Quindi è meglio raggrupparli.
Design aggiornato
Ogni servizio può avere il proprio DB ed è distribuibile indipendentemente. L’utente e il servizio di test possono utilizzare mongoDB o qualsiasi NoSql DB e il servizio di organizzazione può utilizzare RDBMS.
Spero che questo ti aiuti.
Se si condivide lo stesso database, si perdono due dei più importanti vantaggi dei microservizi: coesione forte e accoppiamento lento (pagina 25) .
È ansible condividere lo stesso database se non si condividono le tabelle in esso. Ad esempio, microservice1
utilizza table1_1
e table_1_2
e microservice2
utilizza table2_1
e table2_2
. Quando dico usi intendo leggere e scrivere. Un microservizio non legge e non scrive sui tavoli dell’altro.