Containerisierte Videoanwendung mit GraphQL und NoSQL bereitstellen

Ziehen Sie eine Video-on-Demand-Streaminganwendung in Betracht. Es streamt verschiedene Shows Kunden auf der ganzen Welt beobachten. Shows können eine Reihe von Saisons haben, und eine Saison kann mehrere Episoden haben. Sie benötigen einen modernen, persistenten Metadatenspeicher, um diese Kundenaktivität zu verfolgen.

Im Allgemeinen sind Kunden daran interessiert, Dinge wie die Episoden, die sie sehen, die Uhrzeit pro Episode, die Gesamtzahl der beobachteten Jahreszeiten usw. zu verfolgen. Kunden möchten auch, dass Streaming-Anwendungen von dort aus, wo sie aufgehört haben zu streamen - wer möchte schließlich von Anfang an wieder anfangen?

Diese Architektur führt Sie durch eine Video-on-Demand-Streaminganwendung, die aus mehreren Microservices mit verschiedenen Oracle Cloud Infrastructure-Services besteht. In dieser Architektur liegt der Fokus auf einem Microservice zur Aktivitätsverfolgung. Das Backend der Streaminganwendung sammelt Daten, um Berichte wie die beliebtesten Shows und die durchschnittliche Überwachungszeit pro Show zu generieren.



Architektur

Diese Anwendung verwendet eine dreistufige Architektur, die das Gehirn der Anwendung darstellt. Mit den Features dieser Services können Sie eine serverlose Produktionsanwendung erstellen, die hochverfügbar, skalierbar und sicher ist. Anwendungen können Tausende von Servern verwenden, aber durch die Nutzung des serverlosen Paradigmas müssen Sie keinen einzigen verwalten.

In letzter Zeit ist REST zum Standard für das Entwerfen von Web-APIs geworden. Der REST-Architekturstil ermöglicht die Ausführung auf zustandslosen Servern und bietet strukturierten Zugriff auf Ressourcen. REST-APIs haben sich jedoch als unflexibel erwiesen, wenn sie mit den sich schnell ändernden Anforderungen der Clients, die auf sie zugreifen, Schritt halten, wie z. B. erhöhte mobile Nutzung, Geräte mit geringer Leistung und schlampige Netzwerke.

Für diese Anwendungen suchten wir nach einer Lösung, die Daten, die über das Netzwerk übertragen wurden, minimierte und es Benutzern ermöglichte, Daten einfach über eine API abzufragen.

GraphQL ist eine Open-Source-Datenabfrage- und -Manipulationssprache für APIs, die Sie in vielen verschiedenen Sprachen codieren können. GraphQL bietet eine vollständige und leicht verständliche Beschreibung der Daten in Ihrer API und bietet Laufzeitfunktionen zur Erfüllung von Abfragen mit vorhandenen Daten. Obwohl GraphQL oft mit einer Datenbanktechnologie verwechselt wird, ist GraphQL nicht an eine bestimmte Datenbank oder Speicher-Engine gebunden, sondern wird von Ihren vorhandenen Daten gesichert.

Moderne Anwendungsentwickler haben viele Möglichkeiten, wenn sie entscheiden müssen, wann und wie sie ein Stück Daten persistieren. In den letzten Jahren sind NoSQL-Datenbanken immer beliebter geworden und gelten heute als eines der notwendigen Tools, über die jeder Anwendungsentwickler verfügen muss. Während "erprobte und echte" relationale Datenbanken klassische Anwendungsprobleme wie Datennormalisierung, strikte Konsistenz und willkürlich komplexe Abfragen für den Zugriff auf diese Daten lösen können, wenden NoSQL-Datenbanken einen anderen Ansatz an.

Die Ausführung von containerisierten Anwendungen kann erheblichen Overhead erfordern, von der Instanziierung virtueller Maschinen über die Installation von Komponenten zur Ausführung von Containerimages (und aller Abhängigkeiten, die diese unterstützen, einschließlich Software- und Betriebssystemupdates) bis hin zur Überwachung von Anwendungen, um sicherzustellen, dass sie optimal ausgeführt werden, verfügbar sind und kompromisslos sind.

Als Entwickler können Sie eine Verbindung zu Oracle NoSQL Database Cloud Service herstellen und mithilfe der NoSQL-SDKs, die in vielen Sprachen verfügbar sind, mit NoSQL-Tabellen arbeiten. Oracle Cloud Infrastructure Container Service ist ein vollständig verwalteter Service und eignet sich für containerisierte Workloads, für die keine Containerorchestrierungsplattform wie Kubernetes für das Deployment der Anwendung GraphQL erforderlich ist. Verwenden Sie die OCI Kubernetes Engine (OKE), wenn Ihr Entwicklungsteam cloudnative Anwendungen zuverlässig erstellen, bereitstellen und verwalten möchte.

