Le app moderne come i microservizi in genere richiedono molte connessioni al database, inoltre utilizzano e rilasciano tali connessioni molto rapidamente. Quando PostgreSQL è stato sviluppato quasi 25 anni fa, i suoi sviluppatori hanno deciso di non utilizzare i thread per le nuove richieste, ma di creare invece un nuovo processo per ogni richiesta. Sebbene quella decisione avesse probabilmente un senso all'epoca, molte connessioni possono essere un problema serio oggi. Una delle soluzioni a questo problema è un pool di connessioni. In questo post del blog, discuteremo del pool di connessioni PgBouncer e di come utilizzarlo in ClusterControl 1.8.2.
Perché usare Connection Pool
Beh, la risposta breve a questa domanda è che è una soluzione semplice ma efficace per migliorare le prestazioni delle tue app, allo stesso tempo riduce il carico sul server PostgreSQL. Andiamo un po' più a fondo su questo, vero?
Un pool di connessioni può essere definito come una cache di connessioni database aperte riutilizzabile dai client. In altre parole, ridurrà il carico sul database riducendo le richieste su ogni nuova connessione. Queste nuove connessioni vengono fondamentalmente generate dal processo postmaster ogni volta che viene stabilita una connessione che normalmente richiederà da 2 a 3 MB di memoria per connessione.
Senza un pool di connessioni, questo porterà a un problema ogni volta che il numero di connessioni è troppo alto poiché il postmaster deve fornire molta memoria. In PostgreSQL, il pool di connessioni è gestito da PgBouncer.
Cos'è PgBouncer
PgBouncer è un pool di connessioni leggero, single-binary, open source e probabilmente il più popolare per PostgreSQL. PgBouncer è una semplice utility che fa esattamente una cosa, si trova tra il database ei client e comunica il protocollo PostgreSQL, copiando un server PostgreSQL. Al momento in cui scrivo, l'ultima versione di PgBouncer è la 1.15.0.
Vediamo quali sono alcune delle migliori funzionalità che offre e probabilmente il motivo per cui è così popolare nel mondo PostgreSQL:
-
Leggero - solo un singolo processo, tutte le richieste dal client e le risposte dal server passthrough PgBouncer senza alcun ulteriore elaborazione
-
Installazione semplice:non richiede modifiche al codice lato client e uno dei pool di connessioni PostgreSQL più semplici da configurare
-
Scalabilità e prestazioni:si adatta bene a un gran numero di clienti e allo stesso tempo aumenta significativamente le transazioni al secondo che il server PostgreSQL può supportare
Passaggi per configurare PgBouncer con ClusterControl
Ci sono alcuni passaggi per installare e configurare PgBouncer con ClusterControl. In questa sezione, esamineremo i passaggi a condizione che il cluster PostgreSQL sia già distribuito. Se non hai ancora il cluster, puoi seguire la guida in questo post del blog.
Dalla tua interfaccia utente web> Seleziona PostgreSQL Cluster> Gestisci> Load Balancer> Seleziona la scheda PgBouncer e apparirà la seguente schermata. Qui puoi scegliere se distribuire o importare PgBouncer, in questo esempio sceglieremo Distribuisci.:
Puoi selezionare il nodo dal menu a tendina, specificare la porta, aggiungere ' PgBouncer Admin User', nonché la password e fare clic su 'Deploy PgBouncer'. Il lavoro inizierà a essere eseguito e lo stato inizierà ad apparire in questa schermata, puoi anche monitorarlo nella scheda "Attività".
Dopo che il nodo PgBouncer è stato distribuito correttamente, il passaggio successivo consiste nel creare il pool di connessioni. Dal tuo Cluster> Nodi> Seleziona il nodo PgBouncer e apparirà la seguente schermata:
La schermata di connessione apparirà dopo aver fatto clic su "Crea pool di connessioni" pulsante. Puoi inserire tutte le informazioni e aggiornare il valore in base alla tua configurazione, per questo esempio utilizzeremo il valore predefinito per "Modalità pool", "Dimensioni pool" e "Connessione massima al database":
Qui dovrai aggiungere le seguenti informazioni:
-
Nome host PgBouncer:seleziona gli host del nodo per creare il pool di connessioni.
-
Nome pool:i nomi pool e database devono essere gli stessi.
-
Nome utente: seleziona un utente dal nodo master PostgreSQL o creane uno nuovo.
-
Modalità pool:sessione (predefinita), transazione o pool di istruzioni.
-
sessione (impostazione predefinita):il server viene rilasciato nel pool dopo la disconnessione del client
-
transazione:il server viene rilasciato nuovamente al pool al termine della transazione
-
istruzione:Il server viene rilasciato nuovamente al pool al termine della query. Le transazioni su più estratti conto non sono consentite in questa modalità
-
-
Dimensione pool:dimensione massima dei pool per questo database. Il valore predefinito è 20.
-
Numero massimo di connessioni al database:configurare un massimo a livello di database. Il valore predefinito è 0, che significa illimitato.
Il pool di connessioni apparirà dopo aver fatto clic sul pulsante "Fine" come mostrato nella schermata seguente e sia PgBouncer che il pool di connessioni sono ora pronti:
Conclusione
L'uso del pool di connessioni e di PgBouncer sono alcuni dei passaggi per migliorare le prestazioni della tua applicazione quando si tratta di disponibilità elevata. Con ClusterControl, puoi distribuire PgBouncer e creare un pool di connessioni in modo semplice e veloce.
Per renderlo ancora migliore, suggeriamo anche di implementare HAProxy oltre a PgBouncer. La funzionalità HAProxy è disponibile in ClusterControl e, al momento della scrittura, la versione che stiamo utilizzando è la 1.8.23.