Distribuire un'applicazione video in container utilizzando GraphQL e NoSQL

Prendi in considerazione un'applicazione di streaming video-on-demand. Vengono trasmessi in streaming vari spettacoli che i clienti di tutto il mondo guardano. Gli spettacoli possono avere un certo numero di stagioni e una stagione può avere più episodi. Per tenere traccia di questa attività del cliente, è necessario un'area di memorizzazione dei metadati moderna e persistente.

In generale, i clienti sono interessati a tenere traccia di cose come gli episodi che guardano, il tempo di orologio per episodio, il numero totale di stagioni osservate e così via. I clienti vogliono anche che le applicazioni di streaming inizino lo streaming da dove hanno smesso di guardare - dopo tutto, chi vuole ricominciare dall'inizio?

Questa architettura ti guida attraverso un'applicazione di streaming video-on-demand composta da diversi microservizi che utilizzano vari servizi Oracle Cloud Infrastructure. In questa architettura, l'attenzione si concentra su un microservizio di monitoraggio delle attività. Il backend dell'applicazione di streaming raccoglie i dati per generare report quali gli spettacoli più popolari e il tempo medio di controllo per presentazione.



Architettura

Questa applicazione utilizza un'architettura a tre livelli, che rappresenta il cervello dell'applicazione. Le funzioni di questi servizi consentono di creare un'applicazione di produzione serverless ad alta disponibilità, scalabile e sicura. Le applicazioni possono utilizzare migliaia di server, tuttavia, sfruttando il paradigma serverless, non è necessario gestirne uno singolo.

Recentemente, REST è diventato lo standard per la progettazione di API Web. Lo stile dell'architettura REST consente l'esecuzione su server senza conservazione dello stato e offre accesso strutturato alle risorse. Tuttavia, le API REST hanno dimostrato di essere poco flessibili quando si tiene il passo con i requisiti in rapida evoluzione dei client che vi accedono, come l'aumento dell'utilizzo dei dispositivi mobili, i dispositivi a bassa potenza e le reti sciatte.

Per queste applicazioni, abbiamo cercato una soluzione che riducesse al minimo i dati trasferiti sulla rete e consentisse agli utenti di eseguire facilmente query sui dati utilizzando direttamente un'API.

GraphQL è un linguaggio di manipolazione e query dei dati open source per le API che è possibile codificare in molte lingue diverse. GraphQL fornisce una descrizione completa e di facile comprensione dei dati nella tua API, fornendo al contempo funzionalità di runtime per soddisfare le query con i dati esistenti. Sebbene GraphQL sia spesso confuso con l'essere una tecnologia di database, GraphQL non è legato ad alcun database o motore di storage specifico, ma è invece supportato dai dati esistenti.

Gli sviluppatori di applicazioni moderne hanno molte possibilità di scelta quando devono decidere quando e come rendere persistente un dato. Negli ultimi anni, i database NoSQL sono diventati sempre più popolari e sono ora visti come uno degli strumenti necessari che ogni sviluppatore di applicazioni deve avere a sua disposizione. Sebbene i database relazionali 'testati e veri' siano ottimi per risolvere problemi applicativi classici come la normalizzazione dei dati, la coerenza rigorosa e query arbitrariamente complesse per accedere a tali dati, i database NoSQL adottano un approccio diverso.

L'esecuzione di applicazioni containerizzate può richiedere un notevole sovraccarico dalla creazione di istanze di macchine virtuali, dall'installazione di componenti per eseguire le immagini dei container (e tutte le dipendenze per supportarle, inclusi gli aggiornamenti software e del sistema operativo) e dal monitoraggio delle applicazioni per garantire che funzionino in modo ottimale, siano disponibili e non siano compromessi.

Gli sviluppatori possono connettersi a Oracle NoSQL Database Cloud Service e utilizzare le tabelle NoSQL utilizzando gli SDK NoSQL disponibili in molte lingue. Oracle Cloud Infrastructure Container Service è un servizio completamente gestito e adatto per carichi di lavoro containerizzati che non richiedono una piattaforma di orchestrazione dei container come Kubernetes per l'implementazione dell'applicazione GraphQL. Utilizza OCI Kubernetes Engine (OKE) quando il tuo team di sviluppo desidera creare, distribuire e gestire in modo affidabile applicazioni cloud native.

