Database contenitore microservizi

1

Sto solo esaminando i microservizi e la containerizzazione per l'apprendimento. Non ho ancora implementato nulla. In linea di massima ottengo molti degli strati del modello.

Una cosa su cui non capisco e su cui non riesco a trovare una buona risposta è il database di un microservizio. Quando si parla di un database per servizio è quello per ogni contenitore o è un database che tutti i servizi di tale app utilizzerebbero?

Devo pensare che sarebbe il secondo, ma questo sembra andare contro l'idea di essere autonomo con tutto ciò che è necessario per eseguire l'applicazione.

    
posta nerdlyist 26.10.2018 - 14:51
fonte

1 risposta

1

Stai mescolando due diversi tipi di architettura, ed è difficile estrapolare pattern per uno nell'altro. I microservizi fanno parte dell'architettura di rete, che ha accettato modelli per come i server devono comunicare, come ridimensionare le app e migliorare la resilienza per la raccolta di spazi di indirizzi che compongono la tua applicazione (pensa a uno spazio di indirizzi come a un singolo oggetto dispiegabile, vive in Docker, una VM o una macchina fisica). In questo spazio, non ci sono raccomandazioni per l'eventuale necessità di disporre di uno o più database poiché non può conoscere abbastanza la logica aziendale per formulare una raccomandazione. Si dice che se hai bisogno di più database per lo spazio degli indirizzi, puoi distribuirli tramite Docker.

L'architettura dell'applicazione ha schemi su come strutturare il codice per implementare una singola unità deployable. Qui è dove decidi se ciascuna installazione può funzionare correttamente con un database dedicato o se più installazioni dello stesso codice devono condividere un database. In base alla progettazione, l'architettura dell'applicazione non deve preoccuparsi della sua esecuzione in un microservizio. Dovrebbe sapere se sta condividendo un database con altre copie di se stesso, ma se si sta utilizzando Docker o una VM o un server fisico non è importante.

Quindi la tua domanda non dovrebbe riguardare l'approccio consigliato da Microservices, ma su quale delle tue applicazioni specifiche richiede. Poniti questa domanda: se due copie del tuo codice sono in esecuzione contemporaneamente, devono condividere un database per mantenere l'integrità dei dati? In caso contrario, utilizzare più DB in contenitori diversi, in cui ogni ID dedicato alla distribuzione di quel codice. In tal caso, utilizzare un DB in un contenitore disponibile per tutti.

In pratica, spesso si finisce con un DB per ogni distribuzione in cui vengono conservate le informazioni sulla cache (questo aiuta con il ridimensionamento) e un DB condiviso per la persistenza dei dati aziendali (che aiuta con l'integrità dei dati). Aggiungi CQRS al tuo elenco di cose da indagare mentre scavi in Microservices. È un eccellente modello scalabile che funziona bene con Microservices.

    
risposta data 30.10.2018 - 13:52
fonte

Leggi altre domande sui tag