Aperçu du modèle

Créez votre application Web ou mobile en tant qu'ensemble de microservices pouvant être testés, déployés et détenus indépendamment par différentes équipes d'application. Exposer les services en tant qu'API REST et communiquer avec d'autres microservices à l'aide d'API.

Les exigences les plus importantes pour une application Web ou mobile sont les suivantes :

  • Il doit prendre en charge une gamme de clients, tels que les navigateurs et les appareils mobiles
  • Il doit être sécurisé
  • Il doit fournir une disponibilité 24/7/365
  • Il doit évoluer pour répondre aux pics de demande
  • Il doit gérer une faible latence réseau
  • Il ne doit pas avoir de temps d'arrêt lorsqu'il est mis à jour ou modifié

Oracle Cloud Infrastructure (OCI) fournit une infrastructure évolutive, sécurisée, fiable et hautement performante pour les applications Web et mobiles les plus exigeantes. Ce document présente les principes de conception d'une application Web ou mobile et les architectures de référence basées sur ces principes.

Principes de conception

Utiliser des structures open source légères et des langages de programmation matures

Utilisez Graal Development Kit for Micronaut, ou Helidon, pour créer votre application. Les deux fournissent des fonctionnalités telles que la journalisation, la télémétrie, la sécurité et la configuration, ainsi que des modèles courants tels que la création d'API REST.

Utilisez Java : un langage portable indépendant de la plate-forme avec un riche ensemble de bibliothèques utilisées par des millions de développeurs pour créer des applications évolutives, résilientes et sécurisées.

Créer des applications en tant que services qui communiquent à l'aide d'API

Créez votre application sous la forme d'un ensemble de microservices qui peuvent être testés, déployés et détenus indépendamment par différentes équipes d'applications. Exposer des services ainsi que des API REST bien définies et communiquer avec d'autres services à l'aide de ces API. Utilisez OCI API Gateway comme point d'entrée unique pour tous les clients, puis acheminez les demandes d'API vers le service approprié.

Utilisez OCI Service Mesh pour simplifier et sécuriser la communication entre les services hébergés dans votre cluster Oracle Container Engine for Kubernetes (OKE). OCI Service Mesh vous permet également d'observer tout le trafic réseau entre vos services via les mesures et les journaux émis par son composant proxy qui s'exécute en tant que sidecar sur les pods d'application.

Automatiser la création, les tests et le déploiement

Fournissez du code fréquemment, puis déployez votre application de manière à minimiser les temps d'arrêt. Utilisez OCI DevOps pour établir un moyen cohérent et automatisé de développer, de créer, de packager, de tester et de déployer vos applications. Utilisez Oracle Cloud Infrastructure Resource Manager pour provisionner de manière fiable les éléments d'infrastructure tels que la passerelle d'API, les équilibreurs de charge, les bases de données, les clusters Kubernetes et d'autres services.

Utilisez des services entièrement gérés pour éliminer la complexité du développement d'applications, des exécutions et de la gestion des données

Utilisez des services entièrement gérés tels qu'Oracle Container Engine for Kubernetes (OKE), Oracle Cloud Infrastructure Object Storage et Oracle Autonomous Database : ces services optimisent la disponibilité et l'évolutivité pour répondre aux demandes changeantes de votre application. Un service entièrement géré garantit la disponibilité de votre application et la protège en cas de panne dans le centre de données hébergeant l'infrastructure de votre application.

Conserver le niveau d'application sans conservation de statut

Dans la mesure du possible, conservez les composants de niveau intermédiaire de votre application sans état. Si nécessaire, utilisez Oracle Autonomous Database pour stocker l'état de l'application à des fins de cohérence, de durabilité et de récupération rapide.

Utiliser des bases de données convergées avec une prise en charge complète de toutes les données

Votre application peut utiliser des données dans divers formats tels que tabulaire (relationnel), non structuré, XML, JSON, spatial ou graphique. Traditionnellement, cette variété exigeait un type de base de données différent pour chaque format de données, par exemple une base de données relationnelle pour les données relationnelles, une banque de documents pour les données non structurées ou une base de données graphique pour les données liées hiérarchiquement. Cependant, l'utilisation de plusieurs bases de données entraîne souvent une complexité opérationnelle supplémentaire et une incohérence des données. Au lieu de cela, utilisez un seul modèle Oracle Autonomous Database pour stocker, indexer et rechercher plusieurs types et formats de données.

Surveillance et traçage de bout en bout des instruments

Il est tentant pour les équipes de développement de développer leurs propres outils d'observabilité pour gagner en visibilité sur les services et les applications qu'elles possèdent. Votre application peut contenir des centaines de services, appartenant à différentes applications et équipes commerciales. Au lieu que chaque équipe crée ses propres outils, centralisez la solution à l'aide d'Oracle Cloud Observability and Management Platform : elle surveille toutes les couches de la pile entière pour trouver et résoudre les problèmes dans votre application.

Eliminer les points de défaillance uniques grâce à la réplication automatisée des données et à la récupération après défaillance