Oracle Cloud Infrastructure API Gateway ti consente di pubblicare le API con endpoint privati accessibili dall'interno della tua rete, che puoi esporre con indirizzi IP pubblici se vuoi che accettino il traffico Internet. Gli endpoint supportano la convalida delle API, la trasformazione delle richieste e delle risposte, il CORS, l'autenticazione/autorizzazione e la limitazione delle richieste.

Tutto ciò offre un'esperienza serverless che consente ai clienti di concentrarsi sull'aggiunta di valore alle proprie applicazioni invece di distribuire e gestire l'infrastruttura.

Ecco alcuni dei vantaggi derivanti dall'uso di Oracle NoSQL Database Cloud Service:

  • Modellazione dei dati: Oracle NoSQL Database Cloud Service supporta la modellazione JSON (schema-based) e senza schema. Offre un modo intuitivo per sviluppare applicazioni basate su GraphQL. Lo schema GraphQL viene progettato utilizzando strutture di dati nidificate, corrispondenti a ciò che gli sviluppatori utilizzeranno quando eseguiranno NoSQL Data Modeling. Scelta nativa.
  • Faster Development Lifecycle: gli sviluppatori scrivono le proprie applicazioni. Oracle esegue la gestione del database, la gestione dello storage, l'alta disponibilità e la scalabilità, per aiutare gli sviluppatori a concentrarsi sulla fornitura di applicazioni altamente performanti. Gli sviluppatori distribuiscono e gestiscono tabelle o gerarchie di tabelle, non cluster o database per i loro microservizi GraphQL.
  • Accesso e gestione delle identità: Oracle NoSQL Database Cloud Service utilizza Oracle Cloud Infrastructure Identity and Access Management per fornire un accesso sicuro a Oracle Cloud. Oracle Cloud Infrastructure Identity and Access Management consente di creare gruppi dinamici e di concedere l'autorizzazione per ispezionare, leggere, utilizzare o gestire le tabelle di Oracle NoSQL Database Cloud Service.
  • Sicurezza dei dati nella ridondanza: Oracle NoSQL Database Cloud Service memorizza i dati in più domini di disponibilità (AD, Availability Domain) o domini di errore (FD, fault domain) nelle singole aree AD. Se un AD o FD non è più disponibile, i dati utente sono comunque accessibili da un altro AD o FD. Le richieste a un endpoint dell'area non sono specifiche di AD/FD, pertanto l'indisponibilità di AD/FD è trasparente.
  • Performance e prevedibilità elevate: Oracle NoSQL Database Cloud Service sfrutta le tecnologie dei componenti più recenti di Oracle Cloud Infrastructure per garantire prestazioni elevate su larga scala. Gli sviluppatori sanno che le loro applicazioni restituiscono dati con latenze prevedibili, anche quando aumentano i requisiti di throughput e storage.
  • Completamente gestito con Zero Administration: gli sviluppatori non devono amministrare i server di dati, né l'infrastruttura e la sicurezza di base. Oracle gestisce l'hardware e il software che consentono agli sviluppatori di concentrarsi sulla creazione di applicazioni.
  • throughput su richiesta e provisioning dello storage: Oracle NoSQL Database Cloud Service si ridimensiona per soddisfare i requisiti di prestazioni del throughput delle applicazioni con latenza bassa e prevedibile. Man mano che i carichi di lavoro aumentano con le fluttuazioni periodiche del business, le applicazioni possono aumentare il throughput di cui viene eseguito il provisioning per mantenere una user experience coerente. Man mano che i carichi di lavoro diminuiscono, le stesse applicazioni possono ridurre il throughput di cui viene eseguito il provisioning, con conseguente riduzione delle spese operative. Con la capacità su richiesta, non è necessario eseguire il provisioning delle capacità di lettura o scrittura per ogni tabella. Paghi solo per le unità di lettura e scrittura effettivamente consumate.

