Déploiement d'une application vidéo en conteneur à l'aide de GraphQL et NoSQL

Prenons l'exemple d'une application de streaming vidéo à la demande. Il diffuse divers spectacles de clients à travers le monde regarder. Les spectacles peuvent avoir un certain nombre de saisons et une saison peut avoir plusieurs épisodes. Vous avez besoin d'une banque de métadonnées moderne et persistante pour suivre l'activité de ce client.

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

Cette architecture vous guide à travers une application de streaming vidéo à la 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 back-end de l'application de streaming collecte des données pour générer des rapports tels que les émissions les plus populaires et le temps moyen de surveillance 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 inflexibles pour répondre aux exigences en constante évolution des clients qui y accèdent, telles que l'augmentation de l'utilisation mobile, les périphériques à faible consommation d'énergie et les réseaux obsolètes.

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 de manipulation et de requête de données open source pour les API que vous pouvez coder dans de nombreux langages différents. GraphQL fournit une description complète et facile à comprendre des données dans votre API, tout en fournissant des fonctionnalités d'exécution pour répondre aux requêtes 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 à aucun 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. Bien que les bases de données relationnelles "essayées et vraies" permettent de résoudre les problèmes d'application classiques tels que la normalisation des données, la cohérence stricte et les requêtes arbitrairement complexes pour accéder à ces données, les bases de données NoSQL adoptent une approche différente.

L'exécution d'applications en conteneur peut nécessiter une surcharge considérable, qu'il s'agisse 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), ou encore 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 des tables NoSQL à l'aide des kits SDK NoSQL disponibles en plusieurs langues. Oracle Cloud Infrastructure Container Service est un service entièrement géré qui convient aux charges de travail en conteneur qui ne nécessitent pas de plate-forme d'orchestration de conteneurs telle que Kubernetes pour le déploiement de l'application GraphQL. Utilisez OCI Kubernetes Engine (OKE) lorsque votre équipe de développement souhaite créer, déployer et gérer en toute fiabilité des applications cloud natives.

Oracle Cloud Infrastructure API Gateway vous permet de publier des API avec des adresses privées accessibles à partir de votre réseau. Vous pouvez les rendre visibles avec des adresses IP publiques si vous voulez qu'elles acceptent le trafic Internet. Les adresses prennent en charge la validation d'API, la transformation des demandes et des réponses, CORS, l'authentification/autorisation et la limitation des demandes.

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 de 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 sans schéma (JSON). 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, ce qui correspond à ce que les développeurs utiliseront lors de la modélisation de données NoSQL. Un choix natif.
  • Un cycle de vie de développement plus rapide : les développeurs écrivent leurs applications. Oracle se charge de la gestion de base de données, de la gestion du stockage, de la haute disponibilité et de l'évolutivité, pour aider les développeurs à se concentrer sur la création d'applications hautes performances. Les développeurs déploient et gèrent des tables, ou des hiérarchies de table, et non des clusters ou des bases de données pour leurs microservices GraphQL.
  • Identity Access and Management : Oracle NoSQL Database Cloud Service utilise le service 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 de donner les droits d'accès nécessaires pour inspecter, lire, utiliser ou gérer des tables Oracle NoSQL Database Cloud Service.
  • Sécurité des données avec redondance : Oracle NoSQL Database Cloud Service stocke les données dans plusieurs domaines de disponibilité ou domaines de pannes dans des régions à domaine de disponibilité unique. En cas d'indisponibilité d'un domaine de disponibilité ou d'un FD, les données utilisateur restent accessibles à partir d'un autre domaine de disponibilité ou de FD. Les demandes adressées à une adresse de région ne sont pas propres à AD/FD. L'indisponibilité d'AD/FD est donc transparente.
  • Haute performance et prévisibilité : Oracle NoSQL Database Cloud Service tire parti des dernières technologies de composant dans Oracle Cloud Infrastructure en offrant des performances élevées à grande échelle. Les développeurs savent que leurs applications retournent des données avec des latences prévisibles, même lorsque leur débit et leurs exigences de stockage augmentent.
  • Gestion totale sans 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 assure la maintenance du matériel et des logiciels, ce qui permet aux développeurs de se concentrer sur la création d'applications.
  • Provisionnement du débit et du stockage à la demande : Oracle NoSQL Database Cloud Service évolue pour répondre aux exigences de performances de débit d'application avec une latence faible et prévisible. Lorsque les charges globales augmentent avec les fluctuations des activités périodiques, les applications peuvent augmenter leur débit provisionné pour maintenir une expérience utilisateur cohérente. Lorsque les charges globales diminuent, les mêmes applications peuvent réduire leur débit provisionné, ce qui réduit les charges d'exploitation. Avec la capacité à la 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 réellement consommées.

Le schéma suivant illustre cette architecture de référence.



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

