Aperçu du modèle

Créez votre application Web ou mobile en tant que jeu de microservices pouvant être testés, déployés et détenus de façon indépendante par différentes équipes d'applications. Présenter 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 :

  • 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 latence de réseau faible
  • Il ne doit y avoir aucun temps d'arrêt lors de la mise à jour ou de la modification

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 pour concevoir une application Web ou mobile, et des architectures de référence basées sur ces principes.

Principes de conception

Utiliser des frameworks open source légers et des langages de programmation matures

Utilisez la trousse SDK pour Micronaut ou Helidon pour créer votre application. Les deux fournissent des fonctions 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 et doté d'un ensemble riche 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 en tant que jeu de microservices pouvant être testés, déployés et détenus de manière indépendante par différentes équipes d'applications. Présenter les services ainsi que les API REST bien définies et communiquer avec d'autres services à l'aide de ces API. Utilisez la passerelle d'API OCI comme point d'entrée unique pour tous les clients, puis acheminez les demandes d'API vers le service approprié.

Utilisez le maillage de services OCI pour simplifier et sécuriser la communication entre les services hébergés dans votre grappe Oracle Container Engine for Kubernetes (OKE). Le maillage de services OCI vous permet également d'observer tout le trafic réseau entre vos services au moyen des mesures et des journaux émis par son composant mandataire qui s'exécute en tant que side-car 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 à réduire les temps d'arrêt. Utilisez OCI DevOps pour établir un moyen cohérent et automatisé de développer, de créer, d'emballer, de tester et de déployer vos applications. Utilisez Oracle Cloud Infrastructure Resource Manager pour provisionner de manière fiable vos éléments d'infrastructure tels que le service de passerelle d'API, les équilibreurs de charge, les bases de données, les grappes Kubernetes et d'autres services.

Utiliser des services entièrement gérés pour éliminer la complexité du développement d'applications, des exécutions et de la gestion de 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 maximisent la disponibilité et l'évolutivité pour répondre aux demandes changeantes de votre application. Un service entièrement géré assure la disponibilité de votre application et la protège en cas de défaillance du centre de données hébergeant l'infrastructure de votre application.

Conserver le niveau d'application sans état

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 prise en charge complète de toutes les données

Votre application peut utiliser des données dans divers formats, tels que tabulaire (relatif), non structuré, XML, JSON, spatial ou graphique. Traditionnellement, cette variété nécessitait 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, un magasin de documents pour les données non structurées ou une base de données graphique pour les données liées hiérarchiques. Cependant, l'utilisation de plusieurs bases de données entraîne souvent une complexité opérationnelle et des incohérences de données supplémentaires. Utilisez plutôt une seule base de données multimodèle Oracle Autonomous Database pour stocker, indexer et rechercher plusieurs types et formats de données.

Instrument - Surveillance et traçage de bout en bout

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

Éliminer le point de défaillance unique au moyen de la réplication et de la récupération automatisées des données

Votre application doit être résiliente, vous remettre des pannes et réduire les temps d'arrêt et la perte de données. Éliminez un point de défaillance unique en mettant en oeuvre la redondance des façons suivantes :

  • Dans OKE, configurez des groupes de noeuds avec un minimum de trois noeuds, chaque noeud étant dans un domaine de disponibilité distinct, dans une région comportant plusieurs domaines de disponibilité.
  • Dans une seule région de domaine de disponibilité, configurez des groupes de noeuds dans OKE avec un minimum de trois noeuds, chaque noeud étant dans un domaine d'erreur distinct.
  • Utilisez un seul équilibreur de charge public et plusieurs équilibreurs de charge privés avec plusieurs contrôleurs de trafic entrant à des fins de redondance dans OKE.
  • Concevez une topologie de récupération après sinistre pilote pour redémarrer les applications et restaurer rapidement les charges de travail dans une région de secours si un sinistre frappe la région principale où votre application est hébergée.
  • Configurez votre pipeline d'intégration continue/développement continu pour déployer votre application dans une région de secours afin de procéder à une récupération en cas de défaillance de la région.
  • Répliquez vos volumes de stockage par blocs entre les régions à l'aide de la réplication de volume de stockage par 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 d'échec de la région principale.
  • Configurez Oracle Autonomous Database pour une disponibilité maximale à l'aide d'Autonomous Data Guard afin de réduire 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 les tests de chaos. Utilisez également des mécanismes de limitation, de disjoncteurs et 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 de l'application

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, le code côté client et le code de tierce partie pour détecter tout comportement suspect. Utilisez des règles de filtrage et configurez la protection DDoS à l'aide du pare-feu d'application Web (WAF) pour protéger votre application contre le trafic indésirable.

