Übersicht zu Java in Azure Container Apps
Azure Container Apps kann jede containerisierte Java-Anwendung in der Cloud ausführen und bietet dabei flexible Optionen für die Bereitstellung Ihrer Anwendungen.
Wenn Sie Container Apps für Ihre containerisierten Java-Anwendungen verwenden, erhalten Sie Folgendes:
Kostengünstige Skalierung: Wenn Sie den Verbrauchsplan verwenden, können Ihre Java-Apps auf Null skaliert werden. Die Skalierung bei geringem Bedarf für Ihre App führt automatisch zu geringeren Kosten für Ihre Projekte.
Bereitstellungsoptionen: Azure Container Apps ist in Buildpacks integriert, was eine Bereitstellung direkt aus einem Maven-Build, über Artefaktdateien oder mit Ihrer eigenen Dockerfile ermöglicht.
Automatische Arbeitsspeicheranpassung (Vorschau): Container Apps optimiert, wie Java Virtual Machine (JVM) Arbeitsspeicher verwaltet, wodurch der größtmögliche Arbeitsspeicher für Ihre Java-Anwendungen zur Verfügung steht.
Buildumgebungsvariablen: Sie können benutzerdefinierte Schlüsselwertpaare konfigurieren, um den Java-Imagebuild über den Quellcode zu steuern.
Dieser Artikel enthält die Informationen, die Sie zum Erstellen von Java-Anwendungen in Azure Container Apps benötigen.
Bereitstellungstypen
Das Ausführen containerisierter Anwendungen bedeutet in der Regel, dass Sie eine Dockerfile für Ihre Anwendung erstellen müssen. Das Ausführen von Java-Anwendungen in Container Apps bietet allerdings einige Optionen.
type | Beschreibung | Verwendet Buildpacks | Verwendet Dockerfile |
---|---|---|---|
Quellcodebuild | Ermöglicht die direkte Bereitstellung in Container Apps aus Ihrem Quellcode. | Ja | No |
Artefaktbuild | Sie können für die Bereitstellung in Container Apps einen Maven-Build erstellen. | Ja | No |
Dockerfile | Sie können Ihre Dockerfile manuell erstellen und die vollständige Kontrolle über Ihre Bereitstellung übernehmen. | No | Ja |
Hinweis
Die Buildpacks-Bereitstellungen unterstützen JDK-Versionen 8, 11, 17 und 21.
Anwendungstypen
Verschiedene Anwendungstypen werden entweder als einzelne Container-App oder als Container Apps-Auftrag implementiert. Verwenden Sie die folgende Tabelle, um zu entscheiden, welcher Anwendungstyp für Ihr Szenario am besten geeignet ist.
Die Beispielliste in dieser Tabelle ist nicht vollständig, soll Ihnen aber dabei helfen, den Zweck verschiedener Anwendungstypen besser zu verstehen.
type | Beispiele | Implementierung als... |
---|---|---|
Webanwendungen und API-Endpunkte | Spring Boot, Quarkus, Apache Tomcat und Jetty | Einzelne Container-App |
Konsolenanwendungen, geplante Aufgaben, Aufgabenausführung, Batchaufträge | SparkJobs, ETL-Aufgaben, Spring Batch-Auftrag, Jenkins-Pipelineauftrag | Container Apps-Auftrag |
Debuggen
Überprüfen Sie beim Debuggen Ihrer Java-Anwendung in Container Apps unbedingt den Java In-Process Agent auf Protokolldatenstrom- und Konsolendebuggingmeldungen.
Problembehandlung
Beachten Sie beim Entwickeln Ihrer Java-Anwendungen die folgenden Punkte:
Standardressourcen: Standardmäßig sind für eine App eine halbe CPU und 1 GB verfügbar.
Zustandslose Prozesse: Wenn Ihre Container-App ab- und aufskaliert wird, werden Prozesse neu erstellt und heruntergefahren. Planen Sie voraus, damit Sie Daten in freigegebenen Speicher wie Datenbanken und Dateisystemfreigaben schreiben. Erwarten Sie nicht, dass Dateien, die direkt in das Containerdateisystem geschrieben wurden, für einen anderen Container verfügbar sind.
Skalierung auf Null ist die Standardeinstellung: Wenn Sie sicherstellen müssen, dass eine oder mehrere Instanzen Ihrer Anwendung kontinuierlich ausgeführt werden, müssen Sie eine Skalierungsregel definieren, die ihren Anforderungen am besten entspricht.
Unerwartetes Verhalten: Wenn Ihre Container-App nicht erstellt, gestartet oder ausgeführt werden kann, überprüfen Sie, ob der Artefaktpfad in Ihrem Container ordnungsgemäß festgelegt ist.
Buildpack-Supportprobleme: Wenn Ihr Buildpack Abhängigkeiten oder die erforderliche Java-Version nicht unterstützt, erstellen Sie Ihre eigene Dockerfile-Datei, um Ihre App bereitzustellen. Sie können eine Dockerfile-Beispieldatei als Referenz anzeigen.
SIGTERM- und SIGINT-Signale: Standardmäßig verarbeitet die JVM
SIGTERM
- undSIGINT
-Signale und übergibt sie nicht an die Anwendung, es sei denn, Sie fangen diese Signale ab und verarbeiten sie in Ihrer Anwendung entsprechend. Container Apps verwendet sowohlSIGTERM
als auchSIGINT
für die Prozesssteuerung. Wenn Sie diese Signale nicht erfassen und Ihre Anwendung unerwartet beendet wird, gehen diese Signale möglicherweise verloren, es sei denn, Sie behalten sie dauerhaft im Speicher bei.Zugriff auf Containerimages: Wenn Sie eine Artefakt- oder Quellcodebereitstellung in Kombination mit der Standardregistrierung verwenden, haben Sie keinen direkten Zugriff auf Ihre Containerimages.
Überwachung
Alle Standardtools für Einblicke können mit Ihrer Java-Anwendung verwendet werden. Beachten Sie beim Erstellen Ihrer Java-Anwendungen, die in Container Apps ausgeführt werden sollen, die folgenden Punkte:
Metriken: JVM-Metriken (Java Virtual Machine) sind entscheidend für die Überwachung der Integrität und Leistung Ihrer Java-Anwendungen. Die gesammelten Daten umfassen Erkenntnisse zu Speichernutzung, Garbage Collection und JVM-Threadanzahl. Sie können Metriken überprüfen, um die Integrität und Stabilität Ihrer Anwendungen sicherzustellen.
Protokollierung: Senden Sie Anwendungs- und Fehlermeldungen an
stdout
oderstderror
, damit sie im Protokolldatenstrom angezeigt werden können. Vermeiden Sie die direkte Protokollierung im Dateisystem des Containers, wie es üblich ist, wenn Sie beliebte Protokollierungsdienste verwenden.Konfiguration der Leistungsüberwachung: Stellen Sie Leistungsüberwachungsdienste als separate Container in Ihrer Container Apps-Umgebung bereit, damit direkt auf Ihre Anwendung zugegriffen werden kann.
Diagnostik
Azure Container Apps bietet integrierte Diagnosetools ausschließlich für Java-Entwickler. Diese Unterstützung optimiert das Debuggen und die Problembehandlung von Java-Anwendungen, die in Azure Container Apps ausgeführt werden, um eine höhere Effizienz und Bedienerfreundlichkeit zu erzielen.
- Dynamische Protokollierungsebene: Ermöglicht es Ihnen, auf verschiedene Protokolldetailebenen zuzugreifen und diese zu überprüfen, ohne Codeänderungen vorzunehmen oder die App neu starten zu müssen. Einzelheiten finden Sie unter Festlegen der dynamischen Protokollierungsebene.
Skalierung
Wenn Sie sicherstellen müssen, dass Anforderungen von Ihren Front-End-Anwendungen denselben Server erreichen, oder Ihre Front-End-App zwischen mehreren Containern aufgeteilt ist, müssen Sie persistente Sitzungen aktivieren.
Sicherheit
Die Container Apps-Laufzeit beendet TLS/SSL für Sie in Ihrer Container Apps-Umgebung.
Speicherverwaltung
Um die Speicherverwaltung in Ihrer Java-Anwendung zu optimieren, können Sie sicherstellen, dass die JVM-Speicheranpassung in Ihrer App aktiviert ist.
Der Arbeitsspeicher wird in Gibibytes (Gi) und CPU-Kernpaaren gemessen. Die folgende Tabelle zeigt den Bereich der Ressourcen, die für Ihre Container-App verfügbar sind.
Schwellenwert | CPU-Kerne | Speicher in Gibibytes (Gi) |
---|---|---|
Minimum | 0,25 | 0.5 |
Maximum | 4 | 8 |
Kerne stehen in 0,25-Kernschritten zur Verfügung, wobei Arbeitsspeicher in einem Verhältnis von 2:1 verfügbar ist. Wenn Sie beispielsweise 1,25 Kerne benötigen, stehen Ihrer Container-App 2,5 Gi Arbeitsspeicher zur Verfügung.
Hinweis
Für Apps, die JDK-Version 9 oder niedriger verwenden, müssen Sie benutzerdefinierte JVM-Speichereinstellungen definieren, die der Speicherzuweisung in Azure Container Apps entsprechen.
Unterstützung für Java-Komponenten
Azure Container Apps bieten Unterstützung für die folgenden Java-Komponenten als verwaltete Dienste:
Eureka Server for Spring: Dienstregistrierung und -ermittlung sind wichtige Anforderungen für die Verwaltung einer Liste der Live-Anwendungsinstanzen. Ihre Anwendung verwendet diese Liste zum Routing und Lastenausgleich eingehender Anforderungen. Das manuelle Konfigurieren der einzelnen Clients ist zeitaufwendig und kann menschliche Fehler verursachen. Eureka Server vereinfacht die Verwaltung der Dienstermittlung, indem es als Dienstregistrierung fungiert, in der sich Microservices selbst registrieren und andere Dienste im System entdecken können.
Config Server for Spring: Config Server stellt eine zentralisierte externe Konfigurationsverwaltung für verteilte Systeme bereit. Diese Komponente wurde entwickelt, um die Herausforderungen des Verwaltens von Konfigurationseinstellungen über mehrere Microservices in einer cloudeigenen Umgebung zu bewältigen.
Gateway für Spring: Gateway für Spring bietet eine effiziente und leistungsstarke Möglichkeit zum Weiterleiten, Verwalten und Verarbeiten von API-Anforderungen im Rahmen einer Microservicearchitektur. Es dient als API-Gateway, das externe Anforderungen an verschiedene Dienste weiterleitet und verschiedene Funktionen wie Filtern, Lastenausgleich und vieles mehr hinzufügt.
Administrator für Spring: Die verwaltete Komponente „Administrator für Spring“ bietet eine Verwaltungsschnittstelle für Spring Boot-Webanwendungen, die Aktuatorendpunkte haben. Eine verwaltete Komponente bietet Integration und Verwaltung für Ihre Container-App, indem Sie Ihre Container-App an die Komponente „Administrator für Spring“ binden können.