Musterüberblick

Erstellen Sie Ihre Webanwendung oder mobile Anwendung als eine Gruppe von Microservices, die unabhängig getestet, bereitgestellt und verschiedenen Anwendungsteams gehören können. Stellen Sie Services als REST-APIs bereit, und kommunizieren Sie mit anderen Microservices über APIs.

Die wichtigsten Anforderungen für eine Web- oder mobile App sind:

  • Es muss eine Reihe von Clients unterstützen, wie Browser und mobile Geräte
  • Es muss sicher sein
  • Es muss 24/7/365 Verfügbarkeit liefern
  • Es muss skaliert werden, um auf Nachfragespitzen zu reagieren
  • Es muss mit geringer Netzwerklatenz umgehen
  • Beim Aktualisieren oder Ändern muss es keine Ausfallzeit geben

Oracle Cloud Infrastructure (OCI) bietet eine skalierbare, sichere, zuverlässige und leistungsstarke Infrastruktur für die anspruchsvollsten Web- und Mobilanwendungen. In diesem Dokument werden die Designprinzipien für die Gestaltung einer Web- oder mobilen Anwendung sowie Referenzarchitekturen basierend auf diesen Prinzipien vorgestellt.

Designprinzipien

Einfache Open-Source-Frameworks und ausgereifte Programmiersprachen verwenden

Verwenden Sie das Graal Development Kit für Micronaut oder Helidon, um Ihre App zu erstellen. Beide bieten Features wie Logging, Telemetrie, Sicherheit und Konfiguration sowie allgemeine Muster wie das Erstellen von REST-APIs.

Verwenden Sie Java: eine plattformunabhängige, portable Sprache mit einer Vielzahl von Bibliotheken, mit denen Millionen von Entwicklern skalierbare, resiliente und sichere Apps erstellen können.

Erstellen Sie Apps als Services, die über APIs kommunizieren

Erstellen Sie Ihre App als eine Reihe von Microservices, die unabhängig getestet, bereitgestellt und von verschiedenen App-Teams betrieben werden können. Stellen Sie Services sowie klar definierte REST-APIs bereit, und kommunizieren Sie mit anderen Services über diese APIs. Verwenden Sie OCI API Gateway als zentralen Einstiegspunkt für alle Clients, und leiten Sie API-Anforderungen an den entsprechenden Service weiter.

Mit OCI Service Mesh können Sie die Kommunikation zwischen Services, die in Ihrem Oracle Container Engine for Kubernetes-(OKE-)Cluster gehostet werden, vereinfachen und sichern. Mit OCI Service Mesh können Sie außerdem den gesamten Netzwerktraffic zwischen Ihren Services über die Metriken und Logs überwachen, die von der Proxykomponente ausgegeben werden, die als Sidecar auf Anwendungspods ausgeführt wird.

Automatisieren Sie die Erstellung, das Testen und die Bereitstellung

Stellen Sie häufig Code bereit, und stellen Sie Ihre App dann so bereit, dass Ausfallzeiten minimiert werden. Verwenden Sie OCI DevOps, um eine konsistente und automatisierte Möglichkeit zum Entwickeln, Erstellen, Packen, Testen und Bereitstellen Ihrer Apps zu schaffen. Mit Oracle Cloud Infrastructure Resource Manager können Sie Ihre Infrastrukturelemente wie API Gateway, Load Balancer, Datenbanken, Kubernetes-Cluster und andere Services zuverlässig bereitstellen.

Verwenden Sie vollständig verwaltete Services, um die Komplexität bei App-Entwicklung, Laufzeiten und Datenmanagement zu beseitigen

Verwenden Sie vollständig verwaltete Services wie Oracle Container Engine for Kubernetes (OKE), Oracle Cloud Infrastructure Object Storage und Oracle Autonomous Database: Diese Services maximieren die Verfügbarkeit und Skalierbarkeit, um auf die sich ändernden Anforderungen Ihrer App zu reagieren. Ein vollständig verwalteter Service stellt die Verfügbarkeit Ihrer App sicher und schützt sie, wenn ein Fehler im Data Center auftritt, in dem die Infrastruktur Ihrer App gehostet wird.

App-Tier zustandslos halten

Wenn möglich, behalten Sie die Middle Tier-Komponenten Ihrer App zustandslos bei. Verwenden Sie bei Bedarf Oracle Autonomous Database, um den App-Status auf Konsistenz, Dauerhaftigkeit und schnelle Wiederherstellbarkeit zu speichern.