Il seguente diagramma illustra questa architettura di riferimento.



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

L'architettura presenta i seguenti componenti:

  • Tenancy

    Una tenancy è una partizione sicura e isolata che Oracle imposta all'interno di Oracle Cloud quando ti iscrivi a Oracle Cloud Infrastructure. Puoi creare, organizzare e amministrare le tue risorse in Oracle Cloud all'interno della tua tenancy.

    Una tenancy è sinonimo di azienda o organizzazione. Di solito, un'azienda avrà una singola tenancy e rifletterà la sua struttura organizzativa all'interno di quella tenancy. Una singola tenancy viene in genere associata a una singola sottoscrizione e una singola sottoscrizione in genere ha una sola tenancy.

  • Area

    Un'area geografica Oracle Cloud Infrastructure è un'area geografica localizzata che contiene uno o più data center, denominati domini di disponibilità. Le regioni sono indipendenti da altre regioni e grandi distanze possono separarle (tra paesi o addirittura continenti).

  • Compartimento

    I compartimenti sono partizioni logiche tra più aree all'interno di una tenancy Oracle Cloud Infrastructure. Usare i compartimenti per organizzare le risorse in Oracle Cloud, controllare l'accesso alle risorse e impostare le quote d'uso. Per controllare l'accesso alle risorse in un determinato compartimento, definire criteri che specificano chi può accedere alle risorse e quali azioni possono eseguire.

  • Dominio di disponibilità

    I domini di disponibilità sono data center standalone e indipendenti all'interno di un'area geografica. Le risorse fisiche in ciascun dominio di disponibilità sono isolate dalle risorse negli altri domini di disponibilità, il che fornisce tolleranza agli errori. I domini di disponibilità non condividono l'infrastruttura, ad esempio alimentazione o raffreddamento, o la rete interna del dominio di disponibilità. Pertanto, un errore in un dominio di disponibilità non dovrebbe influire sugli altri domini di disponibilità nell'area.

  • Dominio di errore

    Un dominio di errore consiste in un gruppo di hardware e infrastruttura all'interno di un dominio di disponibilità. Ogni dominio di disponibilità dispone di tre domini di errore con alimentazione e hardware indipendenti. Quando distribuisci le risorse su più domini di errore, le tue applicazioni possono tollerare errori fisici del server, manutenzione del sistema e errori di alimentazione all'interno di un dominio di errore.

  • Rete cloud virtuale (VCN) e subnet

    Una VCN è una rete personalizzabile e definita dal software configurata in un'area Oracle Cloud Infrastructure. Come le tradizionali reti di data center, le reti VCN consentono di controllare l'ambiente di rete. Una VCN può avere più blocchi CIDR non sovrapposti che è possibile modificare dopo aver creato la VCN. Puoi segmentare una VCN in subnet, che possono essere definite in un'area o in un dominio di disponibilità. Ogni subnet è costituita da un intervallo contiguo di indirizzi che non si sovrappongono alle altre subnet nella VCN. È possibile modificare le dimensioni di una subnet dopo la creazione. Una subnet può essere pubblica o privata.

  • Lista di sicurezza

    Per ogni subnet, puoi creare regole di sicurezza che specificano l'origine, la destinazione e il tipo di traffico che devono essere consentiti all'interno e all'esterno della subnet.

  • Gateway del servizio

    Il gateway di servizi fornisce l'accesso da una VCN ad altri servizi, come Oracle NoSQL Database Cloud Service. Il traffico dalla VCN al servizio Oracle viaggia sul fabric di rete Oracle e non passa mai attraverso Internet.

  • Gateway Internet

    Il gateway Internet consente il traffico tra le subnet pubbliche in una VCN e la rete Internet pubblica.

  • Gateway API

    Oracle API Gateway ti consente di pubblicare le API con endpoint privati accessibili dall'interno della tua rete e che, se necessario, puoi esporre alla rete Internet pubblica. Gli endpoint supportano la convalida delle API, la trasformazione delle richieste e delle risposte, il CORS, l'autenticazione e l'autorizzazione e la limitazione delle richieste.

  • Identity and Access Management (IAM)

    Oracle Cloud Infrastructure Identity and Access Management (IAM) è il piano di controllo dell'accesso per Oracle Cloud Infrastructure (OCI) e Oracle Cloud Applications. L'API IAM e l'interfaccia utente consentono di gestire i domini di Identity e le risorse all'interno del dominio di Identity. Ogni dominio di Identity IAM OCI rappresenta una soluzione standalone per la gestione delle identità e degli accessi o una popolazione di utenti diversa.

  • Criteri

    Un criterio di Oracle Cloud Infrastructure Identity and Access Management specifica chi può accedere a quali risorse e come. L'accesso viene concesso a livello di gruppo e compartimento. Ciò significa che è possibile scrivere un criterio che fornisce a un gruppo un tipo specifico di accesso all'interno di un compartimento specifico o alla tenancy.

  • NoSQL Database

    Oracle NoSQL Database Cloud Service semplifica la creazione di applicazioni mediante modelli di database documentali, a colonne e con valori chiave, offrendo tempi di risposta prevedibili in millisecondi a singola cifra con replica dei dati per l'alta disponibilità. Il servizio offre transazioni ACID, scalabilità serverless, sicurezza completa e prezzi bassi pay-per-use per le modalità di capacità sia on-demand che di provisioning, inclusa la compatibilità al 100% con Oracle NoSQL Database on-premise.

  • Oracle Cloud Infrastructure Container Service

    Oracle Cloud Infrastructure Container Service è un servizio di calcolo serverless che consente di eseguire immediatamente i contenitori senza gestire alcun server.

  • Motore Kubernetes OCI

    Oracle Cloud Infrastructure Kubernetes Engine (Kubernetes Engine o OKE) è un servizio completamente gestito, scalabile e ad alta disponibilità che puoi utilizzare per distribuire le tue applicazioni containerizzate nel cloud. Puoi specificare le risorse di computazione richieste dalle tue applicazioni e Kubernetes Engine le esegue sul Oracle Cloud Infrastructure in una tenancy esistente. OKE utilizza Kubernetes per automatizzare l'implementazione, la scalabilità e la gestione di applicazioni containerizzate tra cluster di host.