L'architecture comprend les composants suivants :

  • Tenancy

    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'entreprise ou d'organisation. En général, une entreprise dispose d'une seule location et reflète sa structure organisationnelle au sein de cette location. Une location unique 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 précise, incluant 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 (entre pays, voire continents).

  • Compartiment

    Les compartiments sont des partitions logiques inter-région au sein d'une location Oracle Cloud Infrastructure. Utilisez des compartiments pour organiser les ressources dans Oracle Cloud, en contrôler l'accès et définir des quotas d'utilisation. Pour contrôler l'accès aux ressources d'un compartiment donné, vous définissez des stratégies qui indiquent qui peut accéder aux ressources et les actions réalisables.

  • Domaine de disponibilité

    Les domaines de disponibilité sont des centres de données autonomes indépendants au sein d'une région. Les ressources physiques de chaque domaine de disponibilité sont isolées de celles des autres, ce qui garantit la tolérance aux pannes. Les domaines de disponibilité ne partagent ni infrastructure (par exemple, alimentation, système de refroidissement), ni réseau de domaine de disponibilité interne. Par conséquent, une panne sur un domaine de disponibilité ne doit pas affecter les autres domaines de disponibilité de la région.

  • Domaine de pannes

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

  • Réseau cloud virtuel (VCN) et sous-réseaux

    Un VCN est un réseau personnalisable défini par logiciel que vous configurez dans une région Oracle Cloud Infrastructure. Comme les réseaux de centre de données traditionnels, les réseaux cloud virtuels vous donnent le contrôle sur l'environnement réseau. Un réseau cloud virtuel peut comporter plusieurs blocs CIDR qui ne se chevauchent pas et que vous pouvez modifier après l'avoir créé. Vous pouvez segmenter un réseau cloud virtuel en plusieurs sous-réseaux ciblant une région ou un domaine de disponibilité. Chaque sous-réseau est composé d'une plage contiguë d'adresses qui ne chevauchent pas celles des autres sous-réseaux du réseau cloud 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 indiquent 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 un accès à partir d'un VCN à d'autres services, tels qu'Oracle NoSQL Database Cloud Service. Le trafic du VCN vers le service Oracle traverse la structure du réseau Oracle et ne traverse jamais Internet.

  • Passerelle Internet

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

  • API Gateway

    Oracle API Gateway vous permet de publier des API avec des adresses privées accessibles à partir de votre réseau. Si nécessaire, vous pouvez les rendre visibles sur le réseau Internet public. Les adresses prennent en charge la validation d'API, la transformation des demandes et des réponses, CORS, l'authentification et l'autorisation, ainsi que la limitation des demandes.

  • Identity and Access Management (IAM)

    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 au sein du domaine d'identité. Chaque domaine d'identité OCI IAM représente une solution autonome de gestion des identités et des accès ou une population d'utilisateurs différente.

  • Stratégies

    Une stratégie Oracle Cloud Infrastructure Identity and Access Management indique qui peut accéder à quelles ressources et comment. L'accès est accordé au niveau d'un groupe et d'un compartiment, ce qui signifie que vous pouvez écrire une stratégie qui offre à un groupe un type d'accès spécifique dans un compartiment donné ou dans la location.

  • NoSQL Base de données

    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 clé-valeur, en offrant des temps de réponse prévisibles à un seul chiffre, de l'ordre de la milliseconde, avec réplication des données pour une haute disponibilité. Le service propose des transactions ACID, une évolutivité sans serveur, une sécurité complète et un faible paiement à l'utilisation pour les modes de capacité à la demande et provisionnée, avec une compatibilité de 100 % avec Oracle NoSQL Database on-premise.

  • Service de conteneurs Oracle Cloud Infrastructure

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

  • OCI Kubernetes Engine

    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 en conteneur vers le cloud. Indiquez les ressources de calcul requises par vos applications et Kubernetes Engine les provisionne sur Oracle Cloud Infrastructure dans une location existante. OKE utilise Kubernetes pour automatiser le déploiement, le redimensionnement et la gestion des applications en conteneur dans les clusters d'hôtes.

Recommandations

Utilisez les recommandations suivantes comme point de départ. Vos exigences peuvent être différentes de l'architecture décrite ici.
  • API Gateway

    API Gateway peut être utilisé pour fournir un niveau initial de filtrage et de contrôles d'utilisation, tels que :

    • Authentification et autorisation de service
    • Contrôles de service tels que la limitation de débit
    • Capture d'analyses d'utilisation du service

    La passerelle d'API (et non le pare-feu ou l'équilibreur de charge) doit effectuer un routage tenant compte de la solution afin que toutes les adresses qui ne sont pas satisfaites par les fonctionnalités GraphQL puissent être dirigées vers le bon emplacement. Il convient d'envisager des limites de taux raisonnables, en fonction de la capacité de performances maximale prise en charge par les solutions back-end, ainsi que des droits maximaux d'un utilisateur de service.

Points à prendre en compte

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

  • Sécurité

    Vous devez vous occuper de la sécurité au niveau de l'application sur API Gateway. Vous pouvez traiter une sécurité spécifique GraphQL affinée (par exemple, l'accès au niveau de l'attribut) à l'aide de 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 cet atelier en direct :

En savoir plus

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

Consultez les ressources supplémentaires suivantes :

Ressources Oracle Cloud Infrastructure :

Accusés de réception

Auteurs :

  • Dario Vega
  • Michael Brey