Votre application doit être résiliente, se remettre des pannes et minimiser les temps d'arrêt et les pertes de données. Éliminez un point de défaillance unique en implémentant la redondance de l'une des manières suivantes :

  • Dans OKE, configurez des pools de noeuds avec un minimum de trois noeuds, chaque noeud se trouvant dans un domaine de disponibilité distinct, dans une région de domaine de disponibilité multiple.
  • Dans une seule région de domaine de disponibilité, configurez des pools de noeuds dans OKE avec un minimum de trois noeuds, chaque noeud se trouvant dans un domaine de pannes distinct.
  • Utilisez un seul équilibreur de charge public et plusieurs équilibreurs de charge privés avec plusieurs contrôleurs entrants pour la redondance dans OKE.
  • Concevez une topologie pilote de récupération après sinistre pour redémarrer les applications et restaurer rapidement les charges de travail dans une région de secours en cas de sinistre dans la région principale où votre application est hébergée.
  • Configurez votre pipeline d'intégration continue et de déploiement continu pour déployer votre application vers une région de secours afin de procéder à une récupération en cas de panne de région.
  • Répliquez vos volumes de stockage de blocs d'une région à l'autre à l'aide de la réplication de volume de stockage de blocs et de la réplication de stockage d'objets.
  • Provisionnez l'infrastructure requise dans la région de secours à l'aide d'Oracle Cloud Infrastructure Resource Manager en cas de panne de la région principale.
  • Configurez Oracle Autonomous Database pour une disponibilité maximale à l'aide d'Autonomous Data Guard afin de minimiser les temps d'arrêt opérationnels et les pertes de données.

De plus, testez la résilience pour voir comment votre application se comporte dans des conditions anormales qui se produisent par intermittence. Par exemple, vous pouvez adopter le cadre Chaos Monkey pour tester le chaos. Utilisez également la limitation, les disjoncteurs et les mécanismes de nouvelle tentative pour implémenter une application résiliente.

Mettre en œuvre une approche de défense en profondeur pour sécuriser le cycle de vie des applications

Vous devez concevoir votre application avec une sécurité suffisante pour vous protéger contre les attaques d'entités malveillantes. Vérifiez votre application, votre code côté client et votre code tiers pour vérifier s'il existe un comportement suspect. Utilisez des règles de filtrage et configurez la protection DDoS à l'aide de Web Application Firewall (WAF) pour protéger votre application du trafic indésirable.

Stockez des informations sensibles telles que les mots de passe et les jetons d'authentification/d'autorisation dans Oracle Cloud Infrastructure Vault. Configurez le cryptage des clés secrètes Kubernetes dans etcd. Faites pivoter et définissez des durées de vie courtes sur les certificats que votre application utilise pour rendre plus difficile pour un attaquant d'usurper l'identité d'une entité de confiance.

Respectez le principe du moindre privilège pour vous assurer que les utilisateurs et les comptes de service ne disposent que du privilège minimal nécessaire pour effectuer leurs tâches. Contrôlez qui a accès à votre application et à ses composants à l'aide d'Oracle Cloud Infrastructure Identity and Access Management (IAM). Utilisez l'authentification à plusieurs facteurs dans IAM pour appliquer une authentification forte aux administrateurs afin de limiter l'accès à votre application et à ses composants.

Architecture

Ce modèle d'architecture est recommandé pour une application Web ou mobile composée de microservices déployés en tant que conteneurs dans un cluster Kubernetes sur OKE. La persistance des données est assurée à l'aide d'Oracle Autonomous Database. Les médias et les fichiers image de l'application sont stockés dans Object Storage.

Le diagramme suivant illustre cette architecture.



architecture-maf-web-mobile-oracle.zip