Stockez les informations sensibles telles que les mots de passe et les jetons d'authentification/d'autorisation dans Oracle Cloud Infrastructure Vault. Configurer le chiffrement des clés secrètes Kubernetes dans etcd. Effectuez une rotation et définissez des durées de vie courtes sur les certificats utilisés par votre application pour qu'il soit plus difficile pour un attaquant d'emprunter l'identité d'une entité approuvée.

Suivez le principe du privilège minimal pour vous assurer que les utilisateurs et les comptes de service n'ont que le privilège minimal nécessaire pour effectuer leurs tâches. Contrôlez qui a accès à votre application et à ses composants à l'aide du service Oracle Cloud Infrastructure Identity and Access Management (IAM). Utilisez l'authentification multifacteur dans IAM pour appliquer une authentification forte aux administrateurs afin de restreindre 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 une grappe Kubernetes sur OKE. La persistance des données est assurée à l'aide d'Oracle Autonomous Database. Les fichiers multimédias et d'image de l'application sont stockés dans le stockage d'objets.

Le diagramme suivant présente cette architecture.



architecture-maf-web-mobile-oracle.zip

L'architecture comprend les composants suivants :

  • Web Application Firewall (WAF)

    Le service WAF protège les applications contre le trafic Internet malveillant ou indésirable. Il peut protéger tout point d'extrémité accessible sur Internet en appliquant uniformément des règles à toutes vos applications.

  • Passerelle d'API d'Oracle Cloud Infrastructure

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

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

    OCI IAM offre une authentification multifacteur robuste, une connexion sociale, une auto-inscription pour les utilisateurs finaux, une gestion des identités, une authentification unique et une gouvernance des identités pour les applications.

  • Load balancer

    Le service d'équilibrage de charge assure la répartition automatique du trafic d'un seul point d'entrée vers de multiples serveurs accessibles à partir de votre réseau en nuage virtuel, tels que les noeuds OKE des microservices conteneurisés dans l'architecture

  • Oracle Autonomous Database

    Oracle Autonomous Database est un environnement de base de données entièrement géré qui s'adapte de manière élastique, permet des interrogations rapides et ne nécessite aucune administration. Vous n'avez pas besoin de configurer ou de gérer du matériel ni d'installer de logiciel.

  • Object storage

    Le service de stockage d'objets offre un accès rapide à de grandes quantités de données structurées et non structurées de tous types, notamment des sauvegardes de base de données, des données analytiques et du contenu enrichi, comme 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'archives pour le stockage à froid que vous retenez 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 le stockage d'objets dans un seau de la classe de stockage standard.

  • Container Engine pour Kubernetes (OKE)

    OKE est un service entièrement géré, évolutif et hautement disponible pour déployer vos applications conteneurisées dans le nuage. Vous spécifiez 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, l'évolutivité et la gestion des applications en conteneur dans des grappes d'hôtes.

  • Service mesh

    Le maillage de services Oracle Cloud Infrastructure (OCI) est une couche d'infrastructure d'application gérée par OCI pour la communication entre services. La solution simplifie le développement et le déploiement d'applications natives en nuage en définissant des normes pour l'observabilité, la sécurité et la gestion du trafic. Le maillage de services est implémenté sous la forme d'un ensemble de mandataires légers déployés dans les pods des clients parallèlement au code d'application sans que l'application en ait connaissance.

Alternatives

L'utilisation de microservices n'est pas la seule façon de créer des applications mobiles ou Web. Ce modèle d'architecture alternative présente une topologie à trois niveaux composée d'un équilibreur de charge, d'un niveau d'application/Web d'ajustement 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 en nuage 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 mono-page, 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'utilisation

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

Le diagramme suivant présente l'architecture de ce cas d'utilisation.



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

Le trafic à partir de l'Internet public est acheminé par le service DNS au moyen d'un pare-feu d'application Web (WAF) vers une passerelle Internet, qui transmet les demandes entrantes à un microservice entrant (Nginx) au moyen de l'équilibreur de charge. L'application est composée d'un service frontal, d'un service de commande, d'un service de messagerie et d'un service d'inventaire. Tous ces services sont conteneurisés et se trouvent dans la grappe 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 enfichable Orders (PDB). Le service Inventory lit et écrit les données d'inventaire dans la base de données enfichable Inventory. Le service Orders 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 de la partie frontale, qui consulte la commande à l'aide de l'API REST pour le service Commandes.

Déployez

Universal Health Organization (UHO) est un exemple d'application qui respecte les principes du cadre de développement d'applications moderne. En particulier, il met en œuvre des éléments des modèles d'architecture Web ou Mobile, Messaging et Event-driven et est disponible sur GitHub.
  1. Allez à GitHub.
  2. Clonez ou téléchargez le référentiel sur votre ordinateur local.
  3. Suivez les instructions du document README.

Informations complémentaires

Pour en savoir plus sur les ressources connexes.

Journal des modifications

Ce journal répertorie les modifications importantes :

Confirmation

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