Dipende veramente dai requisiti di scalabilità e da come / se le istanze di microservice devono collaborare per fornire un singolo risultato. Aiuta a capire quali sono i trade-off:
Mantieni tutto in un unico database
- Una configurazione più semplice
- Non sono necessari coordinamento o comunicazione con altre istanze del servizio
- Più facile scoprire il set di dati completo
- Prestazioni del sistema limitate dalle prestazioni del database
Mantenimento dei database separati
- La risposta completa per una richiesta può essere suddivisa tra istanze di microservizio
- In questo caso hai aumentato la comunicazione e la negoziazione per risolvere la richiesta
- Gestire i dati quando si perde il nodo del microservizio (anche quando il database è ancora attivo, non è possibile raggiungerlo finché non ne viene ripristinato uno nuovo con la configurazione corretta)
- Maggiore complessità di configurazione
Qual è il problema che stai risolvendo?
In alcuni casi, sei solo preoccupato per i dati effimeri. Se il database non funziona, non è un grosso problema. In quei casi potresti non aver nemmeno bisogno di un database per cominciare. Basta tenere tutto in memoria e rendere le cose incredibilmente veloci. Questa è la soluzione più semplice con cui lavorare.
In altri casi, è necessaria l'integrità dei dati, ma il database è in grado di espandere la capacità in base al numero di nodi che ha. In questo caso, un singolo database è probabilmente più che sufficiente e gestire la sua reattività in modo indipendente è la risposta giusta.
Ci sono un certo numero di casi nel mezzo. Ad esempio, potresti avere database che sono regionalmente specifici, quindi per ogni istanza del tuo servizio in una regione diversa hai un database separato. I database in genere non funzionano bene tra le regioni, quindi questo è un modo per localizzare i dati un po 'e controllare il coordinamento da soli.
Dottrina e realtà
Ho letto una serie di articoli sui microservizi e su come dovrebbero essere modulari. Le raccomandazioni vanno dal mantenere il front-end, il microservice e il livello dati dell'intera unità per condividere il database e / o il codice di front-end per tutte le istanze. Solitamente, un maggior isolamento offre la massima scalabilità, ma comporta un aumento della complessità.
Se il tuo microservizio è pesante in termini di calcolo, ha senso consentire il numero di tali microservizi in scala se necessario: la condivisione del database o persino del codice di front end non danneggia o ostacola questo approccio.
La realtà è che le esigenze specifiche del tuo progetto avranno bisogno di un diverso insieme di compromessi per portare a termine il lavoro in modo tempestivo e gestire il carico del sistema che stai misurando (più un po 'di più). Considerare l'obiettivo elevato il front-end, il microservizio e il trio di livello dati completamente isolati. Maggiore è la domanda sul tuo sistema, più vicino a quell'obiettivo che probabilmente dovrai essere. Non siamo tutti [insert name of highly successful web entity here]
, e non hanno iniziato dove sono ora. A volte hai solo bisogno di iniziare con una situazione non perfetta, e sii felice con quello.