Bereitstellen von Hot einen Java-EAR zu minimieren oder Ausfallzeit einer Anwendung auf einem Server zu beseitigen?

StackOverflow https://stackoverflow.com/questions/221846

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe gehört, dass das ist, was Javarebel tut, aber ist es eine andere gute Möglichkeit, eine neue Version einer EAR, während der Benutzer bereitstellen auf der Vorversion aktiv bleiben? Wir verwenden JBoss für den Anwendungsserver ...

War es hilfreich?

Lösung

Es ist nicht das, was Javarebel tut. Javarebel (laut Beschreibung) Heiß ersetzt die Klassen im Speicher. Es ist nicht akzeptabel im Fall von bestehenden Verbindungen an dem System, da die aktualisierten Klassen können die Client-Logik brechen.

Sobald eine Firma, die ich wurde hatte ein ähnliches Problem zu arbeiten, und es wurde auf diese Weise gelöst:

  • ein Smart-Router wurde als Lastenausgleich verwendet
  • wurde die neue Version zu 50% des Knoten des (neu) Cluster implementiert
  • neue Verbindungen wurden strikt an diesen aktualisierten Knoten geliefert wurden alte Gleichgewicht zwischen alten Knoten
  • alter Knoten wurde nehmen off-line (one-by-one, Anzahl der Clients pro Knoten in Grenzen zu halten)
  • zur gleichen Zeit wurde eine neue Version zu off-line „alten“ Knoten eingesetzt und sie wurden als neue Knoten
  • gebracht
  • aufgrund EJB Clustering, die Sitzungen und Bohnen wurden von anderen alten Knoten
  • aufgenommen
  • schließlich (in wenigen Stunden), nur ein alten Knoten links, eine einzelne Instanz der alten Version mit und alle Kunden mit alter Version wurde mit ihm verbunden
  • , wenn die letzten alten Client-Verbindung beendet wurde, wurde dieser Knoten auch gebracht

Nun, ich bin kein Netzwerk Kerl, und Sie können nicht viele Details geben (wie das, was die Router-Hardware war und so weiter). Mein Verständnis kann dies recht einfach aufgebaut werden, es sei denn, wenn ich mich recht erinnere, wir eine zusätzliche Weblogic Domain einrichten mussten neue Versionen der Anwendung zu implementieren (sonst wäre es mit dem alten auf JNDI Namen in Konflikt sein).

Ich hoffe, das hilft.

P. S. Ichorus vorgesehen um einen Kommentar zu sagen, dass der App auf Kunden-Server eingesetzt wird. So kann der Router Trick nicht durchführbar sein. Nun, ich sehe nur eine praktikable Lösung jetzt (es 21.52 ist jetzt, ich kann Dinge übersehen :)) -

  • Entwickeln Sie eine neue Version mit "versioniert" JNDI-Namen; z.B. wenn der Kunde Bohne unter ejb / Kunden in Version 1 ist, in Version 2 unter ejb wäre / Kunde2
  • Haben Sie eine Geschäftsfassade in der Anwendung mit einem stabilen Grunde Schnittstelle (Werks-Stil), die, wenn sie für Kunden Bohne gefragt, die höchsten versioniert JNDI-Namen zu finden versucht (nicht bei jedem Aufruf, natürlich, für einen Cache kann Stunde oder so). Dass Fassade könnte (und sollte) als separate Anwendung eingesetzt werden - und nie oder sehr selten aktualisiert
  • Jetzt kann jeder neue Kunde würde Zugriff auf die neueste Anwendung kommen zum Einsatz, und die Anwendungen werden nicht in Konflikt.

Dieser Ansatz nimmt eine sorgfältige Planung und Prüfung, sollte aber IMHO arbeiten.

I geändert vor kurzem ein paar Anwendungen in ähnlicher Weise sie koexistieren in der gleichen Domäne zu lassen (bevor sie den gleichen JNDI-Namen für verschiedene Datenquellen).

Andere Tipps

Wie ich verstehe WebLogic verfügt über eine Funktion parallel Einsatz genannt Ausfallzeiten während der EAR Versions-Upgrade zu beseitigen. Sie können die neue Version bereitstellen, ohne die bestehende Anwendung zu stoppen und sobald die neue Version im Einsatz erfolgreich können Sie transparent von der alten zu neuen wechseln.

Ich bin nicht sicher, ob andere Anwendungsserver dies unterstützt.

Ref: http://edocs.bea.com/wls/docs100/deployment/redeploy.html#wp1022490

Vladimir Vorschlag einen Load Balancer um verwendet, ist ein ziemlich sicherer Weg zu erreichen, was Sie wollen. Denken Sie daran, es muss nicht unbedingt sein, ein High-End-Hardware-Load-Balancer. Vielmehr, wenn Sie Front Ihres JBoss-Server mit einer nativen Webserver (Apache oder IIS) und mod_jk oder mod_proxy, können Sie eine gemeinsame Web-Fassade erhalten und die entsprechenden Be- und Routing-Routinen bei EAR Upgrade Zeit implementieren.

// Nicholas

Ich glaube, Sie könnten in den Frühling aussehen wollen OSGi-Framework verwenden. http://www.springframework.org/osgi

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top