Stiamo provando a convertire la nostra applicazione monolitica in un'architettura basata su micro servizi. Usiamo Postgresql come uno dei nostri database nell'applicazione monolitica con BoneCP per il pooling delle connessioni.Strategia del pool di connessione al database per i microservizi
Quando questo monolite è diviso a una serie di micro-servizi indipendenti con ognuno di loro in esecuzione in una JVM diversa, posso pensare a due opzioni per il pool di connessioni
- BoneCP o qualsiasi pool di connessione decente per ogni microservice - La mia ricerca iniziale mostra che questa è la scelta principale. È possibile avere un controllo a grana fine dei requisiti di connessione per ciascun servizio.Ma, il lato negativo è che con l'aumento del numero di servizi, aumenta anche il numero di pool di connessioni e alla fine ci saranno troppe connessioni inattive assumendo che le connessioni minime in ogni pool è maggiore di 0.
- Affidatevi a estensioni specifiche del database come PGBouncer - Questo approccio ha il vantaggio che il pool di connessioni è gestito da una fonte centrale anziché da un pool per ogni micro servizio e quindi il numero di connessioni inattive può essere ridotto. È anche agnostico di lingua e tecnologia. Verso il basso è che queste estensioni sono specifiche del database e alcune delle funzionalità in JDBC potrebbero non funzionare. Ad esempio: le statistiche preparate potrebbero non funzionare con PGBouncer in modalità Transaction_Pooling.
Nel nostro caso la maggior parte dei micro-servizi (almeno 50) si collegherà allo stesso server Postgres anche se il database può essere diverso. Quindi, se andiamo con l'opzione 1, c'è una maggiore possibilità di creare troppe connessioni inattive. Il traffico verso la maggior parte dei nostri servizi è molto moderato e la logica alla base del passaggio al micro-servizio è più semplice per l'implementazione, il ridimensionamento, ecc.
Qualcuno ha affrontato un problema simile durante l'adozione dell'architettura dei micro-servizi? C'è un modo migliore per risolvere questo problema nel mondo dei micro-servizi?
Perché non è possibile utilizzare un singolo pool di connessioni JDBC? Oppure ogni micro-servizio è in esecuzione nel proprio server delle applicazioni? –
@a_horse_with_no_name Ogni micro-servizio sarà eseguito nel proprio server delle applicazioni. –