Déployer une application vidéo en conteneurs à l'aide de GraphQL et de NoSQL

Envisagez une application de diffusion vidéo sur demande. Il diffuse divers spectacles de clients à travers le monde. Les spectacles peuvent avoir un certain nombre de saisons, et une saison peut avoir plusieurs épisodes. Vous avez besoin d'un magasin de métadonnées moderne et persistant pour assurer le suivi de l'activité de ce client.

En général, les clients sont intéressés à suivre des choses comme les épisodes qu'ils regardent, le temps de surveillance par épisode, le nombre total de saisons regardées, etc. Les clients veulent également que les applications de streaming commencent à diffuser à partir d'où ils ont laissé tomber - après tout, qui veut recommencer depuis le début?

Cette architecture vous guide à travers une application de diffusion en continu vidéo sur demande composée de plusieurs microservices utilisant divers services Oracle Cloud Infrastructure. Dans cette architecture, l'accent est mis sur un microservice de suivi d'activité. Le serveur dorsal de l'application de diffusion en continu collecte des données pour générer des rapports tels que les émissions les plus populaires et le temps de surveillance moyen par émission.



Architecture

Cette application utilise une architecture à trois niveaux, représentant le cerveau de l'application. Les fonctionnalités de ces services vous permettent de créer une application de production sans serveur hautement disponible, évolutive et sécurisée. Les applications peuvent utiliser des milliers de serveurs, cependant, en tirant parti du paradigme sans serveur, vous n'avez pas à en gérer un seul.

Récemment, REST est devenu la norme pour la conception d'API Web. Le style architectural REST permet l'exécution sur des serveurs sans état et offre un accès structuré aux ressources. Cependant, les API REST se sont révélées rigides pour répondre aux exigences en constante évolution des clients qui y accèdent, telles que l'utilisation mobile accrue, les appareils à faible consommation d'énergie et les réseaux défaillants.

Pour ces applications, nous avons cherché une solution qui minimisait les données transférées sur le réseau et permettait aux utilisateurs d'interroger facilement les données en utilisant directement une API.

GraphQL est un langage d'interrogation et de manipulation de données à code source libre pour les API que vous pouvez coder dans plusieurs langues. GraphQL fournit une description complète et facile à comprendre des données dans votre API, tout en offrant des capacités d'exécution pour exécuter des interrogations avec des données existantes. Bien que GraphQL soit souvent confondu avec une technologie de base de données, GraphQL n'est lié à aucune base de données ou moteur de stockage spécifique, mais est soutenu par vos données existantes.

Les développeurs d'applications modernes ont de nombreux choix lorsqu'ils doivent décider quand et comment conserver un élément de données. Ces dernières années, les bases de données NoSQL sont devenues de plus en plus populaires et sont maintenant considérées comme l'un des outils nécessaires que chaque développeur d'applications doit avoir à sa disposition. Alors que les bases de données relationnelles " testées et vraies " sont parfaites pour résoudre les problèmes d'application classiques tels que la normalisation des données, la cohérence stricte et les interrogations arbitrairement complexes pour accéder à ces données, les bases de données NoSQL adoptent une approche différente.

