Asynchrone Workflows durch Integration der OCI-Queue mit OCI Functions optimieren
Mit dem Oracle Cloud Infrastructure-(OCI-)Queueservice können Sie Nachrichten asynchron zwischen Systemen senden. So können Sie Ihre Systeme entkoppeln und ihre Performance verbessern. Es wurde für die Verarbeitung großer Mengen an Transaktionsdaten entwickelt und stellt sicher, dass Nachrichten ohne Verlust oder Duplizierung verarbeitet werden.
Der OCI Queue-Service wird vollständig verwaltet und skaliert automatisch basierend auf dem Durchsatz der Producer und Consumer. Dabei werden offene Standards verwendet, um die Kommunikation mit jedem Kunden oder Producer mit minimalem Aufwand zu unterstützen. Serverlose Anwendungen basieren häufig auf einer Kombination verschiedener Services (API Gateway, Functions usw.), um ordnungsgemäß funktionieren zu können. Damit diese verteilten Komponenten jedoch miteinander kommunizieren können, ist der Queue-Service von entscheidender Bedeutung. Außerdem kann Ihre Anwendung die Kommunikation auf andere OCI-Komponenten oder sogar außerhalb von OCI erweitern.
Architektur
Diese Referenzarchitektur stellt eine Python-Beispielanwendung in Oracle Container Engine for Kubernetes (OKE) bereit, die regelmäßig die konfigurierte Queue abfragt, um neue Nachrichten abzurufen, eine konfigurierte Funktion mit abgerufenen Nachrichten aufruft und bei erfolgreicher Ausführung die Nachrichten aus der Queue entfernt.
Die Anwendung authentifiziert sich selbst als instance_principal, wenn sie mit OCI-Services interagiert. Queue und Funktionen können sich in jeder Region befinden, und Queue- und Funktions-OCIDs müssen bei der Stackerstellung angegeben werden. Wenn die Queue- und Funktions-OCIDs nach dem Terraform-Deployment aktualisiert werden müssen, können Sie das Kubernetes-Deployment-Artefakt (Teil des erstellten OCI-DevOps-Projekts) bearbeiten.
Das Terraform-Deployment umfasst die Erstellung der Pipelines und Repositorys, die in einem OCI DevOps-Service erforderlich sind, um die Schritte zu automatisieren, die erforderlich sind, um den Anwendungsquellcode bis in die Produktionsumgebung aufzunehmen. Der Anwendungsquellcode wird in einem DevOps-Code-Repository gehostet. Anschließend kann der Benutzer den Code im Repository festschreiben, wodurch der Start einer Build-Pipeline ausgelöst wird.
Das folgende Diagramm veranschaulicht diese Referenzarchitektur.
Queue-fn-automation-arch-oracle.zip
Die Architektur umfasst die folgenden Komponenten:
- Region
Eine Oracle Cloud Infrastructure-Region ist ein lokalisierter geografischer Bereich, der mindestens ein Data Center enthält, das als Availability-Domains bezeichnet wird. Regionen sind unabhängig von anderen Regionen, und große Entfernungen können sie voneinander trennen (über Länder oder sogar Kontinente).
- DevOps-Projekt
Eine logische Gruppierung von DevOps-Ressourcen, die zur Implementierung eines CI/CD-Workflows erforderlich sind. DevOps-Ressourcen können Artefakte, Build-Pipelines, Deployment-Pipelines, externe Verbindungen, Trigger und Umgebungen sein. Mit DevOps-Projekten können Sie Logging, Überwachung und Benachrichtigungen für alle DevOps-Ressourcen einfach aktivieren.
- Build-Pipeline
Eine Build-Pipeline verwendet eine Commit-ID aus Ihren Quellcode-Repositorys und diesen Quellcode, um Ihre Build-Anweisungen auszuführen. Build-Pipelines definieren eine Gruppe von Phasen für den Erstellungsprozess: Erstellen, Testen und Kompilieren von Softwareartefakten, Bereitstellen von Artefakten in OCI-Repositorys und optional Auslösen eines Deployments. Sie können den Ablauf und die Anweisungen des Build-Laufs in der Build-Spezifikationsdatei definieren.
- Code-Repository
Private Git-Repositorys, die vom DevOps-Service gehostet werden. Sie können Quellcode mit OCI DevOps-Code-Repositorys speichern, verwalten und entwickeln.
- Deployment-Pipeline
Eine Abfolge von Schritten zum Bereitstellen und Bereitstellen einer Gruppe von Artefakten in einer Zielumgebung. Der Ablauf und die Logik Ihres Softwarerelease können durch die Definition von Phasen gesteuert werden, die seriell oder parallel ausgeführt werden können.
- Deployment-PhasenPhasen sind einzelne Aktionen, die während einer Ausführung einer Pipeline ausgeführt werden. Die Deployment-Pipeline DevOps enthält die folgenden vordefinierten Phasentypen, die Sie im Releaseprozess verwenden können:
- Rolling Deployment: Inkrementelles Release für OKE-, Functions- oder Instanzgruppen.
- Warten: Warten Sie N Sekunden.
- Manuelle Genehmigung: Fahren Sie fort, wenn eine Genehmigung erteilt wurde. Stoppen Sie, wenn die Genehmigung abgelehnt wurde.
- Funktion aufrufen: Benutzerdefinierte Aufgaben oder Integrationen ausführen, indem eine Funktion aufgerufen und ein Artefakt von Anforderungsparametern übergeben wird.
- DevOps-Artefakt
Ein DevOps-Artefakt ist ein Verweis oder Zeiger auf Dateien, Binärdateien, Packages, Manifeste oder Images, aus denen Ihre Anwendung besteht. Wenn Sie ein Artefakt erstellen, informieren Sie Oracle DevOps über den Quellspeicherort des eigentlichen Artefakts. DevOps unterstützt OCI Container Image Registry- und OCI Artifact Registry-Repositorys.
- OCI Logging- und Benachrichtigungsservices
Der OCI Logging-Service speichert Logs für das Deployment. Die Ausgabe der Deployment-Laufzeit und die endgültigen Ergebnisse des Deployments werden als Logeinträge angezeigt. Der OCI Notifications-Service bietet Einblick in den aktuellen Status des Deployment-Projekts und der zugehörigen Ressourcen und führt alle erforderlichen Aktionen aus. Beispiel: Sie werden benachrichtigt, wenn ein wichtiges Ereignis, z.B. eine Phase in einer Deployment-Pipeline, die auf die Genehmigung wartet. Wenn Sie die Benachrichtigung erhalten, können Sie zur Deployment-Pipeline DevOps gehen und die Phase genehmigen.
- Deployment-Umgebungen
Eine Umgebung ist eine Sammlung der Computing-Ressourcen eines Kunden, in denen Artefakte bereitgestellt werden. Umgebungen können eine Funktions-, Compute-VM- oder Bare-Metal-Instanz oder ein OKE-Cluster sein.
- OKE-Cluster: OCI Container Engine for Kubernetes ist ein vollständig verwalteter, skalierbarer und hochverfügbarer Service, mit dem Sie Ihre containerisierten Anwendungen in der Cloud bereitstellen können.
- Compute-Instanzen: Mit dem OCI Compute-Service können Sie Compute-Hosts in der Cloud bereitstellen und verwalten. Sie können Compute-Instanzen mit Ausprägungen bereitstellen, die Ihre Ressourcenanforderungen für CPU, Arbeitsspeicher, Netzwerkbandbreite und Speicher erfüllen.
- Funktionen: Oracle Functions ist eine vollständig verwaltete, mehrmandantenfähige, hochskalierbare, bedarfsgesteuerte Functions-as-a-Service-Plattform. Der Service basiert auf Oracle Cloud Infrastructure der Unternehmensklasse und wird von der Open-Source-Engine des Fn-Projekts unterstützt.
Umgebungen können sich in verschiedenen OCI-Regionen als die Region der Deployment-Pipeline befinden. Durch diese Trennung können Entwickler in mehreren OCI-Regionen mit derselben Deployment-Pipeline bereitstellen.
- Dynamische IAM-Gruppen und -Policys
Eine dynamische Gruppe ist ein spezieller Gruppentyp, der Ressourcen (wie Compute-Instanzen) enthält, die den von Ihnen definierten Regeln entsprechen (die Mitgliedschaft kann sich also dynamisch ändern, wenn übereinstimmende Ressourcen erstellt oder gelöscht werden). Diese Instanzen fungieren als "principal"-Akteure und können API-Aufrufe für Services gemäß Policys ausführen, die Sie für die dynamische Gruppe schreiben.
Eine Policy ist ein Dokument, das angibt, wer auf welche Ressourcen und wie zugreifen kann. Der Zugriff wird auf Gruppen- und Compartment-Ebene erteilt. Sie können also eine Policy schreiben, die einer Gruppe einen bestimmten Zugriffstyp innerhalb eines bestimmten Compartments erteilt, oder für den Mandanten selbst.
Empfehlungen
- Bereitstellung
Behalten Sie beim Deployment der Architektur über Resource Manager die Standardwerte so weit wie möglich bei, wenn keine explizite Änderung erforderlich ist.
Überlegungen
Berücksichtigen Sie beim Deployment der Lösung und bei der Verwendung der Anwendung die folgenden Aspekte:
- Lösung bereitstellen
Zum Einrichten der erforderlichen dynamischen Gruppen und der zugehörigen Policys sind Administratorberechtigungen erforderlich. OCI-Benutzername und -Authentifizierungstoken sind für die Autorisierung im OCI DevOps Git-Repository und das Setup von Secrets in OKE erforderlich.
- Anwendung verwenden
Die Anpassung der Python-Anwendungsparameter kann im erstellten DevOps-Projekt erfolgen, indem die Variablen zu Beginn des
queue_automation.py
-Programms und das Setup des OCIR-Secrets in OKE geändert werden.
Bereitstellen
Der Terraform-Code für dieses Deployment ist zusammen mit dem Python-Anwendungsquellencode unter GitHub verfügbar.
- Klicken Sie auf
.
Wenn Sie noch nicht angemeldet sind, geben Sie die Mandanten- und Benutzerzugangsdaten ein.
- Wählen Sie die Region aus, in der Sie den Stack bereitstellen möchten.
- Befolgen Sie die Anweisungen auf dem Bildschirm, um den Stack zu erstellen.
- Nachdem Sie den Stack erstellt haben, klicken Sie auf Terraform-Aktionen, und wählen Sie Planen aus.
- Warten Sie, bis der Job abgeschlossen ist, und prüfen Sie den Plan.
Um Änderungen vorzunehmen, kehren Sie zur Seite "Stackdetails" zurück, klicken Sie auf Stack bearbeiten, und nehmen Sie die erforderlichen Änderungen vor. Führen Sie dann die Aktion Planen erneut aus.
- Wenn keine weiteren Änderungen erforderlich sind, kehren Sie zur Seite "Stackdetails" zurück, klicken Sie auf Terraform-Aktionen, und wählen Sie Anwenden aus.