Ohne Ausfallzeiten Einsatz für Java-Anwendungen
-
10-10-2019 - |
Frage
Ich versuche, die sehr leichte Lösung für null Ausfallzeiten Einsatz für Java-Anwendungen zu bauen. Aus Gründen der Einfachheit können denken, dass wir zwei Server haben. Meine Lösung ist die Verwendung:
-
Auf der "Front" - einige Load Balancer (Software) -. Ich denke an HAProxy hier
-
Auf dem "zurück." - zwei Server, die beide Tomcat mit bereitgestellten Anwendung ausgeführt
Wenn wir über neue Version bereitstellen
-
Wir deaktivieren einer der Server mit HAProxy, so dass nur ein Server (nennen wir es Server A, die alte Version läuft) zur Verfügung stehen.
-
Deploy neue Version auf anderen Server (nennen wir es Server B), führen die Produktion von Unit-Tests (falls wir sie haben :-) und Server B ermöglichen, mit HAProxy, Server A zur gleichen Zeit zu deaktivieren.
-
Jetzt haben wir wieder nur einen Server aktiv (Server B, mit dem neuen Release). Bereitstellen von neuer Release auf Server B, und es wieder aktivieren.
Jede berät, wie man verbessern? Wie automatisieren?
Jede fertige Lösungen oder muss ich mit meiner eigenen benutzerdefinierten Skripts enden?
Danke!
Lösung
Rolling Upgrade ist in der Tat eine gute Lösung, sofern Sie Ihre Last-Balancer unterstützt diese Option (Server Hunger). Eine weitere Lösung ist OSGi-fähige Anwendungsserver verwenden, um Hot-Teile ersetzen oder ganze Ihre Anwendung.
würde ich die ersten empfehlen. Springsource AMS Aufsicht Konsole ein Cluster von TCServer (eine benutzerdefinierte tomcat auf Steroiden) abbauen können, und IIRC aktualisiere das Walzen automatisch (aber überprüfen Sie die Dokumentation).
Andere Tipps
Haben Sie einen Blick auf die OSGi-Technologie, wenn Sie einen OSGi-Container aufnehmen kann, da es eine gute Isolation und Hot Deployment für OSGi-Bundles zur Verfügung stellt. Wenn Sie den Spring-Framework verwenden, können Sie Frühling OSGi verwenden
LiveRebel die Funktionalität bietet Neustarts für Rollen, bietet CLI-API und Hudson / Jenkins-Plugin für die Automatisierung.
Es gibt einfach einzusetzende , die genau das tut mit Docker-Container.
Bereitstellen Version 1
easy-deploy -p 80:80 -v some/path:other/path my-image:1
Um eine neue Version bereitstellt einfach den Befehl mit dem aktualisierten Tag-Namen ausführen
easy-deploy -p 80:80 -v some/path:other/path my-image:2
Disclosure: Ich baute dieses Tool. Ich baute es genau, weil ich nicht eine einfache Lösung für dieses Problem gefunden.