Skalieren mit End-to-End-Sicherheit, Überwachung und Automatisierung

Beim Entwerfen von Anwendungen müssen wir bestimmen, wie sie sich an Änderungen der Arbeitsauslastung anpassen, von unerwarteten Fehlern wiederherstellen, Sicherheitsrisiken minimieren usw. Zwar könnte man mit einem Test- und Fehleransatz beginnen, der zeitabwendige Zeit von anderen Organisationszielen nimmt und sich negativ auf unseren Ruf auswirken könnte. Azure bietet Architekturanleitungen, die erforderlich sind, um alles von Anfang an zu erledigen. Sie haben auch alles, was Sie benötigen, um eine skalierbare Anwendung zu erstellen – von modernster Sicherheit und automatischer Skalierung bis hin zur Unterstützung von Diensten für Daten, Nachrichten, Zwischenspeichern, Leistungsüberwachung und Automatisierung. Viele dieser unterstützenden Dienste basieren auch auf beliebter Open-Source-Software - wie PostgreSQL, Redis, JMS und Kafka - so dass Sie nicht in proprietäre Lösungen gesperrt werden.

Diagramm mit der Überschrift

Sehen wir uns nun einige wichtige Azure-Dienste und -Features an und wie Sie sie 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 Diensten 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 verwaltete Instanz. Das gleiche gilt für Messaging mit Optionen wie Azure Service Bus, Azure Event Hubs und Apache Kafka für 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-Diensten ausgeführt werden, können Sie diese vollständig verwalteten Daten und Messagingdienste schnell mithilfe von Open-Source-Clients, Azure Java SDKs, Spring Starters und Anwendungsserverintegrationen bereitstellen und verwenden. Sie bieten alle die Compliance-, Verfügbarkeits- und Zuverlässigkeitsgarantien, die Sie von Microsoft und Azure erwarten würden. Viele Java- und Spring-Entwickler möchten idiomatische Bibliotheken verwenden, um Verbindungen mit ihren bevorzugten Clouddiensten zu vereinfachen. Microsoft Standard enthält eine umfassende Liste von Bibliotheken, Treibern und Modulen, mit denen Sie auf einfache Weise mit Azure-Diensten über Daten, Messaging, Cache, Speicher, Ereignis, Verzeichnis und geheime Verwaltung interagieren können. Weitere Informationen finden Sie im Azure-Entwicklerhandbuch für Spring Cloud.

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

Diagramm, das die Featurekategorien und zugeordneten Azure-Plattformdienste 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 – der grundlegende Baustein für Ihre eigenen privaten Netzwerke in Azure. Virtuelle Netzwerke ermöglichen es vielen Arten von Azure-Ressourcen, sich gegenseitig, mit dem Internet und mit Ihren lokalen Netzwerken und Systemen sicher zu kommunizieren. Sie können ein virtuelles Netzwerk verwenden, um Ihre Anwendungen zu isolieren und Back-End-Dienste aus dem Internet zu unterstützen und sie in Ihren privaten Netzwerken zu platzieren. Sie können die vollständige Kontrolle über den Eingangs- und Ausgang für Ihre Anwendungen und Back-End-Systeme übernehmen.

Diagramm der Referenzarchitektur von Azure Spring Apps.

Zero-Trust – Sichere Kommunikation end-to-End

Die Implementierung der sicheren Kommunikation als Teil einer Lösungsarchitektur kann eine Herausforderung darstellen. Viele Unternehmen drehen ihre Zertifikate manuell oder erstellen eigene Lösungen, um die Bereitstellung und Konfiguration zu automatisieren. Selbst dann bestehen weiterhin Datenexfiltrationsrisiken, z. B. nicht autorisiertes Kopieren oder Übertragen von Daten.

Mit Azure können Sie die End-to-End-Sicherheit der Kommunikation sichern oder die Sicherheit auf Transportebene an jedem Kommunikationspunkt beenden. Sie können auch die Bereitstellung und Konfiguration für alle Azure-Ressourcen automatisieren, die zum Sichern der Kommunikation erforderlich sind. Informationen zur Funktionsweise von Azure Spring Apps finden Sie unter Secure Communications End-to-End für Spring Boot-Apps – in der Zero Trust-Umgebung. Der Prozess ähnelt den anderen Azure-Computediensten, mit denen Sie Ihre Java-Anwendungen ausführen können.

Basierend auf dem Prinzip "Niemals vertrauen, immer überprüfen und Anmeldeinformationen frei" , hilft Zero Trust , alle Kommunikationen zu sichern, indem unbekannte und nicht verwaltete Zertifikate eliminiert werden, und indem nur Zertifikate vertrauen, 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, einschließlich von einer Zertifizierungsstelle ausgestellten Zertifikaten, erweiterten Validierungszertifikaten, Wild Karte Zertifikaten mit Unterstützung für eine beliebige Anzahl von Unter-Do Standard s oder selbstsignierten Zertifikaten für Entwicklungs- und Testumgebungen.

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

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