Verwenden Sie konvergierte Datenbanken mit vollständiger Unterstützung für alle Daten

Ihre App verwendet möglicherweise Daten in einer Vielzahl von Formaten wie tabellarisch (relational), unstrukturiert, XML, JSON, räumlich oder grafisch. Traditionell erforderte diese Vielfalt für jedes Datenformat eine andere Art von Datenbank, z. B. eine relationale Datenbank für relationale Daten, einen Dokumentenspeicher für unstrukturierte Daten oder eine Diagrammdatenbank für hierarchisch verknüpfte Daten. Die Verwendung mehrerer Datenbanken führt jedoch häufig zu zusätzlicher Betriebskomplexität und Dateninkonsistenz. Verwenden Sie stattdessen ein einzelnes Oracle Autonomous Database-Modell mit mehreren Modellen, um mehrere Datentypen und -formate zu speichern, zu indizieren und zu durchsuchen.

End-to-End-Überwachung und -Nachverfolgung von Instrumenten

Es ist verlockend, dass Entwicklungsteams ihre eigenen Beobachtbarkeitstools entwickeln, um Einblicke in die eigenen Services und Apps zu erhalten. Ihre App kann Hunderte von Diensten enthalten, die verschiedenen App- und Geschäftsteams gehören. Anstatt jedes Team seine eigenen Tools zu erstellen, zentralisieren Sie die Lösung mit der Oracle Cloud Observability and Management Platform: Sie überwacht alle Ebenen des gesamten Stacks, um Probleme in Ihrer App zu finden und zu beheben.

Eliminieren Sie Single Point of Failure durch automatisierte Datenreplikation und Fehlerwiederherstellung

Ihre App muss resilient sein, sich von Ausfällen erholen und Ausfallzeiten und Datenverluste minimieren. Beseitigen Sie einen Single Point of Failure, indem Sie Redundanz wie folgt implementieren:

  • Richten Sie in OKE Knotenpools mit mindestens drei Knoten ein, wobei sich jeder Knoten in einer separaten Availability-Domain in einer Region mit mehreren Availability-Domains befindet.
  • Richten Sie in einer einzelnen Availability-Domainregion Knotenpools in OKE mit mindestens drei Knoten ein, wobei sich jeder Knoten in einer separaten Faultdomain befindet.
  • Verwenden Sie einen einzelnen öffentlichen Load Balancer und mehrere private Load Balancer mit mehreren Ingress-Controllern für Redundanz in OKE.
  • Entwerfen Sie eine Pilot-Disaster-Recovery-Topologie, um Apps neu zu starten und Workloads schnell in einer Standbyregion wiederherzustellen, wenn eine Katastrophe in der primären Region auftritt, in der Ihre App gehostet wird.
  • Konfigurieren Sie die CI/CD-Pipeline so, dass die App in einer Standbyregion bereitgestellt wird, um sie nach Regionsfehlern wiederherzustellen.
  • Replizieren Sie Ihre Blockspeicher-Volumes regionsübergreifend mit Blockspeicher-Volume-Replikation und Objektspeicherreplikation.
  • Stellen Sie die erforderliche Infrastruktur in der Standbyregion mit Oracle Cloud Infrastructure Resource Manager bereit, wenn die primäre Region nicht erfolgreich verläuft.
  • Richten Sie mit Autonomous Data Guard Ihre Oracle Autonomous Database für maximale Verfügbarkeit ein, um Betriebsausfallzeiten und Datenverluste zu minimieren.

Testen Sie außerdem auf Resilienz, um zu sehen, wie sich Ihre App unter abnormen Bedingungen verhält, die zeitweise auftreten. Zum Beispiel können Sie das Chaos Monkey-Framework für Chaos-Tests übernehmen. Verwenden Sie auch Drosselung, Leistungsschalter und Wiederholungsmechanismen, um eine resiliente App zu implementieren.

Implementieren Sie einen Defense-in-Depth-Ansatz zur Sicherung des App-Lebenszyklus

Sie sollten Ihre App mit ausreichender Sicherheit entwerfen, um Angriffe durch böswillige Entitäten zu verhindern. Überprüfen Sie Ihre App, den clientseitigen Code und den Code von Drittanbietern, um auf verdächtiges Verhalten zu prüfen. Verwenden Sie Filterregeln, und richten Sie den Schutz DDoS mit Web Application Firewall (WAF) ein, um Ihre App vor unerwünschtem Traffic zu schützen.