Mit Oracle Cloud Infrastructure API Gateway können Sie APIs mit privaten Endpunkten veröffentlichen, auf die Sie über Ihr Netzwerk zugreifen können. Sie können öffentliche IP-Adressen angeben, wenn Internettraffic akzeptiert werden soll. Die Endpunkte unterstützen API-Validierung, Anforderungs- und Antworttransformation, CORS, Authentifizierung/Autorisierung und Anforderungsbegrenzung.

Dies alles bietet eine serverlose Erfahrung, mit der Kunden sich auf die Wertschöpfung ihrer Anwendungen konzentrieren können, anstatt die Infrastruktur bereitzustellen und zu verwalten.

Hier sind einige der Vorteile der Verwendung von Oracle NoSQL Database Cloud Service:

  • Datenmodellierung: Oracle NoSQL Database Cloud Service unterstützt sowohl die schembasierte als auch die schemalose (JSON-)Modellierung. Es bietet eine intuitive Möglichkeit, GraphQL-basierte Anwendungen zu entwickeln. Das GraphQL-Schema wird mit verschachtelten Datenstrukturen entworfen, die den Entwicklern bei der Datenmodellierung von NoSQL entsprechen. Eine native Wahl.
  • Schnellerer Entwicklungslebenszyklus: Entwickler schreiben ihre Anwendungen. Oracle bietet Datenbankmanagement, Speicherverwaltung, High Availability und Skalierbarkeit, damit sich Entwickler auf die Bereitstellung leistungsstarker Anwendungen konzentrieren können. Entwickler stellen Tabellen oder Tabellenhierarchien bereit und verwalten diese, nicht jedoch Cluster oder Datenbanken für ihre GraphQL-Microservices.
  • Identity Access and Management: Oracle NoSQL Database Cloud Service verwendet Oracle Cloud Infrastructure Identity and Access Management, um sicheren Zugriff auf Oracle Cloud bereitzustellen. Mit Oracle Cloud Infrastructure Identity and Access Management können Sie dynamische Gruppen erstellen und Oracle NoSQL Database Cloud Service-Tabellen prüfen, lesen, verwenden oder verwalten.
  • Datensicherheit bei Redundanz: Oracle NoSQL Database Cloud Service speichert Daten über mehrere Availability-Domains (ADs) oder Fehlerdomänen (FDs) hinweg in einzelnen AD-Regionen. Wenn eine AD oder FD ausfällt, können Sie über eine andere AD oder FD weiterhin auf die Benutzerdaten zugreifen. Anforderungen an einen Regionsendpunkt sind nicht spezifisch für AD/FD, daher ist die Nichtverfügbarkeit von AD/FD transparent.
  • High Performance and Predictability: Oracle NoSQL Database Cloud Service profitiert von den neuesten Komponententechnologien in Oracle Cloud Infrastructure, indem es eine hohe Performance bietet. Entwickler wissen, dass ihre Anwendungen Daten mit vorhersagbaren Latenzzeiten zurückgeben, selbst wenn ihr Durchsatz und ihre Speicheranforderungen steigen.
  • Fully Managed with Zero Administration: Developers do not need to administer data servers, or the underlying infrastructure and security. Oracle pflegt die Hardware und Software, sodass Entwickler sich auf das Erstellen von Anwendungen konzentrieren können.
  • Provisioning von Durchsatz und Speicher nach Bedarf: Oracle NoSQL Database Cloud Service kann skaliert werden, um die Performanceanforderungen an den Durchsatz mit geringer und vorhersagbarer Latenz zu erfüllen. Da Workloads bei gelegentlichen Schwankungen des Geschäftsbetriebs ansteigen, können Anwendungen den bereitgestellten Durchsatz erhöhen, um eine konsistente Benutzererfahrung zu gewährleisten. Bei abnehmenden Workloads können dieselben Anwendungen ihren bereitgestellten Durchsatz reduzieren, wodurch die Betriebskosten sinken. Bei bedarfsgesteuerter Kapazität müssen Sie nicht die Lese- oder Schreibkapazitäten für jede Tabelle bereitstellen. Sie zahlen nur für die Lese- und Schreibeinheiten, die tatsächlich verbraucht werden.

Das folgende Diagramm veranschaulicht diese Referenzarchitektur.



containerized-video-app-graphql-nosql-architecture.zip

