Bereitstellung von Microservices mit einer konvergierten Datenbank und Helidon

Entwickler erstellen neue datengesteuerte Anwendungen in erster Linie mit einer Microservices-Architektur. Darüber hinaus modernisieren bestehende Kunden monolithische Designs in Microservices, indem sie lose Kopplung und gebundene Kontexte in ihren Datenbankzugriffsmustern einführen.Sie möchten ihren Workflow und den Datenfluss vereinfachen, um DevOps mit kleinen Teams effizienter zu gestalten. Aktuelle Lambda- und Kappa-Architekturmuster in der Branche erhöhen die Komplexität mit mehreren Technologien, mehreren Kopien von Daten, mehreren Sicherheitshops und mehreren im Team erforderlichen Fähigkeiten. Die konvergierte Datenbank vereinfacht die zugrunde liegende Architekturkomplexität.

Architektur

Diese Architektur zeigt die Ressourcen und Topologie, die zur Verwendung von Microservices mit Cloud Infrastructure, einer konvergierten Oracle Database und Helidon erforderlich sind.

Eine konvergierte Oracle Database ist eine optimierte Datenbank, die native Unterstützung für moderne Datentypen, wichtige Data Center-Komponenten und die neuesten Entwicklungsparadigmen bietet. Beispiel: Eine konvergierte Datenbank unterstützt räumliche Daten für die Standorterkennung, JSON für Dokumentspeicher, IoT für die Geräteintegration, In-Memory-Technologien für Echtzeitanalysen und herkömmliche relationale Daten. Durch die Unterstützung all dieser Datentypen kann eine konvergierte Datenbank alle Arten von Workloads von IoT bis hin zu Blockchain und Analytics und Machine Learning ausführen. Sie kann auch jedes Entwicklungsparadigma verarbeiten, einschließlich Microservices.

Die Microservices-Architektur umfasst drei wichtige Ebenen – die Messaging-Ebene, die Anwendungsebene und die Datenbankebene –, um Agilität, horizontale Skalierung und Robustheit für Unternehmensanwendungen zu schaffen. Diese Referenzarchitektur enthält standardbasierte Komponenten, die in der Cloud von Oracle Gen 2 verfügbar sind, um robuste Microservices mit Oracle Database als Persistenzschicht zu erstellen.

Die Messaging-Tier ist ein Java Message Service-(JMS-)Transaktionsnachrichten, das in die Datenbank integriert ist, Transactional Event Queues (TEQ) oder Kafka-basierter Transportmechanismus wie Oracle Cloud Infrastructure Streaming Service.

Die Anwendungsebene wird mit Docker-Containern erstellt, die von Oracle Cloud Infrastructure Container Engine for Kubernetes verwaltet werden. Jeder Microservice ist ein Container, der mit einer unabhängigen Datenbank oder einer Isolation auf Schemaebene in einer Datenbank verbunden ist. Im Folgenden finden Sie Beispiele für Anwendungen:
  • Ereignisüberwachung und -warnung: Grafana und Prometheus
  • Beobachtbarkeit und Verfolgung: Kiali und Jaeger
  • Herkömmliche Anwendungen: Java Enterprise Edition und Oracle Weblogic
  • Java-Microservices: Java, helidon.io und Oracle GraalVM Enterprise
  • Mehrsprachige Microservices: node.js und python
  • Service-Mesh mit Oracle Container Engine for Kubernetes: Istio, Kubernetes und Docker

Die Datenbankebene besteht aus zwei Autonomous Transaction Processing-Instanzen (ATP-1 und ATP-2). Die Architektur verwendet relationale Daten, räumliche Daten, Dokument-, Text- und JSON-Daten in der konvergierten Datenbank und integriertes Transaktionsnachrichten in der Datenbank für Microservices zur Vereinfachung von Workflows.

Das folgende Diagramm zeigt ein Beispiel einer Microservices-Architektur für eine Online-App zur Bereitstellung mobiler Lebensmittel.

