Konzeptionell wie funktioniert das load-balancing auf die EJB-tier-Arbeit in Glassfish/ejb-container
Frage ich mich, konzeptionell wie load-balancing funktioniert auf der EJB-Stufe (nicht web-session-Replikation) mit Java EE Container wie Glassfish. Von dem, was ich haben aufgelesen Ihr remote-interface ist ein proxy, dass die Delegierten Ihren Aufruf zu einer von vielen Servern in einer Umgebung.
Wenn die Dinge fehlschlagen, sind Sie in der Lage sein sollen "finish" auf einem anderen server? Ich möchte verstehen, die grundlegende Theorie hinter dieser Lastenausgleich, warum ist es besser als ein paar Server alle laufen einem einfachen web-Applikation mit session-affinity auf einen load-balancer?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie richtig. Im Glassfish, der erste lookup wird versuchen, Kontakt mit einem der server aufgelistet in der
jndi.properties
- Datei. Die server dann wissen alle anderen Knoten im cluster verwendet wird, für round-robin. Die remote-Referenz (proxy) machen das für Sie transparent. Theoretisch Knoten können Hinzugefügt werden/entfernt vom cluster dynamisch. Sehen Glassfish RMI-IIOP-load-balancing und fail-over.Wenn die bean ist stateless, die Sie gar nicht brauchen jede Art von Affinität und die Anfrage kann bearbeitet werden auf jedem Knoten. Jede remote-Referenz fungieren als load-balancer auf seine eigenen.
Wenn die Bohne zustandsbehaftete, es ist stärker Behaart. Die cluster werden versuchen, das beizubehalten, 2 Replik von der Bohne. Und die Anfrage versendet werden gegen diese beiden Replikat. Wenn einer der Knoten stürzt ab, der cluster wird neu eine weitere Replik, bis der Knoten ist wieder da -- Es ist in der Tat ähnlich wie HTTP-session-Replikation mit session-Affinität.
Aber im Gegensatz zu einem web-server, die Bohnen sind transaktionale Komponenten. Also, wenn eine Ausnahme Auftritt, wird die Transaktion zurückgesetzt (Rollback) und die stateful bean wird ungültig erklärt, weil sein Staat kann nicht konsequent sein, nicht mehr.
Wie bereits von Pascal, es ist eine Art von fail-over für eine bestimmte Art von Fehler. Ich den Knoten nicht verfügbar ist, kann die Anfrage erneut weitergeleitet zu einem anderen Knoten. Aber wenn der Knoten ausfällt während die Anforderung verarbeitet wird, weiß ich nicht, ob es erneut woanders.
Wenn du mehr wissen möchtest, schlage ich vor, Sie Lesen Leitfaden für GlassFish Hohe Verfügbarkeit und Cluster-Unterstützung für Glassfish.
Failover (Sie beziehen sich auf die failover-hier nicht load-balancing) ist nicht Teil der Spezifikation soweit ich weiß. Jedoch, die meisten Anbieter unterstützen failover und mehrere EJB-Container können gruppiert sein, um diese Funktion bereitstellen. Im Grunde genommen, den Fortschritt der einzelnen offenen Transaktionen übertragen, um backup server(s) und, wenn der primäre Behälter schlägt fehl, während die Transaktion noch offen ist, ein backup-server übernehmen kann und, unter Umständen, es könnte in der Lage sein, um die Transaktion fortzusetzen (z.B. WebLogic erfordert Methoden deklariert werden, da idempotent). Die häufigsten backup-container wird ein rollback für die Transaktion und das signal der client erneut seinen ursprünglichen Anfrage.
Zuviel Konzepte vermischt, bis hier eine Antwort. Failover != load-balancing, session-affinity ist nicht wirklich im Zusammenhang mit failover (es bedeutet nur, eine Anfrage an den server senden, das hält die session). Failover erreicht werden kann, die auf der web-Ebene mit HTTP Session state replication (in-memory-Replikation, Datenbank, etc). Klären Sie die Frage stellen.