Progettazione DB per architettura microservizi

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

  1. Servizio utente: per login e informazioni utente.
  2. Servizio di prova: servizio per valutare i test.
  3. Dipendente: gestisce i dettagli dei dipendenti
  4. Azienda: Gestisce l’organizzazione CRUD
  5. Dipartimento: maniglie dipartimento CRUD

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

  1. Servizio utente: per login e informazioni utente.
  2. Servizio di prova: servizio per valutare i test
  3. Organizzazione: gestione delle operazioni aziendali, dei dipendenti e del dipartimento.

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.