Die Architektur umfasst die folgenden Komponenten:

  • Tenancy

    Ein Mandant ist eine sichere und isolierte Partition, die Oracle in der Oracle Cloud einrichtet, wenn Sie sich für Oracle Cloud Infrastructure registrieren. Sie können Ihre Ressourcen in der Oracle Cloud in Ihrem Mandanten erstellen, organisieren und verwalten.

    Ein Mandant ist ein Synonym für ein Unternehmen oder eine Organisation. In der Regel verfügt ein Unternehmen über einen einzigen Mandanten und spiegelt seine Organisationsstruktur innerhalb dieses Mandanten wider. Ein einzelner Mandant ist in der Regel mit einem einzelnen Abonnement verknüpft, und ein einzelnes Abonnement hat in der Regel nur einen Mandanten.

  • Region

    Eine Oracle Cloud Infrastructure-Region ist ein lokalisierter geografischer Bereich, der mindestens ein Data Center enthält, das als Availability-Domain bezeichnet wird. Regionen sind unabhängig von anderen Regionen, und große Entfernungen können sie trennen (über Länder oder sogar Kontinente).

  • Compartment

    Compartments sind regionsübergreifende logische Partitionen innerhalb eines Oracle Cloud Infrastructure-Mandanten. Mit Compartments können Sie Ihre Ressourcen in Oracle Cloud organisieren, den Zugriff auf die Ressourcen kontrollieren und Nutzungs-Quotas festlegen. Um den Zugriff auf die Ressourcen in einem bestimmten Compartment zu kontrollieren, definieren Sie Policys, mit denen angegeben wird, wer auf die Ressourcen zugreifen kann und welche Aktionen sie ausführen können.

  • Availability-Domain

    Availability-Domains sind eigenständige, unabhängige Data Center innerhalb einer Region. Die physischen Ressourcen in jeder Availability-Domain sind von den Ressourcen in den anderen Availability-Domains isoliert, was eine Fehlertoleranz sicherstellt. Availability-Domains haben keine gemeinsame Infrastruktur wie Stromversorgung oder Kühlung oder das interne Availability-Domainnetzwerk. Daher sollte ein Fehler in einer Availability-Domain sich nicht auf die anderen Availability-Domains in der Region auswirken.

  • Faultdomain

    Eine Faultdomain ist eine Gruppierung aus Hardware und Infrastruktur innerhalb einer Availability-Domain. Jede Availability-Domain umfasst drei Faultdomains mit unabhängiger Stromversorgung und Hardware. Wenn Sie Ressourcen auf mehrere Faultdomains verteilen, können Ihre Anwendungen physische Serverausfälle, Systemwartungen und Stromausfälle innerhalb einer Faultdomain tolerieren.

  • Virtuelles Cloud-Netzwerk (VCN) und Subnetze

    Ein VCN ist ein anpassbares, softwaredefiniertes Netzwerk, das Sie in einer Oracle Cloud Infrastructure-Region einrichten können. Wie herkömmliche Data Center-Netzwerke erhalten Sie mit VCNs die Kontrolle über Ihre Netzwerkumgebung. Ein VCN kann mehrere sich nicht überschneidende CIDR-Blöcke aufweisen, die Sie nach dem Erstellen des VCN ändern können. Sie können ein VCN in Subnetze segmentieren, die sich auf eine Region oder eine Availability-Domain beschränken. Jedes Subnetz besteht aus einem Bereich zusammenhängender Adressen, die sich nicht mit anderen Subnetzen im VCN überschneiden. Sie können die Größe eines Subnetzes nach der Erstellung ändern. Ein Subnetz kann öffentlich oder privat sein.

  • Sicherheitsliste

    Für jedes Subnetz können Sie Sicherheitsregeln erstellen, die Quelle, Ziel und Typ des Traffics angeben, der im Subnetz und aus dem Subnetz zugelassen werden muss.

  • Servicegateway

    Das Servicegateway ermöglicht den Zugriff von einem VCN auf andere Services wie Oracle NoSQL Database Cloud Service. Der Traffic vom VCN zum Oracle-Service wird über die Oracle-Netzwerkstruktur geleitet und durchläuft nie das Internet.

  • Internetgateway

    Das Internetgateway ermöglicht Traffic zwischen den öffentlichen Subnetzen in einem VCN und dem öffentlichen Internet.

  • API Gateway

    Mit Oracle API Gateway können Sie APIs mit privaten Endpunkten veröffentlichen, auf die Sie über Ihr Netzwerk zugreifen können, und die Sie bei Bedarf dem öffentlichen Internet zur Verfügung stellen können. Die Endpunkte unterstützen API-Validierung, Anforderungs- und Antworttransformation, CORS, Authentifizierung und Autorisierung sowie Anforderungsbegrenzung.

  • Identity and Access Management (IAM)

    Oracle Cloud Infrastructure Identity and Access Management (IAM) ist die Zugriffskontrollebene für Oracle Cloud Infrastructure (OCI) und Oracle Cloud Applications. Mit der IAM-API und der Benutzeroberfläche können Sie Identitätsdomains und die Ressourcen innerhalb der Identitätsdomain verwalten. Jede OCI-IAM-Identitätsdomain stellt eine eigenständige Identity and Access Management-Lösung oder eine andere Benutzerpopulation dar.

  • Policys

    Eine Oracle Cloud Infrastructure Identity and Access Management-Policy gibt an, wer auf welche Ressourcen zugreifen kann und wie. Der Zugriff wird auf Gruppen- und Compartment-Ebene erteilt. Sie können also eine Policy schreiben, die einer Gruppe einen bestimmten Zugriffstyp in einem bestimmten Compartment oder dem Mandanten erteilt.

  • NoSQL-Datenbank

    Oracle NoSQL Database Cloud Service erleichtert Entwicklern das Erstellen von Anwendungen mithilfe von Dokument-, Spalten- und Schlüsselwert-Datenbankmodellen. So können Entwickler vorhersehbare Antwortzeiten im einstelligen Millisekundenbereich mit Datenreplikation für High Availability bereitstellen. Der Service bietet ACID-Transaktionen, serverlose Skalierung, umfassende Sicherheit und niedrige Pay-per-Use-Preise für On-Demand- und bereitgestellte Kapazitätsmodi, einschließlich 100% Kompatibilität mit On-Premise-Oracle NoSQL Database.

  • Oracle Cloud Infrastructure-Containerservice

    Oracle Cloud Infrastructure Container Service ist ein Service für Serverless Compute, mit dem Sie Container sofort ausführen können, ohne Server zu verwalten.

  • OCI Kubernetes Engine

    Oracle Cloud Infrastructure Kubernetes Engine (Kubernetes Engine oder OKE) ist ein vollständig verwalteter, skalierbarer und hoch verfügbarer Service, mit dem Sie Ihre Containeranwendungen in der Cloud bereitstellen können. Sie geben die Compute-Ressourcen an, die Ihre Anwendungen benötigen, und Kubernetes Engine stellt sie in Oracle Cloud Infrastructure in einem vorhandenen Mandanten bereit. OKE automatisiert mit Kubernetes das Deployment, die Skalierung und die Verwaltung containerisierter Anwendungen über Cluster von Hosts hinweg.