Beschreibung von helidon_microservices_db_architecture.png folgt
Beschreibung der Abbildung helidon_microservices_db_architecture.png

Die Architektur umfasst folgende Komponenten:

  • Load Balancer

    Der Oracle Cloud Infrastructure Load Balancing-Service ermöglicht automatisierte Trafficverteilung von einem einzelnen Einstiegspunkt auf mehrere Server im Backend.

  • Container Engine for Kubernetes

    Oracle Cloud Infrastructure Container Engine for Kubernetes ist einen vollständig verwalteten, skalierbaren und hochverfügbaren Service, mit dem Sie Ihre containerisierten Anwendungen in der Cloud bereitstellen können. Sie geben die für Ihre Anwendungen erforderlichen Compute-Ressourcen an, und Container Engine for Kubernetes stellt sie in Oracle Cloud Infrastructure in einem vorhandenen Mandanten bereit. Container Engine for Kubernetes verwendet Kubernetes, um das Deployment, die Skalierung und die Verwaltung containerisierter Anwendungen auf mehreren Hostclustern zu automatisieren.

  • Service Connector for Kubernetes

    Verbinden Sie die Oracle Autonomous Transaction Processing-Datenbank mit dem OCI Service Broker for Kubernetes mit der Oracle Container Engine for Kubernetes.

    OCI Service Broker for Kubernetes ist eine Implementierung der Open Service Broker API. OCI Service Broker for Kubernetes dient insbesondere für die Interaktion mit Oracle Cloud Infrastructure-Services aus Kubernetes-Cluster. Es umfasst drei Servicebrokeradapter für das Binding mit den folgenden Oracle Cloud Infrastructure-Services: Object Storage, Autonomous Transaction Processing, Autonomous Data Warehouse und Oracle Streaming Service.

    Sie können OCI Service Broker for Kubernetes zu Clustern hinzufügen, die Sie mit Oracle Cloud Infrastructure Container Engine for Kubernetes erstellt haben, um mit den oben aufgeführten Oracle Cloud Infrastructure-Services zu kommunizieren. Wenn Sie OCI Service Broker for Kubernetes zu einem Cluster hinzufügen, müssen Sie die Oracle Cloud Infrastructure-Services nicht jedes Mal manuell durch Provisioning bereitstellen und die Bereitstellung aufheben, wenn Sie eine Anwendung im Cluster bereitstellen oder das Deployment aufheben. Stattdessen kommunizieren Sie mit den Oracle Cloud Infrastructure-Services, indem Sie mit kubectl die von OCI Service Broker for Kubernetes implementierten Open Service Broker-APIs aufrufen.
  • Registrierung

    Oracle Cloud Infrastructure Registry ist eine von Oracle verwaltete Registry, mit der Sie Ihren Workflow von der Entwicklung bis zur Produktion vereinfachen können. Mit Registry können Sie auf einfache Weise Entwicklungsartefakte wie Docker-Images speichern, freigeben und verwalten. Die skalierbare Architektur von Oracle Cloud Infrastructure stellt sicher, dass Sie Ihre Anwendungen zuverlässig bereitstellen und verwalten können.

  • Objektspeicher

    Object Storage bietet schnellen Zugriff auf große Mengen strukturierter und unstrukturierter Daten eines beliebigen Inhaltstyps, einschließlich Datenbankbackups, Analysedaten und umfangreicher Inhalte wie Bilder und Videos. Verwenden Sie den Standardspeicher für "hot"-Speicher, auf den Sie schnell, sofort und häufig zugreifen müssen. Verwenden Sie Archivspeicher für "kalten" Speicher, den Sie über lange Zeiträume beibehalten und selten oder nur selten zugreifen.

  • Microservices

    Verwenden Sie Istio Service Mesh, um die Microservices mit einem Proxy zu verbinden, um in Kiali visualisierte Tracing-Informationen bereitzustellen.

    Verwenden Sie Jaeger zur Rückverfolgung und Kiali zur Beobachtung des Istio-Meshes.

  • Helidon

    Verwenden Sie Helidon MicroProfile-Annotationen, um die Integrität und Verfügbarkeit von Microservices zu überwachen.

  • Autonomous Transaction Processing

    Oracle Autonomous Transaction Processing ist ein selbststeuernder, selbstsichernder, selbstreparierender Datenbankservice, der für Transaktionsverarbeitungs-Workloads optimiert ist. Sie müssen keine Hardware konfigurieren und installieren. Oracle Cloud Infrastructure verarbeitet das Erstellen der Datenbank sowie das Backup, Patching, Upgrade und Tuning der Datenbank.