Zero-Trust – Verwalten von geheimen Schlüsseln

Viele Java-Anwendungen stellen eine Verbindung mit unterstützenden Diensten mithilfe von URLs und Anmeldeinformationen her – Informationen, die, falls verfügbar gemacht, 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 Ermittlung über ein Code-Repository. Viele Entwickler externalisieren solche Anmeldeinformationen mithilfe von Umgebungsvariablen, sodass mehrere Anwendungen sie laden können, dies verschiebt jedoch nur das Risiko vom Code selbst in die Ausführungsumgebung.

Diagramm mit der Überschrift

Azure Key Vault bietet eine bessere, sicherere und sicherere Möglichkeit, geheime Schlüssel zu schützen. Es bietet Ihnen die vollständige Kontrolle über die Speicherung und Verteilung von Anwendungsschlüsseln, 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 Anwendungsgeheimnisse – erteilen Sie einfach die Berechtigung für Ihre Anwendungen, sie nach Bedarf zu verwenden. Beim Starten der Anwendung authentifiziert sich die Anwendung vor dem Gewähren des Zugriffs auf geheime Schlüssel mit Microsoft Entra ID und Azure Key Vault mit Azure RBAC. Azure Key Vault umfasst vollständige Überwachungsfunktionen und verfügt über zwei Dienstebenen: Standard, der mit einem Softwareschlüssel verschlüsselt wird, und eine Premium-Stufe, die Hardwaresicherheitsmodul (HSM)-geschützte Schlüssel enthält.

Endbenutzerauthentifizierung und -autorisierung

Die meisten Unternehmens-Java-Anwendungen erfordern die Benutzerauthentifizierung und Autorisierung, die Sie mit Microsoft Entra ID implementieren können – eine vollständige 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 Microsoft Entra ID-basierte Lösungen mithilfe der Microsoft-Authentifizierungsbibliothek für 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 überwachen. Alternativ können Sie mithilfe von Application Insights, einem Feature von Azure Monitor, vollständig verwaltete systemeigene Überwachung implementieren – einschließlich Anwendungsleistungsüberwachung (Application Performance Monitoring, APM). Es bietet starke Unterstützung für Java, Spring und Frameworks wie Micrometer und Spring Boot, sodass Sie Probleme schnell identifizieren und beheben können. Zu den Features gehören Livemetriken streaming, Anforderungsrate und Antwortzeitverfolgung, Ereignisablaufverfolgung und externe Abhängigkeitsraten – alles, was Sie benötigen, um die Verfügbarkeit, Leistung, Zuverlässigkeit und Nutzung Ihrer Java-Anwendungen zu überwachen, die auf Azure oder lokal ausgeführt werden.

Sie können End-to-End überwachen, indem Sie Protokolle und Metriken in Log Analytics aggregieren, ein 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 Gruppe von Datensätzen zurückgibt, und dann Log Analytics verwenden, um sie zu sortieren, zu filtern und zu analysieren. Oder Sie können eine komplexere Abfrage schreiben, um statistische Analysen durchzuführen und die Ergebnisse in einem Diagramm zu visualisieren, wie erforderlich, um einen bestimmten Trend zu identifizieren. Ganz gleich, ob Sie mit den Ergebnissen Ihrer Abfragen interaktiv arbeiten oder mit anderen Azure Monitor-Features wie Protokollabfragebenachrichtigungen oder Arbeitsmappen arbeiten, Log Analytics ist ein gutes Tool zum Schreiben und Testen Ihrer Abfragen.

Das heißt, wir wissen, dass Kunden, die ihre Java-Anwendungen auf Azure bringen, weiterhin dieselben APM-Tools verwenden möchten, die sie verwenden, um ihre lokalen Anwendungen zu überwachen. Um diese Nutzung zu unterstützen, haben wir mit New Relic, AppDynamics, Dynatrace und Elastic zusammengehören, um ihre Überwachungslösungen in Azure-App Service und Azure Spring Apps zu integrieren. Überwachungs-Agents werden nebeneinander mit Ihrem Code ausgeführt, und wir installieren und halten die Agents für Sie auf dem neuesten Stand. Wenn Sie in Azure Container-Apps, Azure Kubernetes Service oder virtuellen Computern bereitstellen, können Sie alle diese Agents (einschließlich New Relic, AppDynamics, Dynatrace, Elastic und Datadog) zusammen mit Ihren Anwendungen ausführen, aber Sie müssen sie selbst installieren und verwalten. Ebenso können Sie End-to-End überwachen, indem Sie Protokolle und Metriken in Elastic und Splunk aggregieren.

Diagramm mit der Überschrift

