Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
Prozessdateien in Oracle Cloud Infrastructure Object Storage mit einem skalierbaren cloudnativen Ablauf
Einführung
In unseren Anwendungen müssen wir oft große Mengen von Dateien verarbeiten. In der Vergangenheit wurde dies in Batch-Form getan, aber mit neuen Technologien und dem Aufkommen der Cloud sind wir jetzt in der Lage, viele serielle Prozesse in parallele zu verwandeln. Die Verwendung von Nachrichtenwarteschlangen, Kubernetes-Clustern und ereignisgesteuerten Architekturen sind einige der Technologien und Architekturen, die häufig verwendet werden, um das Beste aus der Verarbeitung großer Volumes herauszuholen.
Oracle Cloud Infrastructure (OCI) verfügt über Ressourcen, um Skalierbarkeit und Kostensenkung zu ermöglichen. Sehen wir uns die Cloud-nativen Services an.
-
Mit OCI Object Storage können Kunden jeden Datentyp sicher in seinem nativen Format speichern. Mit integrierter Redundanz eignet sich OCI Object Storage ideal für die Erstellung moderner Anwendungen, die Skalierung und Flexibilität erfordern, da sie zur Konsolidierung mehrerer Datenquellen für Analyse-, Backup- oder Archivierungszwecke verwendet werden können.
-
Der OCI Streaming-Service ist eine Apache Kafka-kompatible, serverlose Ereignisstreamingplattform in Echtzeit für Entwickler und Data Scientists. Streaming ist vollständig in OCI, Database, GoldenGate und Integration Cloud integriert. Der Service bietet auch sofort einsatzbereite Integrationen für Hunderte von Drittanbieterprodukten in Kategorien wie DevOps, Datenbanken, Big Data und SaaS-Anwendungen.
-
OCI Events Service verfolgt Änderungen an Ressourcen anhand von Ereignissen, die dem Cloud-Ereignisstandard der Cloud Native Computing Foundation (CNCF) entsprechen. Entwickler können auf Änderungen in Echtzeit reagieren, indem sie Code mit OCI Functions auslösen, in OCI Streaming aufzeichnen oder Alerts mit OCI Notifications senden.
-
OCI Functions ist ein serverloser Computing-Service, mit dem Entwickler Anwendungen erstellen, ausführen und skalieren können, ohne eine Infrastruktur zu verwalten. OCI Functions verfügt über native Integrationen mit anderen OCI-Services und SaaS-Anwendungen. OCI Functions basiert auf dem Open-Source-Fn-Projekt. Daher können Entwickler Anwendungen erstellen, die einfach in andere Cloud- und On-Premises-Umgebungen portiert werden können. Der funktionsbasierte Code wird normalerweise für kurze Zeiträume ausgeführt, ist zustandslos und wird für einen einzigen logischen Zweck ausgeführt. Kunden zahlen nur für die Ressourcen, die sie nutzen.
-
Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) ist ein verwalteter Kubernetes-Service, der groß angelegte Kubernetes-Vorgänge der Unternehmensklasse vereinfacht. Es reduziert den Zeit-, Kosten- und Arbeitsaufwand für die Verwaltung einer komplexen Kubernetes-Infrastruktur. Mit OKE können Sie Kubernetes-Cluster bereitstellen, um zuverlässige Vorgänge auf der Control-Plane und auf Worker-Knoten mit automatischer Skalierung, Updates und Sicherheitspatches sicherzustellen. Darüber hinaus bietet OKE eine vollständig serverlose Kubernetes-Erfahrung mit virtuellen Knoten.
In diesem Tutorial sehen wir eine sehr häufige Methode zur Verarbeitung großer Dateienmengen, bei der Anwendungen ihre Dateien in einem Bucket in OCI Object Storage hinterlegen können. Wenn diese Dateien hinterlegt werden, wird ein Ereignis generiert, das es einer Funktion ermöglicht, die URL dieser Datei in OCI Streaming zu schreiben.
Hinweis: Wir können uns diese Lösung nur vorstellen, wenn einige Quellanwendungen den Inhalt der Dateien in OCI Streaming speichern, während unsere Anwendung diesen Inhalt gerade liest. Es ist jedoch keine gute Vorgehensweise, große Datenmengen in einer Kakfa-Queue zu übertragen. Dazu verwendet unser Ansatz ein Muster namens Claim-Check, das genau wie unser Vorschlag aussieht. Anstatt die Datei über die Nachrichtenwarteschlange zu senden, senden wir die Referenz an diese Datei. Wir delegieren das Lesen der Datei an die Anwendung, die für die Verarbeitung verantwortlich ist.
Dieses Tutorial enthält die folgenden Komponenten: OCI Object Storage, Events Service, Functions und Streaming.
Am Ende dieser Kette wird die Anwendung die Streaming-Warteschlange konsumieren. Wir werden jedoch nicht besprechen, wie die Datei verarbeitet wird.
Ziele
- Implementieren Sie eine skalierbare Ereignisarchitektur, die eine große Anzahl von Dateien mit OCI Object Storage, Events Service, Functions und Streaming verarbeiten kann.
Voraussetzungen
-
VNC, Subnetze und alle Sicherheitseinstellungen, die für Bucket, Funktion und Streaming konfiguriert sind.
-
Oracle Cloud Infrastructure Identity and Access Management-(OCI IAM-)Benutzer, der für die Verwaltung von Buckets, Ereignisservice, Funktion und Streaming konfiguriert ist.
Aufgabe 1: OCI Streaming-Instanz erstellen
OCI Streaming ist ein Kafka-ähnlicher verwalteter Streaming-Service. Wir können Anwendungen mit den Kafka-APIs und gängigen SDKs auf dem Markt entwickeln. In dieser Aufgabe erstellen wir eine Instanz von OCI Streaming und konfigurieren sie für die Ausführung in beiden Anwendungen, um ein hohes Datenvolumen zu veröffentlichen und zu nutzen.
-
Melden Sie sich bei der OCI-Konsole an, und klicken Sie auf Analysen und KI und Straßen.
-
Wählen Sie Compartment, und klicken Sie auf Stream erstellen.
-
Geben Sie den Streamnamen der Streaminstanz ein, und behalten Sie die anderen Parameter mit den Standardwerten bei. Klicken Sie auf Erstellen, um die Instanz zu initialisieren und auf den Status Aktiv zu warten.
Hinweis:
-
Beim Erstellen des Streams können Sie Standard-Stream-Pool automatisch erstellen auswählen. Daher wird der Standard-Pool automatisch erstellt.
-
Sie können die Streaminstanz in einem privaten Subnetz erstellen. In diesem Fall muss sich die Funktion in Aufgabe 4 im selben privaten Subnetz oder in einem Subnetz befinden, das Zugriff auf die private Subnetzstreaminstanz hat. Prüfen Sie das VCN, die Subnetze, die Sicherheitslisten, das Servicegateway oder andere Sicherheitskomponenten. Stellen Sie sicher, dass Ihre Funktion auf die OCI Streaming-Instanz zugreifen kann.
-
-
Klicken Sie auf den Link DefaultPool.
-
Klicken Sie auf Kafka-Verbindungseinstellungen, und zeigen Sie die Verbindungseinstellungen an. Notieren Sie sich die Informationen, wie sie bei den nächsten Aufgaben erforderlich sind.
Aufgabe 2: OCI-Objektspeicher-Bucket erstellen
Wir müssen einen Bucket erstellen. Buckets sind logische Container zum Speichern von Objekten. Daher werden alle für diese Demo verwendeten Dateien in diesem Bucket gespeichert.
-
Öffnen Sie die OCI-Konsole, und navigieren Sie zu Speicher, Buckets. Wählen Sie im Abschnitt Buckets die Option Compartment aus. Das Compartment entspricht der OCI Streaming-Instanz, die in Aufgabe 1 erstellt wurde.
-
Klicken Sie auf Bucket erstellen, und geben Sie einen Bucket-Namen ein. Behalten Sie die anderen Parameter bei den Standardwerten bei, und klicken Sie auf Erstellen.
Der erstellte Bucket wird angezeigt.
Hinweis: Prüfen Sie die OCI-IAM-Policys für den Bucket. Sie müssen die Policys einrichten, wenn Sie diese Buckets in Ihren Demoanwendungen verwenden möchten. Weitere Informationen finden Sie unter Überblick über Object Storage und OCI IAM-Policys.
Aufgabe 3: OCI Object Storage-Bucket für OCI Events Services aktivieren
Der Bucket muss aktiviert werden, um Ereignisse auszugeben. Klicken Sie also auf Ihre Bucket-Details, suchen Sie nach dem Link Objektereignisse bearbeiten ausgeben, und aktivieren Sie ihn.
Aufgabe 4: OCI-Funktionen erstellen
Um die folgende Aufgabe auszuführen, laden Sie Code von hier herunter: OCI_Streaming_Claim_Check.zip.
-
Code verstehen
Es gibt zwei Codedateien, den Hauptcode
HelloFunction.java
und den OCI Streaming-ProducercodeProducer.java
.-
HelloFunction.java
.In diesem Teil des Codes müssen wir Daten erfassen, die aus den OCI Events Services stammen. Es gibt also 3 Quellen.
- Kontext: Diese Eigenschaft cmes aus RuntimeContext, und wir verwenden die Variable
REGION
. - Ereignisdaten: OCI Events Services erstellt Daten als
resourceName
. - Daten zu weiteren Ereignisdetails: OCI Events Services für OCI Object Storage produziert Daten als
namespace
undbucketName
.
Die OCI Object Storage-Datei-URL kann gemountet werden.
Der Hauptcode kann die URL an den OCI Streaming-Producer übergeben.
- Kontext: Diese Eigenschaft cmes aus RuntimeContext, und wir verwenden die Variable
-
Producer.java
.Dies ist die Klassenstruktur
Message
, um die Kafka-Informationen für das Muster Claim-check zu erstellen. Nurkey
undvalue
.Dies ist der grundlegende Code, der für das Streaming erzeugt werden soll.
-
-
OCI-Funktion erstellen und bereitstellen
In diesem Schritt müssen wir die OCI-CLI verwenden, um die OCI-Funktionen zu erstellen und Code in Ihrem OCI-Mandanten bereitzustellen. Informationen zum Erstellen von OCI-Funktionen finden Sie unter Funktionen: Erste Schritte mit der CLI. Befolgen Sie die Schritte, und suchen Sie nach der Java-Option. Sie müssen Ihre Funktion mit den folgenden Informationen erstellen.
Application: ocistreaming-app (follow the link Functions: Get Started using CLI) fn create app ocistreaming-app --annotation oracle.com/oci/subnetIds='["<the same OCID of your streaming subnet>"]' Context Variable: REGION=<your streaming region name, ex: us-ashburn-1> fn config app ocistreaming-app REGION=us-ashburn-1
Merken Sie sich das Compartment, in dem Sie die Funktion bereitgestellt haben. Sie benötigen diese Informationen, um den OCI Events Service zu konfigurieren.
Aufgabe 5: OCI-Ereignisse konfigurieren
Konfigurieren Sie eine Ereignisregel, um Ihre Funktion zum Abrufen der Bucket-Informationen und zum Senden an OCI Streaming auszulösen.
-
Wählen Sie dasselbe Compartment für die Regel aus, und klicken Sie auf Regel erstellen.
-
Geben Sie folgende Informationen ein.
-
Im Abschnitt Regelbedingung.
- Bedingung:
Event Type
. - Service-Name:
Object Storage
. - Eventtyp:
Object-Create, Object-Delete, Object-Update
.
- Bedingung:
-
Im Abschnitt Aktion.
- Aktionstyp:
Functions
. - Function Compartment:
<your function compartment name>
. - Funktionsanwendung:
<your function app, in this example ocistreaming-app>
. - Funktion:
fn_stream
.
- Aktionstyp:
-
Aufgabe 6: Testen Sie Ihren Circuit of Events
Hinweis: Bei privaten Netzwerken muss der Testcode in einer Bastion ausgeführt werden, die mit demselben privaten Subnetz von OCI Streaming verbunden ist.
Im Quellcodepackage OCI_Streaming_Claim_Check.zip finden Sie einen Ordner namens monitoring
und eine Datei mit dem Namen consume.py
. Mit diesem Code können wir überwachen und testen, ob die Lösung korrekt funktioniert.
Wir müssen den Code konfigurieren.
Nachdem Sie die Stream-Parameter konfiguriert haben, können Sie den Code ausführen und den Circuit prüfen. Dabei handelt es sich um Bucket, Ereignis, Funktion und Streaming.
Verwandte Links
Danksagungen
- Autor - Cristiano Hoshikawa (Oracle LAD A-Team-Solution Engineer)
Weitere Lernressourcen
Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Außerdem können Sie education.oracle.com/learning-explorer besuchen, um Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Process Files on Oracle Cloud Infrastructure Object Storage with a Scalable Cloud Native Flow
F94109-01
March 2024
Copyright © 2024, Oracle and/or its affiliates.