Freigeben über


Skalieren mit durchgehender Sicherheit, Überwachung und Automatisierung

Beim Entwerfen von Anwendungen müssen wir bestimmen, wie diese sich an Änderungen der Arbeitsauslastung anpassen, nach unerwarteten Fehlern wiederherstellen, Sicherheitsrisiken minimieren lassen usw. Zwar könnte man mit einem Trial- and Error-Konzept beginnen, dies raubt aber Zeit, die für andere Ziele der Organisation brauchen, und könnte sich negativ auf unseren Ruf auswirken. Azure bietet Architekturanleitungen, die erforderlich sind, um alles von Anfang richtig zu machen. Dazu bekommen Sie alles, was Sie brauchen, um eine skalierbare Anwendung zu erstellen – von modernster Sicherheit und automatischer Skalierung bis hin zu unterstützenden Services für Daten, Nachrichten, Zwischenspeicherung, Leistungsüberwachung und Automatisierung. Viele dieser unterstützenden Services basieren auch auf beliebter Open-Source-Software - wie PostgreSQL, Redis, JMS und Kafka - so dass Sie an proprietäre Lösungen gebunden sind.

Diagramm mit der Überschrift „Plattformservices“ und den Logos für die in diesem Artikel beschriebenen Services.

Sehen wir uns einige wichtige Azure-Services und -Features an, und wie Sie diese verwenden können, um skalierbare Java-Anwendungen zu erstellen.

Erweitern der Funktionen für Java-Anwendungen – Datenbanken und Messaging

Zusätzlich zur Bereitstellung mehrerer Optionen für die Ausführung Ihres Java-Codes bietet Azure eine breite Palette von vollständig verwalteten Services zur Unterstützung Ihrer Datenbankanforderungen – einschließlich Azure Database for PostgreSQL, Azure Database for MySQL, MongoDB Atlas, Azure Cosmos DB, Azure SQL-Datenbank und Azure SQL Managed Instance. Dies gilt auch für Messaging, mit Optionen wie Azure Service Bus, Azure Event Hubs und Apache Kafka for Confluent Cloud.

Die Azure Service Bus Premium-Stufe unterstützt JMS, das Java Messaging Service-Programmiermodell. Unabhängig davon, ob Ihre Anwendungen auf virtuellen Computern, in Kubernetes oder auf vollständig verwalteten PaaS-Services ausgeführt werden, können Sie diese vollständig verwalteten Daten- und Messagingservices schnell mithilfe von Open-Source-Clients, Azure Java SDKs, Spring Starters und Anwendungsserverintegrationen bereitstellen und verwenden. Alle bieten die Compliance-, Verfügbarkeits- und Zuverlässigkeitsgarantien, die Sie von Microsoft und Azure erwarten können. Viele Java- und Spring-Entwickler möchten idiomatische Bibliotheken verwenden, um Verbindungen mit ihren bevorzugten Clouddiensten zu vereinfachen. Microsoft unterhält eine umfassende Liste von Bibliotheken, Treibern und Modulen, mit denen Sie auf einfache Weise mit Azure-Services über Daten, Nachrichten, Cache, Speicher, Ereignisse, Verzeichnisse und Secret-Management hinweg interagieren können. Weitere Informationen finden Sie im Spring Cloud Azure-Entwicklerhandbuch.

Diagramm, das die Features von Spring Cloud Azure und die zugehörigen Azure-Services auflistet.

Diagramm, das die Feature-Kategorien und zugeordneten Azure-Plattformservices zeigt, die von verschiedenen Java-Bibliotheken, Treibern und Spring-Modulen unterstützt werden.

Zero-Trust – Sicheres Netzwerk

Sie können Ihre Java-Anwendungen schützen, indem Sie sie in einem virtuellen Azure-Netzwerk bereitstellen – dem grundlegenden Baustein für Ihre eigenen privaten Netzwerke in Azure. Virtuelle Netzwerke ermöglichen vielen Azure-Ressourcentypen (z. B. virtuellen Computern) die sichere Kommunikation miteinander sowie mit dem Internet und lokalen Netzwerken und Systemen. Sie können ein virtuelles Netzwerk verwenden, um Ihre Anwendungen zu isolieren und Back-End-Services aus dem Internet zu unterstützen und sie in Ihren privaten Netzwerken zu platzieren. Sie können die vollständige Kontrolle über den Eingang und Ausgang für Ihre Anwendungen und Back-End-Systeme übernehmen.