Speichern Sie sensible Informationen wie Kennwörter und Authentifizierungs-/Autorisierungstoken in Oracle Cloud Infrastructure Vault. Richten Sie die Verschlüsselung von Kubernetes-Secrets in etcd ein. Drehen und legen Sie kurze Lebensdauer der Zertifikate fest, die Ihre App verwendet, um es Angreifern zu erschweren, sich als vertrauenswürdige Entität auszugeben.

Verfolgen Sie das Least-Privilege-Prinzip, um sicherzustellen, dass Benutzer und Serviceaccounts nur die minimalen Berechtigungen haben, die zum Ausführen ihrer Aufgaben erforderlich sind. Steuern Sie mit Oracle Cloud Infrastructure Identity and Access Management (IAM), wer Zugriff auf Ihre App und ihre Komponenten hat. Verwenden Sie die Multifaktor-Authentifizierung in IAM, um eine starke Authentifizierung für Administratoren durchzusetzen, um den Zugriff auf Ihre App und ihre Komponenten einzuschränken.

Architektur

Dieses Architekturmuster wird für eine Web- oder mobile Anwendung empfohlen, die aus Microservices besteht, die als Container in einem Kubernetes-Cluster auf OKE bereitgestellt werden. Die Datenpersistenz wird mit Oracle Autonomous Database erreicht. Medien- und Bilddateien für die App werden in Object Storage gespeichert.

Im folgenden Diagramm wird diese Architektur dargestellt.



architektur-maf-web-mobile-oracle.zip

Die Architektur umfasst die folgenden Komponenten:

  • Web Application Firewall (WAF)

    WAF schützt Apps vor schädlichem und unerwünschtem Internettraffic. Es kann jeden internetseitigen Endpunkt schützen und bietet eine einheitliche Regeldurchsetzung über alle Ihre Apps hinweg.

  • Oracle Cloud Infrastructure-API-Gateway

    OCI API Gateway ist ein vollständig verwalteter regionaler API-Gateway-Service, der geschützte RESTful-API-Endpunkte für OKE und alle anderen auf Oracle Cloud Infrastructure ausgeführten Services oder Endpunkt bereitstellt. In dieser Architektur werden die Anforderungen an einen privaten Load Balancer weitergeleitet, der die Anforderungen an einen in OKE ausgeführten Service weiterleitet.

  • Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)

    OCI IAM bietet robuste Multifaktor-Authentifizierung, Social Login, Selbstregistrierung für Endbenutzer, Identitätsmanagement, Single Sign-On und Identity Governance für Apps.

  • Load balancer

    Der Load Balancing-Service bietet automatisierte Trafficverteilung von einem einzelnen Einstiegspunkt auf mehrere Server, die über das virtuelle Cloud-Netzwerk erreichbar sind, wie die OKE-Knoten von containerisierten Microservices in der Architektur

  • Oracle Autonomous Database

    Oracle Autonomous Database ist eine vollständig verwaltete Datenbankumgebung, die elastisch skalierbar ist, schnelle Abfrageperformance liefert und keine Datenbankadministration erfordert. Sie müssen keine Hardware konfigurieren oder verwalten und keine Software installieren.

  • Object Storage

    Mit Object Storage können Sie schnell auf große Mengen an strukturierten und unstrukturierten Daten eines beliebigen Inhaltstyps zugreifen, darunter Datenbankbackups, Analysedaten und umfangreiche Inhalte, wie Bilder und Videos. Verwenden Sie Standardspeicher für Hot Storage, auf den Sie schnell, sofort und häufig zugreifen müssen. Verwenden Sie Archivspeicher für Cold Storage, den Sie über lange Zeiträume beibehalten möchten und auf den Sie nur selten zugreifen.

    In dieser Architektur werden die Medienassets der App in Object Storage in einem Bucket der Standardspeicherklasse gespeichert.

  • Container Engine for Kubernetes (KE)

    OKE ist ein vollständig verwalteter, skalierbarer und hochverfügbarer Service, mit dem Sie Ihre containerisierten Anwendungen in der Cloud bereitstellen können. Sie geben die Compute-Ressourcen an, die Ihre Apps benötigen, und OKE stellt sie auf OCI in einem vorhandenen Mandanten bereit. Container Engine automatisiert mit Kubernetes das Deployment, die Skalierung und die Verwaltung containerisierter Anwendungen auf mehreren Hostclustern.

  • Service mesh

    Oracle Cloud Infrastructure (OCI) Service Mesh ist eine Anwendungsinfrastrukturschicht, die von OCI für die Service-to-Service-Kommunikation verwaltet wird. Sie optimiert die Entwicklung und Bereitstellung von Cloud-nativen Apps, indem sie Standards für Beobachtbarkeit, Sicherheit und Trafficmanagement definiert. Service Mesh wird als eine Reihe leichter Proxys implementiert, die neben Anwendungscode in den Pods des Kunden bereitgestellt werden, ohne dass die Anwendung sie kennen muss.

