Load Balancer versus Verbindungspooling - gibt es einen Unterschied?

11

Ich arbeite an einem Projekt, das voraussichtlich kurz nach dem Start Millionen von Benutzern bedienen wird. Die Datenbank ist postgres und ich gehe davon aus, dass mindestens zwei Server benötigt werden. Ein Systemadministrator (der sich eindeutig mit skalierbaren Systemen auskennt) hat vorgeschlagen, einen Load Balancer zwischen den Webservern und den Datenbankservern einzurichten.

Meine Frage bezieht sich auf den Unterschied zwischen Lastausgleich und Verbindungspooling. Sollte ich zur Aufrechterhaltung der Leistung den einen oder den anderen oder beide betrachten?

Bogeymin
quelle
Sie sind so ziemlich dasselbe. pgbouncer ist der empfohlene Pooler. pgpool II bietet mehr Funktionen, ist jedoch komplexer einzurichten.
Scott Marlowe

Antworten:

7

Mit PostgreSQL haben Sie zwei verschiedene Bereiche, die Pooling durchführen können, entweder auf der App-Ebene (z. B. in Pooling integriertes JDBC usw.) oder in einer Zwischenebene, die sich zwischen der App und den Datenbanken befindet, z. B. pgbouncer oder pgpool.

Wenn Sie in einer Zwischenebene wie pgbouncer oder pgpool bündeln, kann diese Ebene AUCH einen Lastausgleich für ausgewählte Abfragen durchführen. Beim Lastenausgleich können Sie auf zwei Arten schreiben: Sie können entweder einen einzelnen Schreibmaster haben, der auf andere Weise auf Ihre Leseslaves repliziert, indem Sie ein Tool wie slony verwenden oder die integrierte Streaming-Replikation, die in Seite 9.0 angezeigt wird und höher, oder Sie können den Load Balancer das gesamte Schreiben ausführen lassen, sodass eingehende Lesevorgänge nur eine Datenbank treffen, Schreibvorgänge jedoch jede Datenbank treffen, um sie alle auf dem neuesten Stand zu halten.

Wenn Sie abenteuerlustig sind, können Sie die Lastausgleichsebene mithilfe von plproxy um eine weitere Ebene in postgresql selbst verschieben. Dies ist eine pl-Sprache für pgsql, mit der Sie eine pg-Datenbank im Front-End platzieren können, die keine tatsächlichen Daten enthält. Diese Datenbank kann dann für einen unglaublichen Durchsatz auf mehreren möglicherweise redundanten DBS ausgeführt werden. plpoxy ist ziemlich komplex, um eingerichtet und ausgeführt zu werden, aber es ist auch ziemlich skalierbar. Beachten Sie, dass Ihre Anwendung neu geschrieben werden muss, um sie zu unterstützen, damit sie nicht unter eine alte App geworfen werden kann und einfach funktioniert.

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

Scott Marlowe
quelle
3

Lastausgleich und Verbindungspooling sind zwei sehr unterschiedliche Dinge.

Durch das Verbindungspooling (ich komme von einer Microsoft-Seite der Welt, aber ich nehme an, dass die Dinge ähnlich sind) kann die Anwendung die Verbindung zur Datenbank offen halten, sodass sie für die nächste Abfrage wiederverwendet werden kann, anstatt die Verbindung trennen und erneut herstellen zu müssen für jede Abfrage, die ausgeführt werden muss.

Mit dem Lastausgleich können Sie mehrere Datenbankserver hinter dem Lastausgleich haben, sodass Sie die Last auf mehrere Server verteilen können, anstatt dass ein einziger Server die gesamte Arbeit erledigt.

Sie können das Verbindungspooling mit Lastenausgleich verwenden. Beachten Sie jedoch, dass die Verbindungen möglicherweise nicht unterbrochen werden und die Last zwischen den beiden Datenbankservern nicht ausgeglichen wird.

Wenn ein einzelner Datenbankserver die Last der Anwendung nicht bewältigen kann, holen Sie sich 3 Server zurück. Auf diese Weise können Sie eine nach Bedarf neu starten, ohne dass die App abstürzt.

mrdenny
quelle