Diagramm des Accelerators „Azure Container Apps-Zielzone“.

Zero-Trust - Sichere End-to-End-Kommunikation

Die Implementierung sicherer Kommunikation als Teil einer Lösungsarchitektur kann eine Herausforderung darstellen. Viele Unternehmen rotieren ihre Zertifikate manuell oder erstellen eigene Lösungen, um Bereitstellung und Konfiguration zu automatisieren. Selbst dann gibt es immer noch Datenexfiltrationsrisiken, wie z. B. unbefugtes Kopieren oder Datenübertragung.

Mit Azure können Sie die End-to-End-Kommunikation sichern oder die Sicherheit auf Transportebene an jedem Kommunikationspunkt terminieren. Sie können auch die Bereitstellung und Konfiguration für alle Azure-Ressourcen automatisieren, die zum Sichern der Kommunikation erforderlich sind.

Basierend auf dem Prinzip „Niemals vertrauen, immer überprüfen und ohne Anmeldeinformationen“ hilft Zero Trust, alle Kommunikationen zu sichern, indem unbekannte und nicht verwaltete Zertifikate eliminiert werden, und indem nur Zertifikaten vertraut wird, die durch Überprüfen der Identität vor dem Gewähren des Zugriffs auf diese Zertifikate freigegeben werden. Sie können jede Art von TLS/SSL-Zertifikat verwenden, etwa von einer Zertifizierungsstelle ausgestellte Zertifikate, erweiterte Validierungszertifikate, Wildcard-Zertifikate mit Unterstützung für eine beliebige Anzahl von Subdomänen oder selbstsignierte Zertifikate für Entwicklungs- und Testumgebungen.

Java- oder Spring Boot-Apps können Zertifikate sicher aus Azure Key Vault laden (weiter unten erläutert). Mit Azure Key Vault steuern Sie die Speicherung und Verteilung von Zertifikaten, um versehentliche Lecks zu reduzieren. Anwendungen und Services können sicher auf Zertifikate zugreifen, indem verwaltete Identitäten, rollenbasierte Zugriffssteuerung und das Prinzip der geringsten Berechtigungen verwendet werden. Dieses sichere Laden erfolgt mithilfe des Azure Key Vault JCA (Java Cryptography Architecture)-Anbieters.

Diagramm der Architektur für die sichere End-to-End-Kommunikation für Spring Boot-Apps.

Zero-Trust – Verwalten von Secrets

Viele Java-Anwendungen stellen eine Verbindung mit unterstützenden Services mithilfe von URLs und Anmeldeinformationen her – Informationen, die, wenn offengelegt, verwendet werden könnten, um nicht autorisierten Zugriff auf vertrauliche Daten zu erhalten. Das Einbetten solcher Informationen in eine App selbst stellt aus vielen Gründen ein großes Sicherheitsrisiko dar, einschließlich der Ermittelbarkeit über ein Code-Repository. Viele Entwickler externalisieren solche Anmeldeinformationen mithilfe von Umgebungsvariablen, so dass mehrere Anwendungen sie laden können; dies verschiebt jedoch nur das Risiko vom Code selbst zur Ausführungsumgebung.

Diagramm mit der Überschrift „Zero Trust – Verwalten von Secrets mithilfe von Azure Key Vault“ und einer Zusammenfassung der in diesem Abschnitt beschriebenen Features.

Azure Key Vault bietet eine bessere und sicherere Möglichkeit, Secrets zu schützen. Es bietet Ihnen die vollständige Kontrolle über die Speicherung und Verteilung von Anwendungssecrets mithilfe der rollenbasierten Zugriffssteuerung (Role Based Access Control, RBAC) und dem Prinzip der geringsten Berechtigungen, um den Zugriff zu beschränken. Sie behalten die Kontrolle über Ihre Anwendungssecrets: Sie erteilen Ihren Anwendungen lediglich die Berechtigung, diese bei Bedarf zu verwenden. Beim Starten der Anwendung authentifiziert sich die Anwendung vor dem Gewähren des Zugriffs auf Secrets mit Microsoft Entra ID und Azure Key Vault mit Azure RBAC. Azure Key Vault beinhaltet vollständige Prüffunktionen und verfügt über zwei Dienstebenen: Die Dienstebene „Standard“ verschlüsselt mit einem Softwareschlüssel, und die Dienstebene „Premium“ enthält durch HSM (Hardwaresicherheitsmodul) geschützte Schlüssel.

Endbenutzerauthentifizierung und -autorisierung