Alternativen

Die Verwendung von Microservices ist nicht die einzige Möglichkeit, mobile Apps oder Webanwendungen zu erstellen. Dieses alternative Architekturmuster zeigt eine dreistufige Topologie, die aus einem Load Balancer, einer Web-/Anwendungsebene zur automatischen Skalierung und einer hochverfügbaren Datenbank besteht.

Alle Ressourcen werden in einer einzelnen Availability-Domain in einer OCI-Region bereitgestellt. Die Tiers sind in separaten Subnetzen in einem einzelnen virtuellen Cloud-Netzwerk (VCN) isoliert. Sicherheitslisten dienen als Firewalls, um den Netzwerkverkehr zu und von den Ressourcen in jeder Tier zu regulieren. Eine Routentabelle, die an jedes Subnetz angehängt ist, enthält Regeln, um Traffic an Ziele außerhalb des VCN weiterzuleiten.

Andere alternative Architekturen wie die einseitige Architektur, Progressive Web Applications (PWA) oder JAMStack können berücksichtigt werden, werden hier jedoch nicht angezeigt.

Das folgende Diagramm veranschaulicht diese alternative Architektur.



architektur-maf-web-mobile-alternative-oracle.zip

Beispielanwendungsfall

Dieser Anwendungsfall beschreibt ein Kundenbestellsystem für einen Shop, der GPUs online verkauft.

Das folgende Diagramm zeigt die Architektur für diesen Anwendungsfall.



architektur-maf-web-mobile-example-oracle.zip

Der Traffic aus dem öffentlichen Internet wird vom DNS-Service über eine Web Application Firewall (WAF) an ein Internetgateway weitergeleitet, das die eingehenden Anforderungen über den Load Balancer an einen Ingress-(Nginx-)Microservice weiterleitet. Die App besteht aus einem Frontend-Service, einem Bestellservice, einem Messaging-Service und einem Inventarservice. Alle diese Services sind containerisiert und befinden sich im OKE-Cluster. Jeder dieser Services stellt seine Schnittstellen mit REST-APIs bereit. Daten werden in autonomen Datenbanken gespeichert.

Der Kunde gibt eine Bestellung für GPUs auf, die den Frontend-Service entweder über eine Webanwendung oder eine App auf einem mobilen Gerät verwenden. Der Order-Service und der Inventory Service kommunizieren miteinander über den Open Source-Messaging-Service NATS. Der Order-Service liest und schreibt Bestelldaten in die integrierbare Anforderungsdatenbank (PDB). Der Inventory-Service liest und schreibt Bestandsdaten in die Bestands-PDB. Der Bestellservice sendet eine Benachrichtigung über den Notifications-Service, damit der Kunde per E-Mail oder Slack über den Bestellstatus informiert werden kann. Der Kunde kann den Auftragsstatus aus dem Frontend abrufen, das den Auftrag mit der REST-API für den Auftragsservice sucht.

Stellen Sie

Universal Health Organization (UHO) ist eine Beispielanwendung, die den Prinzipien des Modern App Development Framework entspricht. Insbesondere implementiert es Elemente der Web- oder Mobile-, Messaging- und Event-gesteuerten Architekturmuster und ist auf GitHub verfügbar.
  1. Gehen Sie zu GitHub.
  2. Klonen oder laden Sie das Repository auf Ihren lokalen Computer herunter.
  3. Befolgen Sie die Anweisungen im Dokument README.

Änderungslog

In diesem Log werden wichtige Änderungen aufgeführt:

Bestätigungen

  • Autoren: Raghavendra Prasad, Sajan Parihar
  • Mitwirkende: Hassan Ajan, Matthias Brantner, James Emerson, Harshad Kasture, Parvez Syed Mohamed, Jeff Schering, Joshua Stanley