HA Proxy - Roundrobin gegen Leastconn

9

Gibt es Vorschläge, wann roundrobinund wann ich verwenden soll leastconn?

Ich verwende roundrobinderzeit und habe festgestellt, dass das Laden meiner Back-End-Serves nicht gleichmäßig verteilt ist. Natürlich könnte es ein anderes Problem geben, aber wir möchten es leastconnversuchen, aber da es sich um einen geschäftskritischen Server handelt, möchte ich andere Erfahrungen konsultieren, bevor ich die Änderungen vornehme.

Irgendeine Idee zu teilen?

Ryan
quelle

Antworten:

12

Ich habe nicht mit Leastconn experimentiert, aber ich verstehe, dass der typische Anwendungsfall für Leastconn darin besteht, dass Sie einen Lastausgleich durchführen, der langlebige Verbindungen haben kann. Der Grund dafür ist, dass sich Leastconn darauf konzentriert, eine ausgewogene Parallelität sicherzustellen, während Road Robin eine ausgewogenere Ankunftsrate bietet . Wenn diese Unterscheidung nicht klar ist, siehe meine Antwort zum Unterschied .

Wenn Sie sagen, dass die Last nicht gleichmäßig verteilt ist, kann es hilfreich sein, "Last" etwas besser zu definieren. Wenn Sie Serverressourcen meinen, dann schlage ich vor, zu identifizieren, was genau die erhöhte Last verursacht (dh bestimmte Arten von Verbindungen), und von dort aus rückwärts zu arbeiten.

Kyle Brandt
quelle
4

Es hängt davon ab, wie das Protokoll und der Anwendungsfall abwägen. Für alles, wo die Anzahl der Verbindungen mit der Last / Nutzung korreliert, ist es besser, sie zu verwenden leastconn. Aufgrund der Funktionsweise von Netzwerken und Anwendungen ist dies so gut wie immer der Fall, und Sie sollten es leastconnstandardmäßig besser verwenden .

RDP / X11-Remote-Desktops / Jump-Hosts

Ein Unternehmen verfügt beispielsweise über einen Pool von Remote-Desktops, mit denen Mitarbeiter eine Verbindung herstellen. Sie möchten, dass die Mitarbeiter gleichmäßig auf die Desktops verteilt werden.

Die Anzahl der aktiven Verbindungen in diesem Anwendungsfall ist ungefähr "wie viele Mitarbeiter diesen Desktop gerade verwenden". Der Host mit den geringsten Verbindungen wird von den wenigsten Mitarbeitern verwendet und ist wahrscheinlich am wenigsten ausgelastet. Verwenden Sie unter diesen Umständen "Leastconn", um die Last gleichmäßig auf die Anzahl der Benutzer zu verteilen.

Ein idealer Load Balancer sollte sich der Remotedesktoplast bewusst sein. Wie viele Benutzer? Wie viele Bewerbungen? Wie viel Speicher und CPU verbraucht? Es gibt kommerzielle Lösungen für Remote-Desktops (Microsoft / Citrix / etc ...), die diese Metriken normalerweise messen, um die Nutzung sehr gut zu verbreiten. HAProxy ist ein einfacher Netzwerklastenausgleich und kann nichts Besseres tun, als Verbindungen mit zu zählen leastconn.

HTTP / HTTPS

Bei HTTP bedeutet eine aktive Verbindung, dass der Server gerade eine Anforderung verarbeitet. Die Anschlüsse sind direkt proportional zur Last. Sie möchten den Server mit der geringsten Anzahl aktiver Verbindungen auswählen (Anforderungen werden ausgeführt). Verwendung leastconnfür HTTP (S) -Verkehr.

Stellen Sie sich ein Szenario mit zwei HTTP-Servern vor, in dem ein Server Anforderungen langsamer verarbeitet (möglicherweise ist er überlastet, möglicherweise verfügt er über ältere Hardware).

roundrobinverteilt die Anforderungen zur Hälfte auf die beiden Server. Es ist sehr ineffizient, der schnellere Server sollte mehr brauchen. Schlimmer noch, der langsamere Server könnte überlastet sein, er wird noch langsamer, wenn mehr Anfragen eingehen und jederzeit Anfragen löschen können. Das willst du nicht.

leastconnwürde feststellen, dass die Server uneben sind. Der langsamere Server hält Verbindungen länger und hat eine höhere Verbindungsanzahl. leastconnberücksichtigt dies und bevorzugt den anderen Server.

Nach meiner Erfahrung, einschließlich Rollen, in denen ich ausschließlich Leistungstests für mittelgroße bis große Websites durchgeführt habe. leastconnkann 300% so effizient sein wie roundrobinbei HTTP (S). roundrobinVerteilt die Verbindung nicht fair und führt bei hoher Last zu Instabilität.

DNS-Anfrage

(Ignorieren wir, dass HAProxy UDP nicht unterstützt und UDP verbindungslos ist).

Ein letztes Beispiel. DNS ist ein einfaches Protokoll. Die Clients senden eine einzelne UDP-Nachricht, um eine Domäne anzufordern, und der DNS-Server antwortet in einer einzelnen Nachricht.

In diesem Fall besteht keine wirkliche Verbindung. Selbst wenn es so wäre, würde es (theoretisch) sofort geschlossen werden.

Unter diesen Umständen wäre es nicht sinnvoll, Verbindungen zu zählen, es ist nicht optimal für leastconn. Ein einfacher roundrobinkann Nachrichten verteilen.

Ein häufiges Missverständnis

Menschen glauben manchmal, dass sie nicht leastconnfür kurzlebige Verbindungen verwendet werden sollten (ähnlich wie im letzten Beispiel). Sogar die HAProxy-Dokumentation ist darüber irreführend.

leastconn
          Use of this algorithm is recommended where very long sessions are
          expected, such as LDAP, SQL, TSE, etc... but is not very well
          suited for protocols using short sessions such as HTTP.
          [misleading advice, should ignore it]

In der realen Welt short connectionsist das keine Sache.

Anwendungen basieren auf TCP. Nachrichten werden zugestellt und häufig in der richtigen Reihenfolge verarbeitet. Wenn ein Server langsam oder überlastet ist, werden "kurze" Verbindungen länger. Wenn es (mehr) Verbindungen gibt, wird wahrscheinlich (mehr) gearbeitet. Verbindungsanzahl und Verbindungsdauer variieren und haben Bedeutung.

Stellen Sie sich einen einfachen HTTP-Server vor. Einige Assets dauern einige Millisekunden, einige API-Aufrufe dauern einige Sekunden, das Laden einer Seite mit einer beliebigen Anzahl von Anforderungen usw. kann einige Zeit dauern. Anforderungen sind nicht von kurzer Dauer, ihre Lebensdauer hängt davon ab, was auf welchem ​​Server verarbeitet wird. leastconnversteht die laufenden Aktivitäten und passt die Verteilung an, genau das, was Sie von einem Load Balancer erwarten.

user5994461
quelle