Hintergrund
Java-Entwickler und DevOps Fachleute haben lange gekämpft, um die Bereitstellung von Enterprise-Java-Anwendungen zu automatisieren. Die Komplexität dieser Anwendungen bedeutete in der Regel, dass Anwendungsabhängigkeiten und externe Integrationen konfiguriert wieder werden musste jedes Mal, wenn eine Anwendung in DEV / TEST Umgebungen eingesetzt wurde.
Viele Lösungen beworben, die "einmal modellieren, implementieren überall" Nachricht für Applikations-Deployments. In Wirklichkeit aber es gab immer Feinheiten, die es sehr schwierig, wieder zu verwenden, um eine Anwendungsvorlage über beide aus einer On-Premise virtuellen vSphere-Umgebung und einer AWS-Umgebung, zum Beispiel.
Vor kurzem populär Docker Container jedoch die Idee der Verpackung Anwendungskomponenten in Linux Container, die genau so lange das gleiche auf jedem Linux-Host bereitgestellt werden können als Docker Engine installiert ist.
Leider Anwendungen Enterprise-Java-containerizing ist nach wie vor eine Herausforderung vor allem, weil bestehende Anwendung Zusammensetzung Rahmenbedingungen befassen sich nicht mit komplexen Abhängigkeiten, externe Integrationen oder automatische Skalierung Workflows post-Bereitstellung. Außerdem bedeutete die ephemeren Design von Behältern, dass die Entwickler neue Behälter zu drehen musste und neu zu erstellen, die komplexen Abhängigkeiten und externe Integration mit jeder Version zu aktualisieren.
DCHQ, in gehosteten und On-Premise-Versionen adressiert all diese Herausforderungen und vereinfacht die Containerisierung von Enterprise-Java-Anwendungen über eine vorzeitige Anwendung Zusammensetzung Rahmen, der Docker Compose mit Quer Bild Umgebungsvariable Bindungen, erweiterbare BASH-Skript-Plug-Ins, die können sich zum Zeitpunkt der Anforderung oder nach der Bereitstellung und Anwendungs-Clustering für Hochverfügbarkeit über mehrere Hosts oder Regionen mit Unterstützung für automatische Skalierung aufgerufen werden.
Sobald eine Anwendung bereitgestellt wird, kann ein Benutzer überwachen die CPU, Speicher, und I / O der Laufbehälter, erhalten Benachrichtigungen und Alarme und Tag-2-Operationen wie der geplante Backups durchführen, Container Updates BASH-Skript-Plug-ins verwenden und Skalierung in / Out. Out-of-box-Workflows Darüber hinaus, die mit Jenkins Continuous Delivery erleichtern ermöglichen es Entwicklern, die Java-WAR-Datei von einer laufenden Anwendung zu aktualisieren, ohne die vorhandenen Abhängigkeiten und Integrationen zu stören.
In diesem Blog werden wir die End-to-End-Automatisierung einer Java-Anwendung namens Pizza Shop, die auf zwei verschiedenen Container Anwendungs-Stacks übergehen eingesetzt wird:
- Nginx (für Load Balancing), gruppierten Tomcat und MariaDB (als Datenbank)
- Nginx (für den Lastausgleich), gruppierten Jetty und MariaDB (als Datenbank)
Das gleiche Java-WAR-Datei wird auf zwei verschiedenen Anwendungsservern bereitgestellt werden. DCHQ automatisiert nicht nur die Bereitstellung von Anwendungen - aber es integriert auch mit 12 verschiedenen Wolken, welche die Bereitstellung und automatische Skalierung von Clustern mit Software-Defined Networking zu automatisieren. Wir behandeln:
- Der Aufbau der Applikationsvorlagen, die überall auf jedem Linux-Host ausgeführt wird wiederverwendet kann
- Provisioning & automatische Skalierung der zugrunde liegenden Infrastruktur auf jeder Cloud (mit Rackspace das Beispiel in diesem Blog zu sein)
- Bereitstellen der Multi-Tier-Java-basierte Pizza Shop-Anwendungen auf dem Cluster-Rackspace
- Die Überwachung der CPU, Speicher und I / O der Laufbehälter
- die kontinuierliche Lieferung Workflow-mit Jenkins Aktivieren der WAR-Datei der laufenden Anwendungen zu aktualisieren, wenn ein Build ausgelöst wird
- Skalierung über das Application Server-Cluster für Skalierbarkeit Tests
Der Aufbau TheApplication Vorlagen für die Java-basierte PizzaShop Anwendung auf Tomcat und Jetty
Einmal DCHQ angemeldet (entweder die gehostete DCHQ.io oder On-Premise - Version) kann ein Benutzer zu navigieren App & Machine und klicken Sie dann auf die + Taste , um eine neue zu erstellen Docker Compose Vorlage.
Wir haben vier Anwendungsvorlagen erstellt die offiziellen Bilder von Docker Hub für die gleiche Pizza Shop - Anwendung - aber für vier verschiedene Anwendungsserver.
- 3-Tier PizzaShop (Nginx - Tomcat - MariaDB)
- 3-Tier PizzaShop (Nginx - Landungssteg - MariaDB)
Über beide Vorlagen, werden Sie feststellen, dass Nginx ein BASH-Skript-Plug-In ist das Aufrufen der Container IP der Anwendungsserver in der default.conf Datei dynamisch (oder zum Zeitpunkt der Anforderung) hinzuzufügen.
Die Anwendungsserver (Tomcat und Jetty) berufen sich auch ein BASH-Skript-Plug-in die Pizza Shop Java WAR-Dateien von einem externen URL Tomcat, JBoss und Jetty berufen sich exakt die gleichen Plug-in zu implementieren - mit Ausnahme der WAR-Datei wird eingesetzt zu werden auf verschiedenen Verzeichnissen:
- Tomcat - dir = / usr / local / tomcat / webapps / ROOT.war
- Jetty - dir = / var / lib / Jetty / webapps / ROOT.war
Sie werden feststellen , dass der CLUSTER_SIZE Parameter können Sie die Anzahl der Container angeben zu starten (mit den gleichen Anwendungsabhängigkeiten).
Der Host - Parameter können Sie den Host an Sie für Container - Implementierungen verwenden möchten. Auf diese Weise können Sie für Ihren Anwendungsserver - Cluster über verschiedene Hosts (oder Regionen) mit hoher Verfügbarkeit gewährleisten und Sie können mit Affinitätsregeln einhalten , um sicherzustellen , dass die Datenbank auf einem separaten Host zum Beispiel läuft. Hier sind die Werte für den Host - Parameter unterstützt:
- host1, host2, host3 usw. - wählt einen Host zufällig innerhalb eines Datenzentrums (oder Cluster) für Container - Implementierungen
- <IP - Adresse 1, IP - Adresse 2 usw.> - ermöglicht es dem Benutzer die tatsächliche IP - Adressen angeben für Container - Implementierungen verwenden
- <Hostname 1, Hostname 2 usw.> - ermöglicht es dem Benutzer die tatsächlichen Host - Namen angeben , für Container - Implementierungen verwenden
- Wildcards (zB "db- *" oder "app-SRV *") - die Platzhalter festlegen , die in einem Host - Namen zu verwenden ,
Zusätzlich kann eine Benutzerumgebung Quer Bild Variablenbindungen erstellen , indem Sie einen Verweis auf ein anderes Bild der Umgebungsvariable zu machen. Einschließlich - In diesem Fall haben wir mehrere Bindungen gemacht mysql: // {{MariaDB | container_ip}}: database.url = jdbc 3306 / {{MariaDB | MYSQL_DATABASE}} - , in dem die Datenbankcontainer IP dynamisch auf Anfrage aufgelöst Zeit und wird verwendet , um sicherzustellen , dass die Anwendungsserver , eine Verbindung mit der Datenbank herstellen.
Hier ist eine Liste der unterstützten Umgebungsvariablen Werte:
- {{alphanueric | 8}} - erzeugt eine zufällige 8-stellige alphanumerische Zeichenfolge. Dies ist besonders nützlich für die Erstellung von zufällige Passwörter.
- {{<Image Name> | ip}} - können Sie die Host - IP - Adresse eines Containers als Wert für eine Umgebungsvariable einzugeben. Dies ist am nützlichsten zum Ermöglichen des Middleware - Ebene eine Verbindung mit der Datenbank herzustellen.
- {{<Image Name> | container_ip}} - ermöglicht es Ihnen , die interne IP eines Containers als Wert für eine Umgebungsvariable einzugeben. Dies ist besonders praktisch , wenn es die Middleware Tier eine sichere Verbindung mit der Datenbank herzustellen (ohne den Datenbankport ausgesetzt).
- {{<Image Name> | port _<Port Number>}} - können Sie die Port - Nummer eines Containers als Wert für eine Umgebungsvariable einzugeben. Dies ist am nützlichsten zum Ermöglichen des Middleware - Ebene eine Verbindung mit der Datenbank herzustellen. In diesem Fall spezifiziert die Portnummer muss der interne Port - Nummer zu sein - also nicht den externen Anschluss, der mit dem Behälter zugeordnet ist. Beispiel : {{PostgreSQL | port_5432}} wird dem tatsächlichen externen Port übertragen werden , dass die Middleware - Ebene ermöglichen , eine Verbindung mit der Datenbank herzustellen.
- {{<Image Name> | <Environment Variable Name>}} - können Sie den Wert eines Bildes Umgebungsvariable in ein anderes Bild der Umgebungsvariable einzugeben. Die Anwendungsfälle sind hier endlos - wie die meisten Multi-Tier - Anwendungen Quer Bild Abhängigkeiten haben.
Provisioning & Auto-Skalierung der zugrunde liegenden Infrastruktur auf jeder Cloud
Sobald eine Anwendung gespeichert wird, kann ein Benutzer ein Cloud-Provider registrieren, um die Bereitstellung und automatische Skalierung von Clustern auf 12 verschiedenen Cloud-Endpunkte, einschließlich Openstack, Cloud, Amazon Web Services, Rackspace, Microsoft Azure, DigitalOcean, HP Public Cloud, zu automatisieren IBM Softlayer, Google Compute Engine, und viele andere.
Erstens kann ein Benutzer ein Cloud - Provider für Rackspace (zum Beispiel) registrieren , um von der Navigation Cloud - Anbieter und dann auf dem Anklicken + Taste zur Auswahl von Rackspace . Die Rackspace API Key muss zur Verfügung gestellt werden - die aus dem Kontoeinstellungen Abschnitt der Rackspace Cloud Control Panel abgerufen werden können.
Ein Benutzer kann dann einen Cluster mit einer Auto-Scale - Richtlinie erstellen automatisch neue Cloud - Server zum Hochdrehen. Dies kann durch die Navigation zu erfolgen Cluster Seite und dann auf dem Anklicken + Taste. Sie können eine kapazitätsorientierte Platzierung Richtlinie auswählen und dann Weave als Netzwerkschicht , um sicher zu erleichtern, passwortgeschützten Quer Container Kommunikation über mehrere Hosts innerhalb eines Clusters. Die Auto-Scale - Politik in diesem Beispiel legt die maximale Anzahl von VMs (oder Cloud - Server) bis 10.
Ein Benutzer kann jetzt Bestimmung eine Reihe von Cloud - Server auf dem erstellten Cluster neu durch die Navigation in Maschinen und dann auf dem Anklicken + Taste zur Auswahl von Rackspace . Sobald der Cloud - Provider ausgewählt ist, kann ein Benutzer wählen Sie die Region, Größe und Bild benötigt. Ports können auf den neuen Cloud - Server (zB 32.000-59.000 für Dockarbeiter, 6783 für Weave und 5672 für RabbitMQ) geöffnet werden. Ein Data Center (oder Cluster) wird dann ausgewählt und die Anzahl der Cloud - Server angegeben werden können.
Bereitstellen der Multi-Tier Java-basierte Pizza Shop-Anwendung auf dem Cluster Rackspace
Sobald die Cloud-Server bereitgestellt werden, kann ein Benutzer eine Multi-Tier-Bereitstellung-Docker basierte Java-Anwendungen, die auf der neuen Cloud-Server. Dies kann durch die Navigation auf der Self-Service-Bibliothek und klicken Sie dann auf Anpassen getan werden, um eine Multi-Tier-Anwendung zu beantragen.
Ein Benutzer kann ein Umwelt-Tag (wie DEV oder QE) auswählen und das Cluster erstellt, bevor sie auf Rackspace Ausführen klicken
Die CPU-Überwachung, Speicher und I / O-Auslastung der Laufbehälter
Sobald die Anwendung in Betrieb ist, überwachen unsere Entwickler die CPU, Speicher, und E / A der laufenden Container Benachrichtigungen zu erhalten, wenn diese Metriken eine vordefinierte Schwelle überschreitet. Dies ist besonders nützlich, wenn unsere Entwickler funktionale Leistungsfähigkeit und Lasttests.
Ein Benutzer kann historische Monitoring Analysen durch und Fragen im Zusammenhang mit Container - Updates korrelieren oder Installationen aufzubauen. Dies kann durch einen Klick auf das getan werden Aktionen Menü der laufenden Anwendung und dann auf Überwachung . Ein benutzerdefinierten Zeitraum kann CPU, Speicher zu lesen und E / A - historisch ausgewählt werden.
Die kontinuierliche Lieferung Aktivieren Workflow mit Jenkins So aktualisieren Sie die WAR-Datei der laufenden Anwendung Wenn A Körperbau ausgelöst wird
Für Entwickler, die die "unveränderliche" Container-Modell zu folgen, indem sie Bilder Docker Wiederaufbau der Anwendungscode und Spinnen neue Container mit jeder Anwendung zu aktualisieren, DCHQ stellt ein automatisiertes Build-Funktion, die es Entwicklern ermöglicht, automatisch erstellen Docker Bilder von Dockerfiles oder private GitHub Projekte, enthaltend Dockerfiles.
Viele Entwickler können jedoch wollen die laufenden Anwendungsserver - Container mit der neuesten Java - WAR - Datei zu aktualisieren , statt. Dafür ermöglicht DCHQ Entwickler eine kontinuierliche Lieferung Workflow mit Jenkins zu ermöglichen. Dies kann durch einen Klick auf das getan werden Aktionen Menü der laufenden Anwendung und wählen Sie dann Continuous Delivery . Ein Benutzer kann eine Jenkins - Instanz auswählen , die bereits mit DCHQ registriert wurde, ist die tatsächliche Job auf Jenkins, die die neueste WAR - Datei, und dann ein BASH - Skript - Plug-in diesem Build zu greifen produzieren und sie auf einem laufenden Anwendungsserver bereitstellen. Sobald diese Richtlinie gespeichert wird, die neueste WAR - Datei von Jenkins jedes Mal , wenn ein Build ausgelöst greifen DCHQ wird und stellen Sie sie auf dem laufenden Anwendungsserver.
Entwickler als Ergebnis haben immer die neueste Java-WAR-Datei auf ihre laufenden Container in DEV / TEST Umgebungen eingesetzt.
Skalieren von den Tomcat Application Server-Cluster
Wenn die laufende Anwendung Ressource eingeschränkt wird, kann ein Benutzer die Anwendung zu skalieren, um die zunehmende Belastung gerecht zu werden. Darüber hinaus kann ein Benutzer die Skala während der Geschäftszeiten zu planen und die Waage in den Wochenenden zum Beispiel.
Um den Cluster von Tomcat - Server von 2 bis 4 skalieren kann ein Benutzer klicken Sie auf den Aktionen Menü der laufenden Anwendung und wählen Sie dann Scale - Out . Ein Benutzer kann dann geben Sie die neue Größe für den Cluster und klicken Sie dann auf Jetzt ausführen .
Wir haben dann die BASH-Plug-in so Nginx die default.conf Datei zu aktualisieren, dass sie von dem neuen Anwendungsserver hinzugefügt bewusst ist. Die BASH-Skript-Plug-Ins können auch Anwendungsfälle aufzunehmen wie Reinigung Protokolle oder Aktualisieren von Konfigurationen bei definierten Frequenzen eingeplant werden. Eine Anwendung Zeitlinie zur Verfügung steht jede Änderung an der Anwendung für die Prüfung und Diagnose gemacht zu verfolgen.
Zur Ausführung eines Plug-in auf einem laufenden Behälter kann ein Benutzer klicken Sie auf den Aktionen Menü der laufenden Anwendung und wählen Sie dann Plug-ins . Ein Benutzer kann dann wählen Sie die Load - Balancer (Nginx) Container, suchen Sie nach dem Plug-in , die ausgeführt werden muss, Container Neustart mit der Toggle - Button aktivieren. Das Standardargument für dieses Plug-in alle Container IP des laufenden Tomcat - Server dynamisch zu lösen und sie als Teil der default.conf Datei hinzufügen.
Eine Anwendung Zeitlinie zur Verfügung steht jede Änderung an der Anwendung für die Prüfung und Diagnose gemacht zu verfolgen. Dies kann aus dem expandierbaren Menü am unteren Rand der Seite einer laufenden Anwendung zugegriffen werden.
Warnungen und Hinweise sind für, wenn Behälter oder Hosts sind oder wenn die CPU & Speicher Nutzung entweder auf Hosts oder Behälter einen definierten Schwellenwert überschreitet.
Schlussfolgerung
Enterprise-Java-Anwendungen containerizing ist nach wie vor eine Herausforderung, vor allem, weil bestehende Anwendung Zusammensetzung Rahmenbedingungen befassen sich nicht mit komplexen Abhängigkeiten, externe Integrationen oder automatische Skalierung Workflows post-Bereitstellung. Außerdem bedeutete die ephemeren Design von Behältern, dass die Entwickler neue Behälter zu drehen musste und neu zu erstellen, die komplexen Abhängigkeiten und externe Integration mit jeder Version zu aktualisieren.
DCHQ, in gehosteten und On-Premise-Versionen adressiert all diese Herausforderungen und vereinfacht die Containerisierung von Enterprise-Java-Anwendungen über eine vorzeitige Anwendung Zusammensetzung Framework, das Cross-Bild-Umgebungsvariable Bindungen, erweiterbare BASH-Skript-Plug-Ins ermöglicht, die bei aufgerufen werden kann fordern Zeit oder nach der Bereitstellung und Anwendungs-Clustering für Hochverfügbarkeit über mehrere Hosts oder Regionen mit Unterstützung für automatische Skalierung.
Zugang zu den Out-of-Box Multi-Tier-Java-Anwendungsvorlagen zusammen mit Application-Lifecycle-Management-Funktionalität wie Überwachung, Container-Updates, Skala in / out und kontinuierliche Lieferung zu erhalten.
No comments:
Post a Comment