L'architecture comporte les composants suivants :

  • Web Application Firewall (WAF)

    WAF protège les applications du trafic Internet malveillant et indésirable. Il peut protéger toutes les adresses Internet, en assurant l'exécution cohérente des règles sur toutes vos applications.

  • Passerelle d'API Oracle Cloud Infrastructure

    OCI API Gateway est un service de passerelle d'API régionale entièrement géré qui fournit des adresses d'API RESTful protégées pour OKE et tout autre service ou adresse exécuté sur Oracle Cloud Infrastructure. Dans cette architecture, les demandes sont acheminées vers un équilibreur de charge privé qui les transmet à un service exécuté dans OKE.

  • Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)

    OCI IAM fournit une authentification multifacteur robuste, une connexion aux réseaux sociaux, une auto-inscription pour les utilisateurs finaux, une gestion des identités, une connexion unique et une gouvernance des identités pour les applications.

  • Load balancer

    Le service Load Balancing fournit une répartition de trafic automatisée à partir d'un point d'entrée unique vers plusieurs serveurs accessibles à partir de votre réseau cloud virtuel, tels que les noeuds OKE de microservices en conteneur dans l'architecture

  • Oracle Autonomous Database

    Oracle Autonomous Database est un environnement de base de données entièrement géré qui évolue de manière élastique, sur lequel les performances des requêtes sont excellentes et qui ne nécessite pas d'administration. Vous n'avez pas à configurer ni à gérer du matériel, ni à installer de logiciel.

  • Object Storage

    Object Storage fournit un accès rapide à de grandes quantités de données, structurées ou non, de tout type de contenu, y compris des sauvegardes de base de données, des données analytiques et du contenu enrichi tel que des images et des vidéos. Utilisez le stockage standard pour le stockage à chaud auquel vous devez accéder rapidement, immédiatement et fréquemment. Utilisez le stockage d'archive pour le stockage à froid que vous conservez pendant de longues périodes et auquel vous accédez rarement.

    Dans cette architecture, les ressources multimédias de l'application sont stockées dans Object Storage dans un bucket de la classe de stockage standard.

  • Container Engine for Kubernetes (OKE)

    OKE est un service entièrement géré, évolutif et hautement disponible permettant de déployer vos applications en conteneur vers le cloud. Vous indiquez les ressources de calcul dont vos applications ont besoin et OKE les provisionne sur OCI dans une location existante. Container Engine utilise Kubernetes pour automatiser le déploiement, la mise à l'échelle et la gestion des applications en conteneur sur des clusters d'hôtes.

  • Service mesh

    Oracle Cloud Infrastructure (OCI) Service Mesh est une couche d'infrastructure d'application gérée par OCI pour la communication de service à service. Il rationalise le développement et le déploiement d'applications cloud natives en définissant des normes d'observabilité, de sécurité et de gestion du trafic. Service Mesh est implémenté sous la forme d'un ensemble de proxies légers déployés dans les pods des clients avec le code de l'application sans que l'application n'en ait besoin.

Alternatives

L'utilisation de microservices n'est pas le seul moyen de créer des applications mobiles ou Web. Ce modèle d'architecture alternatif présente une topologie à trois niveaux composée d'un équilibreur de charge, d'un niveau d'application/Web de redimensionnement automatique et d'une base de données hautement disponible.

Toutes les ressources sont déployées dans un seul domaine de disponibilité dans une région OCI. Les niveaux sont isolés dans des sous-réseaux distincts dans un seul réseau cloud virtuel (VCN). Les listes de sécurité servent de pare-feu pour réguler le trafic réseau vers et depuis les ressources de chaque niveau. Une table de routage attachée à chaque sous-réseau contient des règles pour diriger le trafic vers des destinations en dehors du VCN.

D'autres architectures alternatives telles que l'architecture monopage, les applications Web progressives (PWA) ou JAMStack peuvent être envisagées, mais ne sont pas affichées ici.

Le diagramme suivant illustre cette autre architecture.



architecture-maf-web-mobile-alternative-oracle.zip

Exemple de cas d'emploi

Ce cas d'utilisation décrit un système de commande client pour un magasin qui vend des GPU en ligne.

Le diagramme suivant illustre l'architecture de ce cas d'utilisation.



architecture-maf-web-mobile-exemple-oracle.zip

Le trafic du réseau Internet public est acheminé par le service DNS via un pare-feu d'application Web (WAF) vers une passerelle Internet, qui transfère les demandes entrantes vers un microservice entrant (Nginx) via l'équilibreur de charge. L'application est composée d'un service frontal, d'un service de commandes, d'un service de messagerie et d'un service d'inventaire. Tous ces services sont mis en conteneur et se trouvent dans le cluster OKE. Chacun de ces services expose ses interfaces à l'aide d'API REST. Les données sont stockées dans des bases de données autonomes.

Le client passe une commande de GPU à l'aide du service frontal à partir d'une application Web ou d'une application sur un appareil mobile. Le service Orders et le service Inventory communiquent entre eux à l'aide du service de messagerie open source NATS. Le service Orders lit et écrit les données de commande dans la base de données pluggable Orders. Le service Inventory lit et écrit les données d'inventaire dans la base de données pluggable Inventory. Le service Commandes envoie une notification à l'aide du service Notifications afin que le client puisse être informé du statut de la commande par e-mail ou Slack. Le client peut extraire le statut de la commande du front-end, qui recherche la commande à l'aide de l'API REST pour le service Orders.

Déployez

Universal Health Organization (UHO) est un exemple d'application qui respecte les principes du Modern App Development Framework. En particulier, il implémente des éléments des modèles d'architecture Web ou mobile, de messagerie et orientée événements et est disponible sur GitHub.
  1. Accédez à GitHub.
  2. Clonez ou téléchargez le référentiel sur votre ordinateur local.
  3. Suivez les instructions du document README.

Modifier le journal

Ce journal répertorie les modifications importantes :

Remerciements

  • Auteurs : Raghavendra Prasad, Sajan Parihar
  • Contributeurs : Hassan Ajan, Matthias Brantner, James Emerson, Harshad Kasture, Parvez Syed Mohamed, Jeff Schering, Joshua Stanley