Bilanciamento del carico e pool di connessioni: c'è differenza?


11

Sto lavorando a un progetto che dovrebbe servire milioni di utenti poco dopo il lancio. Il database è postgres e per ora presumo che saranno necessari almeno due server. Un amministratore di sistema (che è chiaramente esperto di sistemi scalabili) ha suggerito di mettere un bilanciamento del carico tra i server Web e i server di database.

La mia domanda riguarda la differenza tra bilanciamento del carico e pool di connessioni. Per mantenere le prestazioni, dovrei guardare l'uno o l'altro o entrambi?


Sono praticamente la stessa cosa. pgbouncer è il pooler consigliato, pgpool II ha più funzionalità ma è più complesso da configurare.
Scott Marlowe,

Risposte:


7

Con PostgreSQL hai due diverse aree che possono fare il pooling, sia a livello di app (ovvero jdbc integrato nel pooling ecc.) O in uno strato intermedio che si trova tra l'app e i db, come pgbouncer o pgpool.

Se si esegue il pooling in un layer intermedio, come pgbouncer o pgpool, quel layer può ANCHE eseguire il bilanciamento del carico di query selezionate. Inoltre, quando si esegue il bilanciamento del carico, è possibile eseguire le scritture in uno dei due modi seguenti: è possibile disporre di un unico master di scrittura che si replica tramite altri mezzi ai propri slave di lettura, utilizzando uno strumento come slony o la replica di streaming integrata visualizzata in pag. 9.0 e sopra, oppure puoi fare in modo che il bilanciamento del carico esegua tutte le operazioni di scrittura, in modo che le letture in entrata colpiscano solo un db, ma le scritture colpiscano ciascun database per mantenerle tutte aggiornate.

Oppure, se sei avventuriero, puoi spostare il livello di bilanciamento del carico su un altro livello in postgresql stesso usando plproxy. Questo è un linguaggio pl per pgsql progettato per consentire di mettere un database pg sul front-end in cui non sono presenti dati effettivi e tale database può quindi essere eseguito su più dbs eventualmente ridondanti per un throughput incredibile. il plpoxy è piuttosto complesso per essere configurato e funzionante, ma è anche abbastanza scalabile. Nota che la tua applicazione deve essere riscritta per supportarla in modo che non possa essere lanciata con nessuna vecchia app e funzioni.

http://slony.info/ http://wiki.postgresql.org/wiki/PL/Proxy http://pgpool.projects.postgresql.org/


3

Il bilanciamento del carico e il pool di connessioni sono due cose molto diverse.

Il pool di connessioni (vengo da un lato Microsoft del mondo, ma suppongo che le cose siano simili) consente all'applicazione di mantenere aperta la connessione al database in modo che possa riutilizzarla per la query successiva invece di dover disconnettersi e riconnettersi per ogni query che deve essere eseguita.

Il bilanciamento del carico consente di disporre di più server di database dietro il bilanciamento del carico in modo da poter distribuire il carico su più server invece che un singolo server gestisca tutto il lavoro.

È possibile utilizzare il pool di connessioni con bilanciamento del carico, tuttavia tenere presente che poiché le connessioni non verranno mai interrotte, è possibile che si verifichi un carico non bilanciato tra i due server di database.

Se un singolo server di database non è in grado di gestire il carico dell'applicazione, riportare 3 server lì. In questo modo puoi riavviarne uno secondo necessità senza che l'app si blocchi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.