Dipende molto dai requisiti di scalabilità e da come / se le istanze dei microservizi devono collaborare per fornire un unico risultato. Aiuta a sapere quali sono i compromessi:
Conservando tutto in un unico database
- Configurazione più semplice
- Non è necessario alcun coordinamento o comunicazione con altre istanze del servizio
- È più facile scoprire il set di dati completo
- Prestazioni del sistema limitate dalle prestazioni del database
Mantenere separati i database
- La risposta completa per una richiesta può essere distribuita tra istanze di microservizi
- In tal caso hai aumentato la comunicazione e la negoziazione per risolvere la richiesta
- Gestione dei dati quando si perde quel nodo microservizio (anche quando il database è ancora attivo, non è possibile ottenerlo fino a quando non viene ripristinato un nuovo con la configurazione corretta)
- Maggiore complessità della 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. Tieni tutto in memoria e rendi 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 sua capacità in base al numero di nodi che ha. In questo caso, un singolo database è probabilmente più che sufficiente e gestirne la reattività in modo indipendente è la risposta giusta.
Ci sono un certo numero di casi in mezzo. Ad esempio, potresti avere database specifici per regione, quindi per ogni istanza del tuo servizio in una regione diversa hai un database separato. In genere i database di sharding non funzionano bene tra le regioni, quindi questo è un modo per localizzare un po 'i dati e controllare da soli il coordinamento.
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 microservizio e il livello dati come un'unità intera alla condivisione di database e / o codice front-end per tutte le istanze. Di solito, un maggiore isolamento offre la massima scalabilità, ma comporta un aumento della complessità.
Se il tuo microservizio è pesantemente calcolato, ha senso consentire il numero di quei microservizi in base alle necessità - la condivisione del database o il codice front-end non danneggiano o ostacolano questo approccio.
La realtà è che le esigenze specifiche del tuo progetto avranno bisogno di una serie diversa di compromessi per portare a termine il lavoro in modo tempestivo e gestire il carico di sistema che stai misurando (oltre a un po 'di più). Considera l'obiettivo completamente isolato front-end, microservizio e livello di dati. Maggiore è la domanda sul tuo sistema, più vicino a tale obiettivo probabilmente dovrai essere. Non siamo tutti [insert name of highly successful web entity here]
e non hanno iniziato dove sono adesso. A volte devi solo iniziare con una situazione meno che perfetta ed esserne felice.