Microservizi con lo stesso database

5

Ho un'applicazione monolite su un server e voglio suddividerla in più microservizi.

Per questo motivo per il momento devo usare lo stesso database per tutti i microservizi e ogni microservizio che accede solo alle sue tabelle.

Quindi la mia domanda è come posso riutilizzare la connessione al database tra i microservizi e mantenere l'uno indipendentemente dall'altro perché a un certo punto in futuro potrei volere che alcuni di loro usassero un altro database.

Faccio questa domanda perché penso che sia un overhead per creare una nuova connessione al database per ogni microservizio se tutti usano lo stesso database perché una singola pagina logica può usare più di 10-20 microservizi.

    
posta Alexandru Șerban 28.04.2016 - 09:45
fonte

3 risposte

4

Il fatto che questi diversi processi utilizzino connessioni separate è (soprattutto) irrilevante.

La solita preoccupazione è che l'apertura e la chiusura di una connessione sono costose in termini di tempo e risorse della CPU. Con molti database, questa preoccupazione non è valida a causa del pool di connessioni: esiste un sovraccarico la prima volta che ci si connette al database, ma la prossima volta che è necessario eseguire una query all'interno dello stesso processo, una connessione esistente viene riutilizzata sotto il cofano, anche se nel codice, hai chiuso esplicitamente la connessione.

Ciò che accadrà nel tuo caso è che pagherai il costo dell'apertura di venti connessioni la prima volta quando venti microservizi si avviano dopo, ad esempio, il server si riavvia. Una volta eseguita questa operazione, ciascun servizio riutilizzerà le connessioni già aperte in precedenza.

Quale sarebbe un problema se hai molti microservizi che accedono al database, o se il database, per una determinata ragione, non può accettare troppe connessioni. Dato che stai parlando di venti microservizi, non sarò preoccupato; ad esempio, "SQL Server consente un massimo di 32.767 connessioni utente." ( fonte ) Se si utilizza un database più esotico o un database che ha una configurazione esotica o se ogni servizio ha bisogno, per qualche ragione, di aprire molte connessioni contemporaneamente, questo potrebbe davvero diventare un problema.

    
risposta data 28.04.2016 - 11:21
fonte
1

I microservizi sono processi separati, quindi non possono condividere connessioni al database.

Hai diviso un'applicazione in microservizi per la scalabilità, la resilienza e lo sviluppo più semplice con team di grandi dimensioni. Per questi vantaggi, è necessario pagare un prezzo in prestazioni (per istanza) e un'infrastruttura più complessa. Probabilmente il costo dei microservizi che devono comunicare tra loro sulla rete è maggiore del costo di dover gestire pool di connessioni DB separati.

Se i benefici attesi non sono superiori ai costi, non farlo. I microservizi sono ottimi per alcuni casi d'uso, ma non sono in alcun modo un proiettile d'argento e in certi casi, i benefici saranno superati dagli svantaggi.

    
risposta data 28.04.2016 - 11:10
fonte
0

In realtà esistono schemi che difendono entrambi i casi database separati e database condivisi.

Un singolo database è più semplice da utilizzare e uno sviluppatore utilizza transazioni ACID familiari e dirette per rafforzare la coerenza dei dati. D'altra parte uno sviluppatore che lavora, ad esempio, su OrderService dovrà coordinare le modifiche dello schema con gli sviluppatori di altri servizi che accedono alle stesse tabelle. Questo accoppiamento e il coordinamento aggiuntivo rallenteranno lo sviluppo.

Maggiori informazioni sul link

    
risposta data 17.06.2017 - 00:46
fonte

Leggi altre domande sui tag