Wir wissen auch, dass viele Kunden Grafana weiterhin verwenden möchten, um ihre Metriken abzufragen, zu visualisieren, zu benachrichtigen und zu verstehen. Aus diesem Grund haben wir uns mit Grafana Labs zusammengetan, um Azure Managed Grafana bereitzustellen, einem vollständig verwalteten Dienst, mit dem Kunden Grafana nativ auf Azure ausführen können. Der Dienst erleichtert die Bereitstellung sicherer und skalierbarer Grafana-Instanzen und verbindet sie mit Open Source-, Cloud- und Drittanbieterdatenquellen zur Visualisierung und Analyse. Der Dienst ist für azure-native Datenquellen wie Azure Monitor und Azure Data Explorer optimiert und umfasst APM-Integrationen (Application Performance Monitoring) mit Azure-Computediensten wie Azure-App Service, Azure Spring 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 wachsen, können Sie die Leistung steigern, indem Sie Azure Cache for Redis verwenden, um eine Zwischenspeicherungsebene für Abfrageergebnisse, Sitzungszustände und statische Inhalte zu implementieren. Es 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 tiers, die in Partnerschaft mit Redis entwickelt und vollständig von Microsoft verwaltet werden, ist die höchst verfügbare und skalierbare Bereitstellungsoption für die Ausführung von Redis auf Azure – einschließlich Features wie aktive Georeplikation, externalisierte Sitzungsverwaltung und schnelle Suche und Indizierung.

Diagramm mit der Überschrift

Autoskalierung

Alle Azure-"Compute"-Dienste für die Ausführung von Java-Anwendungen unterstützen die automatische Skalierung (Automatische Skalierung), die Ihnen dabei helfen kann, die Kosteneffizienz zu maximieren und sich an die Änderung von Workloads anzupassen, ohne mehr Kapazität zu bezahlen, als Sie benötigen. Nach der Aktivierung können Sie sicher sein, dass ihre zugrunde liegende Infrastruktur und Ihre Anwendungsworkloads automatisch skaliert werden.

Diagramm mit der Überschrift

Sie können basierend auf Last oder Zeitplan automatisch skalieren oder verkleineren. Im ladebasierten (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, wenn die Last verringert wird, horizontal skaliert werden, niemals unter die von Ihnen festgelegten Mindestwerte.

Im zeitplanbasierten Modus werden Ihre Anwendungen basierend auf einem definierten Zeitplan und grenzwerten skaliert und skaliert. Der zeitplanbasierte Modus ist nützlich für Workloads, die einem vorhersagbaren Muster folgen und verwendet werden können, um einen Basisplan für eine auslastungsbasierte Skalierung einzurichten.

Automatisierung von Idee zu 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 adressieren, wie zuvor beschrieben. Sie müssen Aber auch Ihre Cloudumgebung als Ganzes skalieren und automatisieren – idealerweise von idee zu Produktion – einschließlich der schnellen Bereitstellung neuer Umgebungen für Test-, QA-, Produktions-, Blau-/Grün-Bereitstellungen, geografische Erweiterung usw.

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

Mit Azure können Sie von Idee zu Produktion mithilfe einer breiten Palette von Tools und Plattformen automatisieren. Auf hoher Ebene können solche Automatisierungspipelines in drei Kategorien unterteilt werden:

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

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

  • Bereitstellungspipelinen – 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 bereitgestellter Bereitstellungen, die wichtige Systeme in der Produktion halten, während Sie Codeupdates bereitstellen.

Weiterhin vorhandene Methoden und Systeme verwenden

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

Kategorie Java-Ökosystemprodukte und -dienste
Netzwerk F5, Palo Alto, Cloudflare, Checkpoint, Infoblox
Überwachung New Relic, Dynatrace, AppDynamics, Elastic, Splunk
Automatisierung GitHub-Aktionen, 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 in Azure mithilfe etablierter Muster und Methoden, einschließlich der Verwendung 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, Rauchtests und mehr. Sie adressieren auch Lösungsentwurfskomponenten wie Azure-Landezonen – 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 ist z. B. ein Zielzonenbeschleuniger für Azure Spring Apps, der zeigt, wie Sie ein Hub-and-Spoke-Design implementieren, in dem Azure Spring Apps in einer einzigen Speichen bereitgestellt werden, die von gemeinsam genutzten Diensten abhängig ist, die im Hub gehostet werden. Dieses Projekt wird mit Komponenten erstellt, um die Sätze im Microsoft Azure Well-Architected Framework zu erreichen. Informationen zur Implementierung dieser Architektur finden Sie im Azure Spring Apps Landing Zone Accelerator-Repository 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, Azure Container Apps 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

Nächster Schritt

Wählen Sie die richtigen Azure-Dienste für Ihre Java-Anwendungen aus.