Suggerimenti

Utilizzare i seguenti suggerimenti come punto di partenza. I tuoi requisiti potrebbero essere diversi dall'architettura descritta qui.
  • Gateway API

    Il gateway API può essere utilizzato per fornire un livello iniziale di screening e controlli di utilizzo, ad esempio:

    • Autenticazione e autorizzazione del servizio
    • Controlli del servizio come la limitazione di frequenza
    • Acquisizione dell'analisi dell'uso del servizio

    Il gateway API (non il firewall o il load balancer) deve eseguire l'instradamento basato su soluzioni in modo che tutti gli endpoint che non vengono soddisfatti dalle funzionalità GraphQL possano essere indirizzati alla posizione corretta. È opportuno prendere in considerazione limiti di frequenza ragionevoli, in base sia alla capacità di prestazioni massime supportata dalle soluzioni backend, sia all'abilitazione massima di qualsiasi utente del servizio.

Considerazioni

Quando si distribuisce questa architettura di riferimento, tenere presente quanto riportato di seguito.

  • Sicurezza

    Dovresti gestire la sicurezza a livello di applicazione nel gateway API. È possibile gestire la sicurezza specifica GraphQL con filtro, ad esempio l'accesso a livello di attributo, utilizzando le direttive GraphQL, ad esempio @auth.

Distribuire

Per distribuire questa architettura, seguire le istruzioni per la distribuzione dell'applicazione di monitoraggio delle attività in questo Live Lab:

Visualizza altro

Scopri di più sulla distribuzione di un'applicazione video in container utilizzando GraphQL e Oracle NoSQL Database Cloud Service.

Esamina queste risorse aggiuntive:

Risorse Oracle Cloud Infrastructure:

conferme

Autori:

  • Dario Vega
  • Michael Brey