Die meisten Java-Anwendungen für Unternehmen erfordern die Benutzerauthentifizierung und -autorisierung, die Sie mit Microsoft Entra ID implementieren können – einer vollständigen Identitäts- und Zugriffsverwaltungslösung mit integrierter Sicherheit. Endbenutzerkonten können Organisationsidentitäten oder soziale Identitäten von Facebook, Twitter oder Gmail mit Microsoft Entra ID und Azure Active Directory B2C sein. Sie können auf Microsoft Entra ID basierende Lösungen mithilfe der Microsoft Authentication Library for Java oder Spring Boot Starter für Microsoft Entra implementieren. Sie können auch einen beliebigen Identitätsanbieter ihrer Wahl verwenden – z. B. ForgeRock, Auth0, Ping oder Okta.

End-to-End-Überwachung

Mit Azure können Sie Ihre Java-Anwendungen mit jedem beliebigen Tool und jeder Plattform durchgängig überwachen. Sie können auch vollständig verwaltete systemeigene Überwachung implementieren – einschließlich Anwendungsleistungsüberwachung (Application Performance Monitoring, APM, und zwar mit Application Insights, einem Feature von Azure Monitor. Dies bietet starke Unterstützung für Java, Spring und Frameworks wie Micrometer und Spring Boot, so dass Sie Probleme schnell identifizieren und beheben können. Zu den Funktionen gehören Streaming für Livemetriken, die Verfolgung von Anforderungsraten und Antwortzeiten, die Ablaufverfolgung für Ereignisse und externe Abhängigkeitsraten. Über diese Funktionen können Sie die Verfügbarkeit, Leistung, Zuverlässigkeit und Nutzung Ihrer Java-Anwendungen in Azure oder lokal umfassend überwachen.

Sie können alles durchgehend überwachen, indem Sie Protokolle und Metriken in Log Analytics aggregieren, einem Tool im Azure-Portal, das zum Bearbeiten und Ausführen von Abfragen für Protokolle und Metrikdaten in Azure Monitor verwendet werden kann. Sie können eine Abfrage schreiben, die eine Reihe von Datensätzen zurückgibt, und dann Funktionen von Log Analytics zum Sortieren, Filtern und Analysieren verwenden. Sie können auch eine erweiterte Abfrage schreiben, um eine statistische Analyse durchzuführen und die Ergebnisse in einem Diagramm zu visualisieren und auf diese Weise einen bestimmten Trend zu erkennen. Unabhängig davon, ob Sie die Ergebnisse Ihrer Abfragen interaktiv verwenden oder mit anderen Azure Monitor-Features wie Protokollabfragewarnungen oder Arbeitsmappen nutzen, ist Log Analytics ein sehr gutes Tool zum Schreiben und Testen dieser Abfragen.

Wir wissen natürlich, dass Kunden, die ihre Java-Anwendungen zu Azure bringen, weiterhin dieselben APM-Tools verwenden möchten, die sie nutzen, um ihre lokalen Anwendungen zu überwachen. Um dies zu unterstützen, sind wir mit New Relic, AppDynamics, Dynatrace und Elastic Partnerschaften eingegangen, um deren Überwachungslösungen in Azure App Service- und Azure Container Apps zu integrieren. Überwachungsagenten werden neben Ihrem Code ausgeführt, und wir installieren und halten die Agenten für Sie auf dem neuesten Stand. Wenn Sie Bereitstellungen zu Azure Container Apps, Azure Kubernetes Service oder virtuellen Computern durchführen, können Sie alle diese Agenten (einschließlich New Relic, AppDynamics, Dynatrace, Elastic und Datadog) zusammen mit Ihren Anwendungen ausführen, müssen Sie aber selbst installieren und verwalten. Ebenso können Sie alles durchgängig überwachen, indem Sie Protokolle und Metriken in Elastic und Splunk aggregieren.

Diagramm mit der Überschrift „End-to-End-Überwachung mit jedem Tool und jeder Plattform“, einem Beispiel-Screenshot und Logos für die in diesem Artikel beschriebenen Tools.

Wir wissen auch, dass viele Kunden weiterhin Grafana verwenden möchten, um ihre Metriken abzufragen, zu visualisieren, Benachrichtigungen zu den Metriken zu erhalten und diese zu verstehen. Aus diesem Grund haben wir uns mit Grafana Labs zusammengetan, um Azure Managed Grafana bereitzustellen, einen vollständig verwalteten Service, mit dem Kunden Grafana nativ auf Azure ausführen können. Dieser Service erleichtert die Bereitstellung sicherer und skalierbarer Grafana-Instanzen und verbindet sie mit Open Source-, Cloud- und Drittanbieterdatenquellen zur Visualisierung und Analyse. Der Service ist für azure-native Datenquellen wie Azure Monitor und Azure Data Explorer optimiert und beinhaltet APM-Integrationen (Application Performance Monitoring) mit Azure-Compute-Services wie Azure App Service, Azure Container Apps, Azure Kubernetes Service, Splunk, Datadog und Azure Virtual Machines.

Beschleunigen von Java-Anwendungen mithilfe der Zwischenspeicherung

Wenn die Workloads für Ihre Java-Anwendungen zunehmen, können Sie die Leistung steigern, indem Sie Azure Cache for Redis verwenden, um eine In-Memory-Zwischenspeicherungsebene für Abfrageergebnisse, Sitzungszustände und statische Inhalte zu implementieren. Dies ist eine hervorragende Möglichkeit, den Anwendungsdurchsatz zu verbessern und die Latenz zu reduzieren, ohne die zugrunde liegende Datenbank neu erstellen zu müssen. Azure Cache for Redis Enterprise-Ebenen, die in Partnerschaft mit Redis entwickelt und vollständig von Microsoft verwaltet werden, stellen eine höchst verfügbare und skalierbare Bereitstellungsoption für die Ausführung von Redis auf Azure dar – einschließlich Features wie aktive Georeplikation, externalisierte Sitzungsverwaltung und schnelle Suche und Indizierung.

Diagramm mit der Überschrift „Beschleunigen und Skalieren von Java-Apps mit Redis Cache“ und einer Zusammenfassung der in diesem Abschnitt beschriebenen Features.

Autoskalierung

Alle Azure-„Compute“-Services für die Ausführung von Java-Anwendungen unterstützen die automatische Skalierung (Auto-Scaling), die Ihnen dabei helfen kann, die Kosteneffizienz zu maximieren und Anpassungen an sich ändernde Workloads vorzunehmen, ohne für mehr Kapazität zu bezahlen, als Sie benötigen. Nach der Aktivierung können Sie sicher sein, dass sich die automatische Skalierung um Ihre zugrunde liegende Infrastruktur und Ihre Anwendungsworkloads kümmert.

Diagramm mit der Überschrift „Höhere Auslastung von Apps mit Autoskalierung“ und einer Zusammenfassung der in diesem Abschnitt beschriebenen Features.

Sie können basierend auf Last oder Zeitplan automatisch auf- und abwärts skalieren. Im lastbasierten (oder metrikbasierten) Modus werden Ihre Anwendungen horizontal auf die Ressourcen skaliert, die für die Verarbeitung der Last erforderlich sind, bis zu den von Ihnen festgelegten Grenzwerten. Ebenso fallen Ressourcen, die beim Abnehmen der Last horizontal skaliert werden, niemals unter die von Ihnen festgelegten Mindestwerte.

Im zeitplanbasierten Modus werden Ihre Anwendungen basierend auf einem definierten Zeitplan und Grenzwerten auf- und abwärts skaliert. Der zeitplanbasierte Modus ist nützlich für Workloads, die einem vorhersagbaren Muster folgen, und kann verwendet werden, um einen Basisplan für eine auslastungsbasierte Skalierung einzurichten.

Automatisierung – von der Idee zur Produktion

Wenn Sie Ihre Anwendungen in die Cloud verschieben, möchten Sie alles automatisieren – je nach Bedarf für die Java-Entwicklung im Unternehmensmaßstab. Sie müssen die automatische Skalierung in Betracht ziehen, um Anwendungsworkloads zu berücksichtigen, wie zuvor beschrieben. Sie müssen aber auch Ihre Cloudumgebung im Ganzen skalieren und automatisieren – idealerweise von der Idee zur Produktion – einschließlich der schnellen Bereitstellung neuer Umgebungen für Test-, QA-, Produktions-, Blau-/Grün-Bereitstellungen, geographische Erweiterungen usw.

Diagramm mit Feldern für die Kategorien Vorbereitung, Build und Bereitstellung mit zugehörigen Logos für die in diesem Abschnitt beschriebenen Tools.

Mit Azure können Sie mithilfe einer breiten Palette von Tools und Plattformen automatisieren – von der Idee zur Produktion. Allgemein betrachtet können solche Automatisierungspipelines in drei Kategorien unterteilt werden:

  • Vorbereitungspipelines – Sie können Azure-Ressourcen mithilfe von Terraform-, Azure Resource Manager(ARM)-Vorlagen, Bicep-Vorlagen oder der Azure CLI vorbereiten, je nach Bedarf, um wiederholbare Skripts für konsistentes Auf- und Abwärtsskalieren von Umgebungen zu erstellen.

  • Build-Pipelines – Basierend auf Tools wie Maven oder Gradle, wie weiter oben in dieser Dokumentation beschrieben.

  • Bereitstellungspipelines – Sie können GitHub-Aktionen, Azure-Pipelines, Jenkins-Pipelines, GitLab-Pipelines oder die Azure CLI verwenden, um Codebereitstellungen zu automatisieren, einschließlich Blau/Grün-Bereitstellungen, die wichtige Systeme in der Produktion halten, während Sie Codeupdates bereitstellen.

Weiterverwendung vorhandener Methoden und Systeme

Wenn Sie Ihre Java-Anwendungen zu Azure migrieren oder erstellen und dann skalieren, können Sie Ihre vorhandenen Investitionen in Netzwerke, Überwachung, Automatisierung, Identitätsanbieter, lokale Systeme, Entwicklung und Build-Tools sowie App-Bibliotheken verwenden. Die folgende Tabelle enthält einige Beispiele:

Kategorie Produkte und Services aus dem Java-Ökosystem
Netzwerk F5, Palo Alto, Cloudflare, Checkpoint, Infoblox
Überwachung New Relic, Dynatrace, AppDynamics, Elastic, Splunk
Automation GitHub Actions, Azure Pipelines, Jenkins, GitLab
Identitätsanbieter Microsoft Entra ID, ForgeRock, Auth0, Ping, Okta
Lokales System Datenbanken (z. B. Oracle DB oder IBM DB2), Messaging (z. B. IBM MQ oder TIBCO EMS), Ereigniserstellung (z. B. Kafka), Verzeichnisse (z. B. Microsoft Entra ID, OpenLDAP oder IBM ID)
Entwicklungstools IntelliJ, Visual Studio Code, Eclipse, Spring Tool Suite, Maven, Gradle

Referenzarchitekturen

Das Azure Architecture Center bietet Anleitungen zum Erstellen von Lösungen auf Azure unter Verwendung etablierter Muster und Methoden sowie zur Nutzung dieser Funktionen. Diese Referenzarchitekturen basieren auf dem, was wir aus Kundeneinsätzen gelernt haben, unter Berücksichtigung von Kostenoptimierung, operativer Exzellenz, Leistungseffizienz, Zuverlässigkeit, Skalierbarkeit, Sicherheit, Überwachung, Smoke-Testing und mehr. Sie berücksichtigen auch Lösungsentwurfskomponenten wie Azure-Zielzonen – Umgebungen zum Hosten Ihrer Workloads, die über Infrastruktur-as-Code bereitgestellt werden, je nach Bedarf, um Java-Anwendungsmigrationen und Greenfield-Entwicklung im Unternehmensmaßstab zu ermöglichen.

Hier sehen Sie beispielsweise einen Zielzonenbeschleuniger für Azure Container Apps, der zeigt, wie Sie ein Hub-and-Spoke-Design implementieren, in dem Azure Container Apps in einer einzigen „Speiche“ bereitgestellt werden, die von gemeinsam genutzten Services abhängig ist, die im Hub gehostet werden. Dieses Projekt wird mit Komponenten erstellt, um den Grundsätzen des Microsoft Azure Well-Architected Framework gerecht zu werden. Informationen zur Implementierung dieser Architektur finden Sie im Repository Accelerator „Azure Container Apps-Zielzone“ auf GitHub. Sie können den gleichen Ansatz auf alle Java-Anwendungen anwenden, die auf einem beliebigen Azure-„Compute“-Ziel bereitgestellt werden , z. B. Azure App Service oder Azure Kubernetes Service. Darüber hinaus verfügen wir bei der Migration vorhandener Java-Anwendungen zu Azure über einen umfassenden Satz von Migrationshandbüchern und empfohlenen Strategien.

Diagramm mit der Überschrift „Skalieren mit End-to-End-Sicherheit, Überwachung und Automatisierung“ und Logos für die in diesem Artikel beschriebenen Tools.

Nächster Schritt

Auswählen der passenden Azure-Services für Ihre Java-Anwendungen