Wir verwenden HAProxy, um den Lastenausgleich für unsere Websocket- und Kometenanwendung durchzuführen. Im Hintergrund laufen ein HAProxy und drei Anwendungen. Wir verwenden HTTP Basic Auth (und wir werden in Zukunft andere Arten von Auth verwenden, wie z. B. OAuth), um den verbundenen Benutzer zu identifizieren.
Wir können kein reguläres Round-Robin verwenden, da es wichtig ist, dass Verbindungen für einen bestimmten Benutzer auf demselben Server enden. Es spielt keine Rolle, wo, aber es ist wichtig, dass sie denselben Server verwenden.
Ich kenne HAProxy als einen intelligenten Cookie-basierten Ansatz, aber leider wird in unserem Fall manchmal derselbe Benutzer von verschiedenen Computern aus verbunden, sodass der Cookie nicht funktioniert.
Ist es möglich, einen Hash des HTTP-Autorisierungsheaders für den Lastausgleich zu verwenden? Ist es auch möglich, und dies ist komplexer, unsere eigene Hashing-Methode zu definieren?
Folgefrage [nach Willys Antwort]:
Wäre es möglich, dies nur im Anmeldefeld (nach dem Parsen) zu tun balance hdr(Authorization)
, da dies möglich ist ?
Was ist der genaue Algorithmus? Ich glaube, es liegt in der Form vor hash(Authorization) % number_of_backend_server
, aber was ist dann die Hash-Funktion, und was noch wichtiger ist, ist sie optimierbar? (oder kann ich einen Offset hinzufügen).
Ich frage, weil diese App tatsächlich eine XMPP-Komponentenverbindung offen hält und ich die XMPP-Komponenten mit demselben Algorithmus ausgleichen muss . Die to
JID in den XMPP-Zeilengruppen wird durch die HTTP-Header-Autorisierung bestimmt.