Das folgende Diagramm zeigt ein Beispiel für den Workflow einer Microservices-Architektur für eine Online-App zur Bereitstellung mobiler Lebensmittel.

Beschreibung von microservices_converged_db.png folgt
Beschreibung der Abbildung microservices_converged_db.png

In dieser Architektur werden die folgenden Schritte angezeigt:

  1. Der Kunde sucht online nach Bewertungen und gibt einen Auftrag an. Der Order Service-Mikroservice verfügt über eine Suchprüfungsfunktion. Suchprüfungsanforderungen und -aufträge werden über einen Load Balancer an den Order Service-Microservice gesendet. Der Order Service kommuniziert mit der Datenbank.
  2. Text- und JSON-Datensuche und -Sentimentanalyse werden an die Funktion "Suchprüfungen" gesendet.
  3. Der Order Service und die Microservices von Inventory Service kommunizieren über Transaktionsnachrichten miteinander.
  4. Der Order Service sendet einen Platzauftrag für eine Lieferanfrage an den Microservice des Delivery Service.
  5. Die räumliche Berechnung für einzelne oder mehrere Auslieferungen wird von der Datenbank an das Feature "Routenzuordnung" des Delivery Service gesendet.
  6. Betriebsanalysen mit Lowcode werden von der Datenbank an das Analytics Dashboard gesendet.

Empfehlungen

Ihre Anforderungen können sich von der hier beschriebenen Architektur unterscheiden. Verwenden Sie die folgenden Empfehlungen als Ausgangspunkt:

  • Benutzerfreundlichkeit

    Die Architektur verstärkt die Notwendigkeit, die Persistenzschicht für Microservices mit einer konvergierten Oracle-Datenbank einfacher zu entwerfen. Datenbanksicherheitsmodelle sind ein guter Ausgangspunkt für Authentifizierungs- und Autorisierungssicherheit. Darüber hinaus vereinfacht die Verwendung von Backup und High Availability der Datenbank die Entwicklung von Microservices.

    Ein gutes Verständnis der Anwendung steigert den Datenzugriff für jeden Microservice mit dem Design in gebundenen Kontexten und der lockeren Kopplung innerhalb der Vielzahl dieser Services. Beginnen Sie mit der Isolation auf Schemaebene.

    Die richtige Größe des Microservice ist wichtig, um Datenabhängigkeiten besser zu verwalten.

    Ereignisgesteuertes Transaktions-Messaging, das in der konvergierten Datenbank erstellt wurde, ermöglicht eine lose Kopplung zwischen Microservices und behält gleichzeitig einmaliges Messaging bei. Dadurch wird eine effiziente Implementierung eventuell konsistenter Transaktionen über Microservices hinweg (sagas genannt) bereitgestellt.

  • Transparenz und Verwaltbarkeit

    Beobachtbarkeit und Verwaltbarkeit mit Helidon-Annotationen und der Verwendung von Tracing-Tools ermöglichen eine Automatisierung beim skalierbaren Betrieb einer Microservices-basierten Anwendung. Dies ist ein Bereich, der sowohl auf der Anwendungsebene als auch auf der Datenbankebene gut konzipiert werden kann, insbesondere da die Belastung der Microservices zunimmt und Anpassungen für Performance und Verfügbarkeit im großen Maßstab erforderlich sind.

  • Erweiterung

    Die Containerisierung von Microservices, die von Oracle Cloud Infrastructure Container Engine for Kubernetes verwaltet werden, ermöglicht die Erweiterbarkeit der Anwendungsebene. Obwohl nicht immer empfohlen wird, dass jeder Microservice eine eigene Datenbank hat, ist dies mit der Architektur der konvergierten Datenbank sicher möglich. Häufig bewirkt die Isolierung auf Schemaebene zwischen Microservices eine gute Isolation vor unnötigen Datenabhängigkeiten.

  • Sicherheit

    Eine konvergierte Datenbank bietet ein hohes Maß an Sicherheit, mit dem eine Anwendung Rollen auf Benutzerebene, Authentifizierung, Autorisierung und Datenverschlüsselung bereitstellen kann. Ein sicherer Zugriff auf die Microservices wird auch von Helidon in Verbindung mit der Sicherheit in der Persistenzschicht bereitgestellt.

  • Skalierung

    Diese Architektur fügt Microservices-Instanzen hinzu, die sie mit Oracle Container Engine for Kubernetes verwalten. Außerdem ermöglicht ein Load Balancer die nahtlose Verwendung mehrerer Instanzen für jeden Service. Verfügbarkeit und Skalierung werden mithilfe dieses Paradigmas für Microservices behoben. Die Datenbank bietet eine einfache autonome Skalierung auf eine bestimmte Ebene (2 bis 48 Oracle Compute Units (OCPUs) pro Datenbanksystem), die für die meisten Anwendungen funktionieren kann.