Empfehlungen

Verwenden Sie die folgenden Empfehlungen als Ausgangspunkt. Ihre Anforderungen können von der hier beschriebenen Architektur abweichen.
  • API Gateway

    Mit dem API-Gateway können Sie eine erste Ebene von Screening- und Nutzungskontrollen bereitstellen, wie:

    • Service-Authentifizierung und -Autorisierung
    • Servicekontrollen wie Ratenbegrenzung
    • Erfassung von Service-Nutzungsanalysen

    Das API-Gateway (nicht die Firewall oder der Load Balancer) muss lösungsorientiertes Routing ausführen, damit alle Endpunkte, die nicht von den GraphQL-Funktionen erfüllt werden, an den richtigen Speicherort geleitet werden können. Es sollten angemessene Ratenlimits berücksichtigt werden, die sowohl auf der maximalen Leistungsfähigkeit basieren, die von den Backend-Lösungen unterstützt wird, als auch auf der Spitzenberechtigung eines Servicebenutzers.

Hinweise

Beachten Sie Folgendes, wenn Sie diese Referenzarchitektur bereitstellen.

  • Sicherheit

    Sie sollten die Sicherheit auf Anwendungsebene im API-Gateway berücksichtigen. Sie können feingranulierte GraphQL-spezifische Sicherheit (z.B. Zugriff auf Attributebene) mit GraphQL-Anweisungen wie @auth adressieren.

Stellen Sie

Um diese Architektur bereitzustellen, befolgen Sie die Anweisungen zum Deployment der Aktivitätstracking-App in dieser Liveübung:

Mehr erfahren

Erfahren Sie mehr über das Deployment einer containerisierten Videoanwendung mit GraphQL und Oracle NoSQL Database Cloud Service.

Prüfen Sie diese zusätzlichen Ressourcen:

Oracle Cloud Infrastructure-Ressourcen:

Danksagungen

Autor:

  • Dario Vega
  • Michael Brey