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
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
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.
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
- Allez à GitHub.
- Clonez ou téléchargez le référentiel sur votre ordinateur local.
- Suivez les instructions du document
README
.
Journal des modifications
Ce journal répertorie les modifications importantes :
Juin 14, 2024 | Le nom de Graal Cloud Native a été mis à jour à Graal Development Kit for Micronaut dans le premier principe de conception. |
21 septembre 2023 | Ajout d'un sujet de déploiement avec un lien vers l'exemple de référentiel de l'application GitHub. |
Juillet 11, 2023 | Ajout de Graal Cloud Native et retrait de Micronaut du premier principe de conception. |
Octobre 28, 2022 |
|
Mars 24, 2022 |
|