Ottimizzazione del Connection Pooling con PgBouncer
La maggior parte delle applicazioni web utilizza database per memorizzare i propri dati. Le applicazioni client possono recuperare le informazioni dal database stabilendo una connessione ad esso. Ogni query consuma risorse, inclusa memoria, assegnazione di porte e tempo della CPU. Una transazione può richiedere millisecondi, ma stabilire una connessione può richiedere fino a diversi secondi.
Per semplificare il processo di connessione a PostgreSQL, soprattutto quando si prevede un volume elevato di connessioni client, è possibile utilizzare PgBouncer per gestire efficacemente le connessioni client-database. È un famoso connection pooler che si connette al database una volta e utilizza questa connessione molte volte per diversi client. Non è l’unico vantaggio dell’utilizzo di PgBouncer.
Supponiamo che Lei abbia 100 client che necessitano di connettersi al Suo database e Lei non voglia condividere la password dell’utente del database con questi client. In questo caso, può utilizzare PgBouncer. Può impostare login e password individuali per connettere in modo che PgBouncer e i client non utilizzino le password dell’utente del database. Inoltre, può assegnare un nome alias al database, in modo che i client non vedano il nome reale del database.
Invece di creare una connessione al database, viene creata una connessione con PgBouncer che utilizza già le connessioni al database esistenti.
DataSunrise Database Security Suite insieme a molte altre funzionalità supporta il pooling con PgBouncer. Lavorando efficacemente con la mappatura client-database, mantiene una sicurezza completa del database quando PgBouncer è in esecuzione.
Vantaggi dell’utilizzo dei pool di connessioni PgBouncer:
- riduzione del tempo di elaborazione
- riduzione del consumo di risorse del server per il mantenimento di un gran numero di connessioni server a uno o più database
- supporto del riavvio o aggiornamento online senza interruzione delle connessioni client
- nascondere il nome reale del database
- possibilità di evitare la condivisione della password dell’utente del database con tutte le applicazioni client
Configurazione di PgBouncer
Dopo l’installazione, PgBouncer funziona come un servizio su Windows e come un demone su Linux (chiamato pgbouncer in entrambi i casi).
Per modificare le impostazioni di configurazione, trova il file pgbouncer.ini nella seguente directory: pgbouncer/share. Contiene i seguenti parametri:
[database] sezione | Può aggiungere database, definire i loro host, porte, assegnare nomi alias ai database e specificare un login e una password per l’utente del database (tutti i client connessi al nome alias specificato tramite PgBouncer utilizzeranno il login e la password dell’utente del database specificati in questa sezione). |
[pgbouncer] sezione | Specificare gli indirizzi IP che saranno ascoltati dal demone PgBouncer. Usare il Listen_addr = * per ascoltare tutti gli indirizzi disponibili. |
auth_file | PgBouncer non è parte di PostgreSQL, quindi è necessario fornire l’elenco degli utenti con password criptate richiesti per connettersi a PgBouncer. Auth_file è il percorso della directory al file contenente nomi utente e password. |
auth_type | (md5 | crypt | plain | trust | any) Md5 è un argomento per l’utilizzo delle password specificate nel auth_file. Md5 è impostato di default. |
max_client_conn | La quantità massima di client che possono connettersi al pool (100, di default). |
admin_users | Assegnare privilegi di accesso alla console amministrativa. |
default_pool_size | Assegnare il numero massimo di connessioni server per ogni combinazione utente/database. |
reserve_pool_size | Il numero massimo di connessioni aggiuntive consentite in caso si verifichino problemi. |
pool_mode | Definisce la modalità di pooling: (session) PgBouncer assegna una connessione server al client. Quando l’applicazione client si disconnette, la connessione viene rilasciata nel pool. (transaction) PgBouncer assegna una connessione server all’applicazione client fino alla fine della transazione. (statement) PgBouncer assegna una connessione server per ogni dichiarazione dell’applicazione client. |
Come può vedere, PgBouncer fornisce una soluzione semplice per la gestione dei pool di connessioni, specialmente quando si ha a che fare con architetture multi-thread. Utilizzando connessioni già esistenti, PgBouncer elimina la necessità di creare una connessione al database per ogni client.
I nostri sviluppatori hanno analizzato a fondo gli schemi di mappatura di PgBouncer e hanno configurato DataSunrise Database Security Suite per fornire funzionalità complete insieme a questo connection pooler.