L'exécution d'applications conteneurisées peut nécessiter une surcharge considérable en raison de l'instanciation de machines virtuelles, de l'installation de composants pour exécuter des images de conteneur (et de toutes les dépendances pour les prendre en charge, y compris les mises à jour de logiciels et de systèmes d'exploitation) et de la surveillance des applications pour s'assurer qu'elles fonctionnent de manière optimale, qu'elles sont disponibles et sans compromis.

En tant que développeur, vous pouvez vous connecter à Oracle NoSQL Database Cloud Service et utiliser les tables NoSQL à l'aide des trousses SDK NoSQL disponibles dans de nombreux langages. Le service de conteneur d'Oracle Cloud Infrastructure est un service entièrement géré qui convient aux charges de travail conteneurisées qui ne nécessitent pas de plate-forme d'orchestration de conteneurs telle que Kubernetes pour le déploiement de l'application GraphQL. Utilisez le moteur Kubernetes pour OCI (OKE) lorsque votre équipe de développement veut créer, déployer et gérer des applications en nuage natives en toute fiabilité.

Oracle Cloud Infrastructure API Gateway vous permet de publier des API avec des points d'extrémité privés qui sont accessibles depuis votre réseau, que vous pouvez exposer avec des adresses IP publiques si vous souhaitez qu'elles acceptent le trafic Internet. Les points d'extrémité prennent en charge la validation, la transformation des demandes et des réponses, la spécification CORS, l'authentification/l'autorisation et la limitation des demandes pour les API.

Tout cela offre une expérience sans serveur qui permet aux clients de se concentrer sur l'ajout de valeur à leurs applications au lieu de déployer et de gérer l'infrastructure.

Voici quelques-uns des avantages liés à l'utilisation d'Oracle NoSQL Database Cloud Service :

  • Modélisation de données : Oracle NoSQL Database Cloud Service prend en charge la modélisation basée sur un schéma et la modélisation JSON sans schéma. Il offre un moyen intuitif de développer des applications basées sur GraphQL. Le schéma GraphQL est conçu à l'aide de structures de données imbriquées, correspondant à ce que les développeurs utiliseront lors de la modélisation des données NoSQL. Un choix natif.
  • Cycle de vie de développement plus rapide : Les développeurs écrivent leurs applications. Oracle assure la gestion des bases de données, la gestion du stockage, la haute disponibilité et l'extensibilité pour aider les développeurs à se concentrer sur la création d'applications haute performance. Les développeurs déploient et gèrent des tables, ou des hiérarchies de tables, et non des grappes ou des bases de données pour leurs microservices GraphQL.
  • Accès et gestion des identités : Oracle NoSQL Database Cloud Service utilise Oracle Cloud Infrastructure Identity and Access Management pour fournir un accès sécurisé à Oracle Cloud. Oracle Cloud Infrastructure Identity and Access Management vous permet de créer des groupes dynamiques et d'accorder l'autorisation d'inspecter, lire, utiliser ou gérer des tables Oracle NoSQL Database Cloud Service.
  • Sécurité des données en matière de redondance : Oracle NoSQL Database Cloud Service stocke les données dans plusieurs domaines de disponibilité ou domaines d'erreur dans des régions comportant un seul domaine de disponibilité. Si un AD ou un FD devient indisponible, les données des utilisateurs restent accessibles à partir d'un autre AD ou d'un autre FD. Les demandes adressées à un point d'extrémité de région ne sont pas spécifiques à AD/FD, de sorte que l'indisponibilité de AD/FD est transparente.
  • Haute performance et prévisibilité : Oracle NoSQL Database Cloud Service tire parti des technologies de composants les plus récentes dans Oracle Cloud Infrastructure en offrant une haute performance à grande échelle. Les développeurs savent que leurs applications retournent les données avec des latences prévisibles, même lorsque leurs besoins en débit et en stockage augmentent.
  • Gestion totale avec zéro administration : les développeurs n'ont pas besoin d'administrer les serveurs de données, ni l'infrastructure et la sécurité sous-jacentes. Oracle tient à jour le matériel et le logiciel qui permettent aux développeurs de se concentrer sur la création d'applications.
  • Provisionnement sur demande du débit et du stockage : Oracle NoSQL Database Cloud Service s'adapte aux exigences de performance du débit des applications avec une latence faible et prévisible. Lorsque les charges de travail augmentent avec les fluctuations périodiques des affaires, les applications peuvent augmenter leur débit provisionné pour assurer une expérience utilisateur cohérente. Lorsque les charges de travail diminuent, les mêmes applications peuvent réduire leur débit provisionné et ainsi réduire les frais d'exploitation. Avec une capacité sur demande, vous n'avez pas besoin de provisionner les capacités de lecture ou d'écriture pour chaque table. Vous ne payez que pour les unités de lecture et d'écriture qui sont réellement consommées.

Le diagramme suivant illustre cette architecture de référence.



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

L'architecture comprend les composants suivants :

  • Location

    Une location est une partition sécurisée et isolée qu'Oracle configure dans Oracle Cloud lors de votre inscription à Oracle Cloud Infrastructure. Vous pouvez créer, organiser et administrer vos ressources dans Oracle Cloud au sein de votre location.

    Une location est synonyme d'une société ou d'une organisation. Habituellement, une société aura une seule location et reflétera sa structure organisationnelle au sein de cette location. Une seule location est généralement associée à un seul abonnement, et un seul abonnement n'a généralement qu'une seule location.

  • Région

    Une région Oracle Cloud Infrastructure est une zone géographique localisée qui contient un ou plusieurs centres de données, appelés domaines de disponibilité. Les régions sont indépendantes les unes des autres, et de grandes distances peuvent les séparer (dans différents pays ou continents).

  • Compartiment

    Les compartiments sont des partitions logiques inter-régions dans une location Oracle Cloud Infrastructure. Utilisez des compartiments pour organiser vos ressources dans Oracle Cloud, contrôler l'accès aux ressources et définir des quotas d'utilisation. Pour contrôler l'accès aux ressources d'un compartiment donné, vous devez définir des politiques qui spécifient qui peut accéder aux ressources et les actions qui peuvent être exécutées.

  • Domaine de disponibilité

    Les domaines de disponibilité sont des centres de données indépendants et autonomes dans une région. Les ressources physiques de chaque domaine de disponibilité sont isolées des ressources des autres domaines de disponibilité, ce qui garantit la tolérance aux pannes. Les domaines de disponibilité ne partagent pas les éléments d'infrastructure (alimentation ou refroidissement, par exemple) ni le réseau de domaines de disponibilité interne. Par conséquent, une défaillance d'un domaine de disponibilité ne devrait pas affecter les autres domaines de disponibilité de la région.

  • Domaine d'erreur

    Un domaine d'erreur est un regroupement de matériel et d'infrastructure au sein d'un domaine de disponibilité. Chaque domaine de disponibilité comporte trois domaines d'erreur avec une puissance et un matériel indépendants. Lorsque vous répartissez des ressources entre plusieurs domaines d'erreur, vos applications peuvent tolérer les pannes physiques de serveur, la maintenance du système et les pannes d'alimentation au sein d'un domaine d'erreur.

  • Réseau en nuage virtuel (VCN) et sous-réseau

    Un VCN est un réseau défini par logiciel personnalisable que vous avez configuré dans une région Oracle Cloud Infrastructure. Comme les réseaux en nuage virtuels traditionnels, ils vous offrent un contrôle sur votre environnement de réseau. Un VCN peut disposer de plusieurs blocs CIDR sans chevauchement que vous pouvez modifier après avoir créé le VCN. Vous pouvez segmenter un VCN en sous-réseaux, dont la portée peut concerner une région ou un domaine de disponibilité. Un sous-réseau est constitué d'un intervalle contigu d'adresses qui ne chevauchent pas les autres sous-réseaux dans le réseau en nuage virtuel. Vous pouvez modifier la taille d'un sous-réseau après sa création. Un sous-réseau peut être public ou privé.

  • Liste de sécurité

    Pour chaque sous-réseau, vous pouvez créer des règles de sécurité qui spécifient la source, la destination et le type de trafic qui doivent être autorisés à entrer et à sortir du sous-réseau.

  • Passerelle de service

    La passerelle de service fournit l'accès d'un VCN à d'autres services, tels qu'Oracle NoSQL Database Cloud Service. Le trafic entre le réseau VCN et le service Oracle circule sur la matrice réseau Oracle et ne passe jamais par Internet.

  • Passerelle Internet

    La passerelle Internet permet le trafic entre les sous-réseaux publics d'un VCN et l'Internet public.

  • Passerelle d'API

    Oracle API Gateway vous permet de publier des API avec des points d'extrémité privés qui sont accessibles depuis votre réseau, mais que vous pouvez exposer au réseau Internet public, au besoin. Les points d'extrémité prennent en charge la validation, la transformation des demandes et des réponses, la spécification CORS, l'authentification et l'autorisation, ainsi que la limitation des demandes pour les API.

  • Service de gestion des identités et des accès (GIA)

    Oracle Cloud Infrastructure Identity and Access Management (IAM) est le plan de contrôle d'accès pour Oracle Cloud Infrastructure (OCI) et Oracle Cloud Applications. L'API IAM et l'interface utilisateur vous permettent de gérer les domaines d'identité et les ressources du domaine d'identité. Chaque domaine d'identité IAM OCI représente une solution autonome de gestion des identités et des accès ou une population d'utilisateurs différente.

  • Politiques

    Une politique Oracle Cloud Infrastructure Identity and Access Management spécifie qui peut accéder à quelles ressources, et comment. L'accès est accordé au niveau du groupe et du compartiment, ce qui permet d'écrire une politique qui donne à un groupe un type d'accès spécifique à un compartiment spécifique ou à la location.

  • Base de données NoSQL

    Oracle NoSQL Database Cloud Service permet aux développeurs de créer facilement des applications à l'aide de modèles de base de données de documents, de colonnes et de paires clé-valeur, ce qui assure des temps de réponse prévisibles à la milliseconde près avec la réplication des données pour une haute disponibilité. Le service offre des transactions ACID, une évolutivité sans serveur, une sécurité complète et une tarification à l'utilisation faible pour les modes de capacité sur demande et provisionnée, notamment une compatibilité à 100 % avec le service Oracle NoSQL Database sur place.

  • Service de conteneurs Oracle Cloud Infrastructure

    Le service de conteneur d'Oracle Cloud Infrastructure est un service de calcul sans serveur qui vous permet d'exécuter des conteneurs instantanément, sans gérer aucun serveur.

  • Moteur Kubernetes pour OCI

    Oracle Cloud Infrastructure Kubernetes Engine (Kubernetes Engine ou OKE) est un service entièrement géré, évolutif et hautement disponible que vous pouvez utiliser pour déployer vos applications conteneurisées dans le nuage. Vous indiquez les ressources de calcul dont vos applications ont besoin et Kubernetes Engine les provisionne sur Oracle Cloud Infrastructure dans une location existante. OKE utilise Kubernetes pour automatiser le déploiement, l'ajustement et la gestion des applications conteneurisées sur les grappes d'hôtes.

Recommandations

Utilisez les recommandations suivantes comme point de départ. Vos exigences peuvent différer de l'architecture décrite ici.
  • Passerelle d'API

    La passerelle d'API peut être utilisée pour fournir un niveau initial de contrôle de sélection et d'utilisation, par exemple :

    • Authentification et autorisation du service
    • Contrôles de service tels que la limitation de débit
    • Saisie de l'analyse d'utilisation du service

    Le service de passerelle d'API (et non le pare-feu ou l'équilibreur de charge) doit effectuer un routage en fonction de la solution afin que tous les points d'extrémité qui ne sont pas satisfaits par les capacités GraphQL puissent être dirigés vers l'emplacement approprié. Il convient de tenir compte de limites de tarifs raisonnables, basées à la fois sur la capacité de performance maximale prise en charge par les solutions dorsales et sur les droits de pointe de tout utilisateur du service.

Points à considérer

Tenez compte des points suivants lors du déploiement de cette architecture de référence.

  • Sécurité

    Vous devez assurer la sécurité au niveau de l'application au niveau de la passerelle d'API. Vous pouvez traiter la sécurité spécifique GraphQL détaillée (par exemple, l'accès au niveau de l'attribut) à l'aide des directives GraphQL telles que @auth.

Déployez

Pour déployer cette architecture, suivez les instructions relatives au déploiement d'applications de suivi des activités dans ce laboratoire dynamique :

Informations complémentaires

Cliquez sur le lien pour en savoir plus sur le déploiement d'une application de vidéo en conteneur à l'aide d'GraphQL et d'Oracle NoSQL Database Cloud Service.

Vérifiez les ressources supplémentaires suivantes :

Ressources Oracle Cloud Infrastructure :

Confirmation

Auteurs :

  • Dario Vega
  • Michael Brey