Überlegungen

Beachten Sie beim Deployment dieser Referenzarchitektur die folgenden Punkte.

  • Performance

    Skalieren Sie die Anwendungsperformance horizontal, indem Sie zusätzliche Instanzen für den Microservice hinzufügen und mit Kubernetes verwalten.

    Skalieren Sie die Datenbankperformance, indem Sie die Datenbanklast in der Oracle Autonomous Transaction Processing-Performancekonsole beobachten und die Anzahl der OCPUs erhöhen (bis zu 48 in ATP-Shared).

  • Sicherheit

    Die Sicherheit für Microservices basiert auf der Sicherheit von Helidon Microservices und dem Oracle Database-Sicherheitsmodell – Authentifizierung, Autorisierung, Zugriffskontrolle für Ressourcen. Oracle empfiehlt, dass Anwendungen die Sicherheitsüberwachungsmechanismen der Datenbank so weit wie möglich verwenden.

  • Verfügbarkeit

    High Availability besteht aus zwei Teilen: der Anwendungsschicht und der Datenebene.

    Die Anwendungsverfügbarkeit wird erreicht, indem zustandslose Container vorhanden sind, von Kubernetes repariert werden und jeder Status aus den Metadaten der mittleren Netzwerkebene oder der Datenbank wiederhergestellt wird.

    Für High Availability-Architekturen wird eine physische Standby-Datenbank für PDBs in Oracle Cloud-Availability-Domains oder regionsübergreifend empfohlen. Weitere Empfehlungen finden Sie in den High Availability-Parametern von Oracle Database.

  • Kostenfaktor

    Cloud-Wirtschaft trifft auf diese Microservices-Referenzarchitektur zu. Alle Komponenten sind in Oracle Cloud Infrastructure als verwalteten Service verfügbar. Sie zahlen für das, was Sie verwenden, und nicht für Provisioning-Hardware.

Bereitstellen

Der Terraform-Code für diese Referenzarchitektur ist in GitHub verfügbar. Sie können den Code von GitHub auf Ihren Computer herunterladen, den Code anpassen und die Architektur mit der Terraform-CLI bereitstellen.

Änderungslog

In diesem Log werden nur die wesentlichen Änderungen aufgeführt: