2016-06-20 25 views
7

Sto per imparare come funziona l'architettura dei microservizi. Finora non ho capito che ogni microservizio ha bisogno di un proprio database, il che ha senso.Come mantenere DB in sincrono quando si utilizza l'architettura dei microservizi?

Quindi diciamo che abbiamo un microservizio del cliente che è responsabile della creazione di un cliente e della restituzione di un elenco di clienti. Il servizio avrà ofcource il proprio DB cliente.

Diciamo che abbiamo un carico molto elevato su questo servizio, quindi abbiamo scelto di ridimensionare 20x.

Abbiamo 20 microservizi e ognuno ha il proprio DB e tutti i servizi sono dietro un bilanciamento del carico.

Ora un cliente desidera creare un cliente, il servizio di bilanciamento del carico invia la richiesta del client al servizio 9/20 e il cliente viene creato.

Sulla richiesta successiva lo stesso cliente vuole essere sicuro che il cliente sia stato creato e desidera visualizzare l'elenco dei clienti, su richiesta LB lo manda al servizio 11/20.

Ora, come posso assicurarmi che il servizio 9/20 abbia sincronizzato il cliente appena creato con il db di servizio 11/20?

In MSSQL ci sono funzionalità per mantenere il DB in sincrono prima di consentire il commit iniziale, per salvare prima i dati in tutti gli altri database, ma questo approccio creerà problemi a lungo termine, perché più servizi ci sono più tempo ci vorrà per fare un commit?

risposta

6

ogni Microservice bisogno di una propria banca dati

un DB separato per ogni Microservice non è un prerequisito (né un obbligo, in realtà).

È possibile disporre di tutti i microservizi che si desidera utilizzare sullo stesso database, ma utilizzare schemi diversi, ad esempio.

Il contesto limitato di un microservizio dovrebbe essere il limite.

Diciamo che abbiamo un carico molto elevato su questo servizio, quindi abbiamo scelto di scalare 20x.

Il ridimensionamento a (X) istanze dello stesso microservizio non significa necessariamente disporre di un database separato per ogni istanza dello stesso servizio.

La maggior parte dei database sono progettati con connessioni simultanee, utenti, transazioni in mente. una singola istanza di database (con una certa concorrenza ottimistica) può gestire con garbo centinaia (se non migliaia) di connessioni simultanee.

Se si sceglie esplicitamente di disporre di un DB separato per istanza dello stesso servizio, sarà necessario sincronizzare tali database. e, molto probabilmente, la consistenza dei dati ne risentirà.

Ecco alcuni suggerimenti:

  • uso di un unico database per Microservice (non per esempio) indipendentemente dal numero di istanze lo usano. E considera solo un DB per istanza quando sei sicuro che un singolo DB non può gestire il carico.

  • utilizzare un livello di cache condivisa in cima al DB (cache forse Redis)

  • l'utilizzo di cluster di un database a che fare con alto carico/disponibilità di database.

Problemi correlati