Les bonnes pratiques qui régissent les architectures d'application.
Tout ouvrir Tout fermer
Présentation
Les langages et frameworks de programmation que vous adoptez pour créer votre application jouent un rôle crucial dans le succès de sa livraison et de sa maintenance au fil du temps. Les choix du langage et du framework ont des répercussions à long terme sur la façon dont vous faites évoluer votre entreprise, exploitez vos applications et offrez des fonctionnalités de haute qualité à vos clients. Les modifications apportées à la langue ou à la structure sont généralement coûteuses. La prise en charge d'écosystèmes parallèles de plusieurs langages et frameworks augmente la complexité et réduit l'agilité.
Le choix d'une langue et d'un framework a des répercussions sur divers éléments, tels que la vitesse de livraison, la stabilité et la vigueur de l'écosystème existant, la préparation opérationnelle et les performances de production. Utilisez des plateformes low-code autant que possible afin de vous concentrer sur la résolution des problèmes de votre entreprise au lieu de faire face aux complications du développement traditionnel. Si les exigences de votre application sont plus complexes, choisissez des langages matures et des frameworks légers.
Détails des principes
Les plateformes low-code vous permettent de créer, tester et déployer des applications d'entreprise plus rapidement que le codage manuel traditionnel. Ces plateformes conviennent bien à la création d'applications opportunistes en collaboration avec les parties prenantes de l'entreprise, ainsi que d'applications de reporting et d'analyse des données. Les plateformes low-code vous permettent également d'étendre les applications SaaS et de moderniser les applications héritées. Cette approche vous aide à éviter les problèmes complexes lorsque vous souhaitez ajouter de nouvelles fonctionnalités, telles que la visualisation des données, la collecte des données, l'analyse des données, la sécurité, l'accessibilité, les performances et la globalisation. Une plateforme low-code réduit considérablement ces problèmes ainsi que la quantité de code que vous devez maintenir.
Toutefois, si votre application a des exigences plus poussées, choisissez un langage de programmation mature avec un framework léger. Lorsque vous choisissez un langage de programmation, sélectionnez-en un qui vous procure des avantages clés tels que :
Les langues plus récentes ont généralement un taux de changement plus élevé dans leur conception linguistique et dans l'écosystème et les bibliothèques correspondants. Un taux de changement plus élevé signifie qu'il est plus difficile d'évaluer le risque et plus coûteux d'effectuer des changements ultérieurs.
Choisissez un framework open source. Les frameworks open source font l'objet d'un examen constant par les pairs, ce qui signifie que les fonctionnalités sont proches de ce que la plupart des développeurs attendent, car ils contribuent à la création et à la maintenance des frameworks. Les bugs sont détectés et corrigés rapidement. Sélectionnez également un framework léger qui consomme peu de ressources (processeur, mémoire, bande passante réseau ou descripteurs de fichier).
Utilisez des frameworks d’application qui permettent d’améliorer l’orientation des tâches (logique métier par rapport au modèle standard et à l'échafaudage) tout en préservant la flexibilité (vous permettant de prendre en charge les besoins actuels et futurs en fonctionnalités). Adoptez un framework qui fournit des valeurs par défaut raisonnables et peu controversées faciles à utiliser pour les fonctionnalités courantes telles que la journalisation, la télémétrie, la sécurité, la configuration et les modèles communs, tels que la création d'API REST.
Recommandations Oracle
Oracle APEX est une plateforme low-code qui fournit des composants de haut niveau, tels que des formulaires, des graphiques et des widgets d'interface utilisateur. APEX fournit également des modèles de conception courants via un environnement de développement graphique intuitif. Les applications développées à l'aide d'APEX peuvent accéder à des données locales via SQL et s'intégrer à des services externes à l'aide d'API REST. En outre, vous pouvez publier les fonctionnalités que vous développez dans APEX en tant qu'API REST pour une utilisation externe.
Si une plateforme low-code ne convient pas pour votre application, adoptez Java comme langage de programmation. Java offre un ensemble de fonctionnalités stable et large pour les cas d’utilisation d’applications les plus courants et offre un écosystème sain de bibliothèques et structures fiables et stables pour le développement d’applications modernes. L'accent mis par Java sur la simplicité et la lisibilité, associée à son excellent support pour les outils de développement, y compris les outils d'analyse statique et les structures de test, réduit les coûts de maintenance logicielle et les risques de bugs dans les applications de production.
Utilisez GraalVM pour développer et exécuter votre application. GraalVM est une distribution JDK qui associe la stabilité de Java aux meilleures performances de sa catégorie grâce à l’optimisation dynamique de l’exécution, à l’application fréquente et proactive de correctifs de vulnérabilités de sécurité, ainsi qu’à l’analyse des performances à faible coût et aux outils de diagnostic tels que Java Flight Recorder.
Créez des applications avec une approche donnant la priorité aux API en utilisant Graal Development Kit for Micronaut ou le framework Helidon. Ces deux approches fournissent des fondations qui réduisent considérablement le temps de livraison de vos applications et des modèles faciles à utiliser pour les cas d'utilisation courants tels que les API REST, sur la base d'un ensemble de choix de framework simples et peu controversés pour les activités courantes telles que la journalisation, la télémétrie et le stockage. Par ailleurs, les deux approches prennent en charge des services à hautes performances grâce à la prise en charge des E/S non bloquantes avec des API réactives idiomatiques et une faible latence grâce à la prise en charge des bibliothèques réseau à hautes performances.
Helidon et GDK prennent tous deux en charge les images natives GraalVM, ce qui vous permet de créer des applications compactes et économes en mémoire.
Aperçu
Divisez les fonctionnalités ou les tâches de votre application en services indépendants peu couplés qui fonctionnent ensemble. Concevez chaque service avec une portée fonctionnelle limitée axée sur une fonctionnalité. Par rapport à une architecture monolithique traditionnelle, cette approche améliore la maintenance des applications, le développement des fonctionnalités, les tests, le déploiement et l'évolutivité.
Adoptez une approche de conception d'API REST axée sur le contrat pour fournir des interfaces claires et compréhensibles de communication avec et entre les services. Un contrat d'API fournit le mécanisme nécessaire afin que les équipes puissent collaborer et utiliser des fonctionnalités sans dépendre des détails internes de l'implémentation d'un service. Par exemple, un service peut être entièrement détenu par une équipe de développement qui peut s'améliorer librement sur l'implémentation sans avoir à coordonner les dépendances de code avec d'autres équipes de développeurs.
Détails du principe
Commencez par une approche axée sur le contrat en spécifiant l'API REST d'un service. Préparez ensuite une implémentation de l'API pour permettre à vos parties prenantes, par exemple les équipes qui l'utiliseront, de l'essayer. Lorsque tout le monde s'accorde sur les détails de l'API, des équipes indépendantes peuvent travailler en parallèle pour implémenter le service et les autres services qui l'utiliseront.
Définissez les règles appliquées pour la sécurité et les contrats de niveau de service au début du cycle de vie du produit afin que tous les aspects du contrat de service soient clairs.
Traitez votre spécification d'API comme du code et gérez-la dans un système de contrôle de version avec votre code source et vos configurations de stratégie.
Recommandations d'Oracle
Indiquez votre API en utilisant le format indépendant de l'implémentation OpenAPI et stockez cette spécification dans un dépôt fourni parOracle Cloud Infrastructure (OCI) DevOps.
Implémentez vos services à l'aide d'une approche open source légère, telle que Graal Development Kit for Micronaut (GDK) ou Helidon.
Déployez vos services sur des plateformes sans serveur, telles qu'Oracle Container Engine for Kubernetes ou Oracle Functions, pour faciliter le déploiement, l'évolutivité et la rentabilité.
Utilisez Oracle Cloud Infrastructure API Gateway pour créer des adresses privées ou publiques protégées et régies à partir de la spécification d'API.
Utilisez Oracle Cloud Infrastructure Service Mesh pour simplifier et sécuriser la communication entre les services hébergés dans votre cluster Oracle Container Engine for Kubernetes. 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 marge sur les pods d'application.
Présentation
Un package de conteneur code et ses dépendances comme une seule unité, de sorte qu'une application s'exécute rapidement et de manière fiable dans plusieurs environnements informatiques. Une image de conteneur est un fichier qui, lorsqu'il est exécuté, crée et démarre un conteneur dans un environnement informatique.
Par rapport aux machines virtuelles traditionnelles, les conteneurs sont plus petits, nécessitent moins de ressources et accélèrent les heures de démarrage. Ils sont également indépendants de la plateforme et permettent d’exécuter des applications n’importe où. Pour profiter de ces avantages, décomposez vos applications en services qui exécutent chacune des fonctions métier distinctes et rassemblez-les dans un conteneur. Pour les anciennes applications, remplacez progressivement chaque fonction existante de votre application par un service conteneurisé jusqu'à ce que l'ensemble de l'application soit refactorisé.
Détails de principe
Le regroupement du code d'application et des dépendances en une seule unité exécutable (image de conteneur) signifie qu'un conteneur est extrêmement portable. En combinant cette portabilité avec l’abstraction de l’infrastructure, les conteneurs assurent la cohérence opérationnelle de votre application. Que votre application s'exécute sur site sur un serveur physique ou dans le cloud sur une machine virtuelle, elle produit les mêmes résultats à chaque fois.
Grâce à cette reproductibilité et à cette prévisibilité constantes, les conteneurs simplifient les processus DevOps et permettent à vos équipes de développement de déployer vos applications plus rapidement. Étant donné qu'ils assurent l'isolement au niveau des processus et qu'ils sont remplacés fréquemment, les conteneurs simplifient et accélèrent les processus associés à la correction des vulnérabilités logicielles. La décomposition des applications en services conteneur modulaires les rend également très robustes. Une erreur ou un échec dans un service individuel n'entraîne pas l'arrêt de votre application dans son intégralité. Vous pouvez mettre à jour ou corriger chaque service indépendamment du reste de l'application.
Contrairement à une machine virtuelle, un conteneur n'est pas fourni avec un système d'exploitation qui lui est propre ; il partage le système d'exploitation de son hôte. Par conséquent, les conteneurs sont de plus petite taille et plus rapides à démarrer que les machines virtuelles. La plupart des images de conteneur ont une taille de dizaines de mégaoctets par rapport aux machines virtuelles pouvant être de plusieurs gigaoctets, et leur heure de début est exprimée en secondes au lieu des minutes nécessaires au démarrage des machines virtuelles.
Le meilleur moyen d'exécuter et de dimensionner vos applications avec des services modularisés dans des conteneurs consiste à déployer un seul service par conteneur. Cette approche isole les services les uns des autres, ce qui élimine les temps d’arrêt et permet une évolutivité indépendante pour chaque service.
Bien que vous puissiez déployer des conteneurs manuellement, il est préférable d'utiliser un logiciel de gestion de conteneurs qui s'intègre à vos outils d'intégration continue et de déploiement continu.
Recommandations Oracle
Utilisez Oracle Cloud Infrastructure Registry (Container Registry) pour stocker vos images de conteneur et Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) pour exécuter et gérer vos conteneurs. Ces services entièrement gérés sont étroitement intégrés aux fonctionnalités de la plateforme OCI, sont disponibles dans toutes les régions Oracle Cloud et respectent des normes réglementaires telles que PCI, ISO, SOC, HIPAA et FedRAMP.
Outre le stockage d'images de conteneur dans Container Registry, vous pouvez stocker des listes de manifestes, parfois appelées images multiarchitectures, pour prendre en charge plusieurs architectures, telles que ARM et AMD64. Pour identifier et atténuer les failles de sécurité potentielles, activez l'analyse pour toutes les images chargées vers Container Registry. Vous devez également signer vos images de conteneur pour vous assurer que seules les images autorisées et sécurisées sont déployées sur OKE.
Présentation
L'intégration continue et le déploiement continu (CI/CD) sont des outils et des procédures que les équipes de développement utilisent pour apporter fréquemment et de manière fiable des modifications de code. Les bonnes pratiques CI/CD comprennent la révision du code, des conseils pour les tests unitaires, les tests d’intégration, les contrôles de code, le dépôt de tickets et le déploiement d’applications dans des environnements de développement et de test.
L'intégration continue consiste en une pratique dans laquelle les développeurs intègrent fréquemment leurs modifications de code dans la branche principale d'un dépôt partagé. Les modifications des développeurs sont validées par la création d'une compilation, puis par l'exécution de tests automatisés. Ces tests garantissent que votre application fonctionne toujours correctement lorsque de nouvelles modifications sont intégrées dans la branche principale.
Les avantages de l'intégration continue sont les suivants :
La livraison continue va plus loin que l'intégration continue. Après les tests, une compilation est automatiquement fournie à un environnement de test et/ou de production. L'objectif de la livraison continue est de toujours disposer d'une base de code prête pour le déploiement dans un environnement de production client.
Les avantages supplémentaires de la livraison continue sont les suivants :
Le déploiement continu va plus loin que la livraison continue ; chaque modification qui réussit tous les tests est déployée automatiquement dans votre environnement de production client. Aucune intervention humaine n'est nécessaire ; seul un test ayant échoué peut empêcher le déploiement d'une nouvelle modification en production. Sans intervention humaine, le déploiement continu dépend fortement de la qualité des tests.
Les avantages supplémentaires du déploiement continu sont les suivants :
L'intégration continue et le déploiement continu fournissent les bonnes pratiques pour stocker, intégrer, déployer et gérer du code afin d'automatiser la création de vos applications. Ces bonnes pratiques sont les suivantes :
Recommandations d'Oracle
Utilisez le service DevOps pour automatiser le déploiement de vos applications natives du cloud. Tout d'abord, stockez le code dans un référentiel de code DevOps et créez un branchement de version. Travaillez par petites étapes pour apporter des modifications au branchement de version et rapprochez quotidiennement les problèmes de branches afin de maintenir sa stabilité. Utilisez ensuite la fonctionnalité des déclencheurs dans le dépôt de code pour démarrer automatiquement un processus de compilation DevOps.
Utilisez un seul processus de compilation DevOps pour créer tous les artefacts associés au dépôt de code. Si la compilation échoue, configurez le processus de compilation pour qu'il attende l'approbation avant qu'elle soit terminée. La demande d'approbation doit être adressée à l'émetteur qui a déclenché la construction, et doit résoudre le problème par une nouvelle validation de code, puis approuver la fin de la construction. Pour des versions réussies, configurez le processus de construction afin de transmettre automatiquement les artefacts au service Oracle Cloud Infrastructure Artifacts Registry et de déclencher automatiquement un processus de déploiement DevOps.
Ajoutez Application Dependency Management pour détecter les vulnérabilités de sécurité (CVE) dans les dépendances d'application lors de la phase de développement dans un pipeline de développement OCI DevOps. Ainsi, vous pourrez détecter et corriger les CVE potentiels dès qu'ils seront connus.
Utilisez Resource Manager pour créer tous vos environnements d'infrastructure dans une zone de sécurité maximale afin de bénéficier automatiquement de la sécurité de déploiement. En utilisant Resource Manager, vous pouvez utiliser l’infrastructure en tant que code pour automatiser la création d’infrastructure dans toutes vos régions de manière cohérente. Vous pouvez ensuite configurer le processus de déploiement DevOps pour qu'il soit toujours déployé sur les ressources que vous avez créées dans la zone de sécurité.
Créez un pipeline de déploiement DevOps unique qui déploie tous les artefacts créés à partir d'un pipeline de création unique. Organisez les environnements de déploiement, tels que la région OCI, le domaine de disponibilité et le domaine de pannes. Configurez le processus à l'aide d'une stratégie de déploiement canary, continu ou bleu-vert. Configurez-le également pour déclencher automatiquement les tests. Activez OCI Monitoring et Application Performance Monitoring sur votre application et votre infrastructure pour détecter les problèmes.
Si aucun problème n'est détecté et que les tests sont terminés, configurez le pipeline de déploiement pour déployer automatiquement les artefacts vers l'environnement suivant dans la stratégie de déploiement jusqu'à ce que les artefacts soient entièrement déployés dans tous les environnements de production. Lors du déploiement dans l'environnement de production, configurez le pipeline de sorte qu'il se déploie dans tous les domaines de défaillance d'un domaine de disponibilité, un par un. Déployez sur un domaine de disponibilité à la fois dans une région avant de passer à la région suivante. Continuez à utiliser OCI Monitoring and Application Performance Monitoring sur l’application et l’infrastructure pour détecter rapidement les problèmes. Configurez des alertes et, si des mesures clés sont brusquement supprimées lors du déploiement, faites échouer automatiquement le déploiement et déclenchez un retour à la version précédente.
Présentation
Un service géré fournit des fonctionnalités spécifiques sans que vous ayez à effectuer des tâches de maintenance liées à l'optimisation des performances, de la disponibilité, de la mise à l'échelle, de la sécurité ou de la mise à niveau. Avec un service géré, vous pouvez vous consacrer plus de temps à fournir des fonctionnalités à vos clients plutôt qu'à gérer la complexité des opérations.
Un service OCI géré fournit un composant évolutif et sécurisé pour le développement natif du cloud. Utilisez les services gérés pour développer et exécuter votre application et stocker ses données. De plus, vous bénéficiez de meilleures solutions sans avoir besoin d’expertise dans chaque domaine pour créer et utiliser vos applications.
Détails du principe
Les services gérés vous permettent de créer des applications hautement disponibles, évolutives, agiles et performantes avec sécurité, conformité et résilience.
Les services gérés créent une abstraction pour la complexité des composants sous-jacents, ce qui facilite le stockage et l'extraction des données, ou la création et l'exécution de votre application. Ces services s'intègrent aux outils qui permettent la création, le test et le déploiement automatisés de votre application. Les services gérés améliorent la productivité et réduisent les délais de mise sur le marché.
Les services gérés centralisent et automatisent diverses tâches de gestion de l’infrastructure, éliminant les erreurs humaines et le besoin de compétences spécialisées. L'infrastructure sous-jacente est maintenue à jour et sécurisée tandis que les services vous permettent de surveiller et de suivre les modifications ou l'accès, ce qui garantit la confidentialité et l'intégrité de vos applications et données.
Les services gérés sont hautement disponibles et évolutifs, ce qui facilite la satisfaction des besoins de votre application et vous ne payez que pour ce que vous utilisez. Vous pouvez commencer à petite échelle et évoluer par la suite sans subir de dégradation des performances ou de la fiabilité.
Recommandations d'Oracle
Nous recommandons les services cloud suivants :
Ces services sont hautement disponibles, proposent des performances élevées et sont élastiques. Leur infrastructure sous-jacente est gérée et corrigée pour garantir la sécurité de votre application.
Présentation
L'état d'une application peut se composer de nombreux éléments, notamment des caches de données, des préférences d'un utilisateur, de la personnalisation, des messages échangés entre services, de la position dans un processus en plusieurs étapes, du déploiement d'application, de la configuration d'exécution et de la session d'un utilisateur (par exemple, la page visitée pour la dernière fois par un utilisateur ou la taille et les éléments du panier de l'utilisateur). La perte de l'état de votre application peut entraîner la disparition de données, un dysfonctionnement de votre application, une expérience utilisateur non optimale et parfois un échec complet de l'application.
Si vous stockez l'état de votre application sur des systèmes de fichiers locaux ou dans la mémoire d'un hôte unique, il se peut qu'il soit perdu si votre application subit des pannes, telles que des redémarrages ou des défaillances de disque localisées. Enregistrez plutôt l'état dans des magasins de persistance externes. Utilisez un minimum de magasins de persistance que possible, idéalement un seul, pour assurer la cohérence des données.
Détails du principe
Les éléments de l'état d'une application sont traditionnellement stockés en tant qu'artefacts multiples dans différents formats, tels que les objets sérialisés, les documents JSON ou XML ou les fichiers texte. Si ces éléments sont stockés dans plusieurs magasins de persistance, tels que des systèmes de fichiers externes, des banques de messages, des banques d'objets, plusieurs bases de données ou un stockage de blocs élastique, il est possible que les différents magasins de données ne soient pas synchronisés, ce qui entraînerait des incohérences d'état. Une application doit également implémenter des transactions, permettre des jointures et être idempotente pour garantir la cohérence des données lorsque l'état doit être mis à jour en tant qu'unité.
En éparpillant les éléments de l'état d'une application dans plusieurs magasins, le risque de vulnérabilités de sécurité augmente. Les opérations de cycle de vie, telles que l’ajout et la suppression de nœuds, l’application de correctifs, la sauvegarde et la récupération, ainsi que la réplication en cas de sinistre et de reprise, sont extrêmement complexes et nécessitent une attention particulière pour maintenir la cohérence de l’état entre les différents magasins.
Par conséquent, une meilleure approche consiste à stocker toutes les données d'état de votre application dans une seule base de données si possible. Les données restent cohérentes dans un seul magasin et sont plus faciles à gérer. Cette approche permet de remplacer les instances d'application. Cela est particulièrement utile avec les architectures, d'application modernes telles que les microservices élastiques ou les instances éphémères où une instance existe uniquement pour traiter une ou plusieurs demandes. L'ajout d'un noeud est simplifié car un nouveau noeud peut obtenir la dernière copie de l'état et la suppression d'un noeud n'entraîne pas la perte totale de l'état. Les correctifs peuvent être appliqués de manière non simultanée uniquement en remplaçant le ou les exécutable(s). Un nœud peut être restauré à partir de sauvegardes et obtenir l'état à partir de la base de données . L'état peut être répliqué de manière cohérente en tant qu'unité vers différentes régions pour la récupération après sinistre. Le fait d'avoir un état cohérent dans différentes régions peut garantir qu'il n'y aura aucun problème fonctionnel dans votre application après un basculement ou une permutation.
Recommandations d'Oracle
Si votre application utilise une base de données, utilisez la même base de données pour stocker son état. Une base de données offre une meilleure disponibilité, intégrité et sécurité que les autres solutions, telles que les fichiers ou les représentations en mémoire. Idéalement, utilisez une base de données multimodèle (qui peut stocker différents formats) pour stocker tous les éléments de l'état de votre application. Le recours à une base de données multimodèle au lieu de plusieurs banques de données à usage unique vous permet également d'atteindre et de maintenir facilement la cohérence entre tous les éléments de l'état de votre application. (Remarque : Bien qu'il soit permis de stocker l'état mis en cache dans l'application, l'application doit être conçue pour utiliser la base de données comme source d'informations et pouvoir recréer son état à partir de la base de données.) Oracle Database est l’idéal à cette fin. Il stocke différents formats et fournit des performances prévisibles. Par conséquent, le stockage de l'état de votre application ne dégrade pas les performances de votre application.
Si votre application n'utilise pas de base de données, utilisez d'autres magasins de persistance durable, tels qu'Oracle Cloud Infrastructure Object Storage, pour stocker l'état. Si l'état de l'application ne peut pas être conservé dans un magasin de données unique, concevez votre application pour stocker l'état dans plusieurs magasins de données qui peuvent être synchronisés et récupérés en tant qu'unité cohérente en cas d'échec.
Vous trouverez ci-dessous quelques suggestions concernant le stockage de l'état dans Oracle Database.
Présentation
Votre application peut utiliser les données sous différents formats, tels que les tableaux (relatifs), non structurés, XML, JSON, spatiaux ou de graphes. Traditionnellement, il fallait 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 de graphes pour les données liées hiérarchiquement. Toutefois, l'utilisation de plusieurs bases de données entraîne souvent davantage de complexité opérationnelle et d'incohérence des données. Utilisez plutôt une base de données multimodèle pour stocker, indexer et rechercher plusieurs types et formats de données.
Tirez parti des fonctionnalités de base de données pour simplifier la logique de votre application. Par exemple, utilisez SQL pour les requêtes, les jointures et les analyses, les transactions pour garantir la cohérence et l'isolement, et utilisez des algorithmes de machine learning et des fonctions d'analyse intégrés pour éviter les transferts de données inutiles. Pour protéger les données sensibles, utilisez les fonctionnalités de sécurité et le contrôle d'accès de la base de données, et utilisez la réplication pour améliorer la disponibilité, l'évolutivité et la résilience de vos applications.
Détails du principe
Utilisez une base de données multimodèle pour stocker différents types de données, tels que des documents JSON, des graphes de propriétés et des données relationnelles. Les bases de données multimodèles avancées offrent une prise en charge complète de tout type de données stockées dans la base. Vous pouvez stocker un nouveau document JSON, insérer des lignes relationnelles et mettre à jour un graphique de propriétés dans la même transaction ACID. Vous pouvez utiliser des instructions SQL pour effectuer des jointures, des filtres et des agrégations entre ces différents types de données, ce qui garantit la cohérence et la simultanéité élevées auxquelles vous êtes habitués à partir de bases de données relationnelles. En plus de proposer ce riche ensemble de fonctionnalités, les bases de données multimodèle peuvent également être utilisées en tant que banques de données à usage unique accessibles à l'aide d'API naturelles autres que SQL, telles que les API REST, les API de magasin de documents et les API de graphes.
La réutilisabilité constitue un avantage clé de l'utilisation d'une base de données multimodèle. Bien que les données puissent être de types et de formes différents, la technologie sous-jacente permettant de gérer ces données ne change pas. Nous n'avez donc pas besoin d'apprendre plusieurs technologies de base de données pour chaque type de données et de comprendre comment utiliser et régler chacune d'entre elles. Étant donné que vous conservez la même technologie, vous n'avez pas à réécrire le code de votre application. En outre, les bases de données multimodèle améliorent la résilience de votre application en réduisant la fragmentation des données, ce qui facilite les sauvegardes et la récupération.
Recommandations d'Oracle
Utilisez Oracle Autonomous Database, une base de données convergée et multimodèle, pour stocker, gérer et analyser toutes vos données. Facilitez la maintenance de votre application en utilisant des vues pour exposer les données dans des tables de sorte que le schéma sous-jacent puisse être modifié sans perturber le fonctionnement de vos applications existantes. Utilisez la redéfinition basée sur l'édition pour mettre à niveau votre application sans temps d'arrêt. Utilisez Oracle Data Safe pour implémenter et évaluer les contrôles de sécurité, masquer les données sensibles et auditer les accès aux données. Utilisez Oracle Data Guard comme cache de lecture hautement évolutif pour vos données et pour conserver une sauvegarde cohérente pour la reprise après sinistre.
Oracle Autonomous Database effectue des tâches opérationnelles sans incidence ni interruption sur le workload. Vous n'avez donc pas besoin d'ajouter de logique de compensation complexe à l'application pour gérer les scénarios de redimensionnement ou de basculement. La base de données gère les ressources telles que les processeurs et le stockage de manière indépendante et offre une évolutivité bidirectionnelle et élastique.
Présentation
Une requête d'un utilisateur peut suivre un chemin complexe sur les différents services ou microservices qui constituent une application moderne. Le suivi de bout en bout suit le parcours de chaque demande depuis sa source vers les profondeurs de votre infrastructure et vous aide à déboguer la cause principale d'un problème. Le suivi est généralement utilisé comme outil de diagnostic, avertissant vos développeurs lorsque votre application ne fonctionne pas comme prévu.
Les développeurs, administrateurs et responsables de la sécurité doivent disposer d'une compréhension fiable et opportune de l'état, des performances, de l'état opérationnel et des éventuels incidents de sécurité d'une application. Ils peuvent ainsi vérifier que la fonction et les performances d'une application répondent aux attentes au cours du cycle de vie des tests et de la production alors que le diagnostic des incidents et la récupération des applications sont rationalisés. La surveillance et le suivi complets de bout en bout doivent être simples à implémenter et à gérer sans ajouter de complexité à votre application.
Détails de principe
Votre application peut ne pas se comporter comme prévu de nombreuses façons. Par exemple, elle peut mal fonctionner ou simplement échouer complètement. Contrairement à une application monolithique traditionnelle, une application construite à partir de microservices présente des difficultés de diagnostic supplémentaires en raison de multiples interactions entre ses composants.
La fonction de trace est le meilleur moyen de comprendre rapidement ce qui arrive à la requête d'un utilisateur lorsqu'elle parcourt les microservices et d'autres composants, comme l'infrastructure, qui composent votre application. Utilisez le suivi de bout en bout pour collecter des données sur chaque requête de l'utilisateur, puis passez en revue les données pour voir où votre application peut rencontrer des goulets d'étranglement et des latences. Par exemple, une requête peut être transmise entre plusieurs microservices avant d'être exécutée. Sans un moyen de suivre l'ensemble du parcours d'une demande, il se révèle impossible de déterminer la cause première de son échec.
Le suivi est généralement bien plus dirigé, ce qui vous permet de mieux comprendre le comportement de votre application en l'équipant d'outils, puis en collectant, regroupant et analysant les mesures. Un suivi exhaustif permet également une intégration intelligente et automatisée avec des outils utilisés pour ajuster dynamiquement la capacité des ressources et coordonner les réponses aux événements inattendus.
Pour disposer d'une compréhension claire, précise et rapide de l'état opérationnel et de l'historique d'une application, il ne suffit pas seulement de mesurer l'expérience de l'utilisateur final. Vous devrez peut-être aussi vous conformer avec les législations régionales ou nationales, ce qui peut nécessiter de devoir générer, à la demande, des rapports d'activité détaillés ou des attestations concernant le traitement d'éléments de données sensibles spécifiques.
En général, les solutions de surveillance doivent être compatibles avec les outils tiers en général et être adaptées aux outils d'administration de votre environnement en particulier. Il est important de maintenir la flexibilité de la conception et d'éviter toute dépendance vis-à-vis d'un fournisseur.
Recommandations d'Oracle
Intégrez dès le départ des fonctionnalités complètes de surveillance et de suivi dans votre application pour maintenir la cohérence tout au long de leur cycle de vie. Les fonctionnalités ne doivent pas compliquer le développement, les tests et le déploiement, et doivent être faciles à implémenter et à gérer. Dans la mesure du possible, adoptez des solutions qui s'étendent pour répondre à la diversité des plates-formes que vous utilisez actuellement et qui pourraient être déployées à l'avenir.
Les services OCI, tels que Monitoring, sont conçus pour fournir une prise en charge prête à l'emploi pour la surveillance. De plus, vous pouvez étendre de nombreux services OCI pour vos composants d'application à l'aide d'une expérience de déploiement et de gestion cohérente via des API et des kits SDK pris en charge. Par exemple, vous pouvez ajouter la collecte automatisée de mesures de surveillance ou la capture de journaux avec un stockage centralisé pour toutes vos applications et machines virtuelles.
Lors du développement et des tests, vous pouvez configurer les services pour qu'ils collectent uniquement des informations de base sur le débogage ou les tests de performances. Au fur et à mesure que votre application approche du déploiement en production, augmentez la portée, la fréquence et la traçabilité des informations collectées en effectuant des mises à jour simples des paramètres de configuration existants.
Oracle Cloud Infrastructure Service Mesh saisit automatiquement divers journaux et mesures de communication pour les services exécutés dans Oracle Container Engine for Kubernetes. Vous pouvez utiliser ces données pour suivre l'état de vos services dans le maillage et améliorer les performances de vos applications.
Utilisez une collecte de données robuste et centralisée pour l'ensemble de votre environnement de location cloud, afin de fournir un emplacement unique pour l'analyse, l'investigation coordonnée et la génération d'alertes. Service Connector Hub offre des réponses flexibles, cohérentes et personnalisables aux événements. OCI Logging Analytics permet d'analyser et d'investiguer efficacement tous vos systèmes de journalisation des événements cloud (et externes). Vous pouvez également utiliser OCI Service Connector Hub, Functions et Notifications pour transformer des mesures et des journaux intégrés en alertes exploitables. Vous pouvez également tirer parti de nos intégrations avec des produits et services tiers, tels que Splunk et Grafana.
Les services OCI suivants vous aident à consolider la journalisation, la surveillance et le suivi dans les environnements qui hébergent vos applications : Logging, Monitoring, Logging Analytics, Application Performance Monitoring, OS Management, Database management et Java management Service. Ces services entièrement gérés sont intégrés aux ressources d’infrastructure OCI courantes et fournissent des mécanismes pris en charge pour intégrer vos ressources d’application personnalisées.
Présentation
Un point d'échec unique est un composant d'une application qui, en cas de défaillance, rend l'application entière indisponible ou non fiable. Lorsque vous développez une application qui doit être hautement disponible et fiable, utilisez la réplication automatisée des données pour vous assurer que la défaillance d'un seul composant n'entraîne pas de perte de données.
La réplication des données sur plusieurs machines et l'utilisation de réseaux redondants vous protègent contre les pannes courantes des machines et du réseau. La réplication de vos données dans plusieurs data centers (ou « domaines de disponibilité ») répartis dans plusieurs régions géographiques vous protège contre les catastrophes locales, telles que les incendies, les tremblements de terre, les inondations ou les ouragans.
Détails du principe
Pour que votre application bénéficie d'une haute disponibilité, vous devez vous assurer que les données dont elle dépend restent disponibles même en cas d'échec. La clé de la haute disponibilité des données est la redondance via la réplication automatisée des données.
La réplication est le processus consistant à copier et gérer des objets de base de données, tels que des tables, dans plusieurs bases de données qui constituent un système de base de données distribué. Les modifications appliquées sur un site sont capturées et stockées localement avant d'être transférées et appliquées sur chacune des répliques situées à des emplacements distants.
Les bases de données répliquées peuvent fonctionner de deux manières différentes : le mode actif-passif et le mode actif-actif. En mode actif-passif, il existe une seule réplique principale et une ou plusieurs répliques secondaires ; seule la réplique principale participe au traitement des données d'application. En mode actif-actif, toutes les répliques participent au traitement des données. Ce mode améliore l'utilisation des ressources et la disponibilité, car aucun basculement entre le serveur principal et le serveur secondaire n'est nécessaire.
La redondance garantit que les répliques de données échouent indépendamment. Les pannes de machine ou de disque sont généralement indépendantes, mais une panne réseau ou de courant peut entraîner l'échec simultané d'un groupe de machines. Pour vous protéger contre de tels incidents, les infrastructures réseau et d'alimentation doivent aussi être redondantes et les répliques de données doivent être placées soigneusement sur différentes machines et dans différentes régions qui ne peuvent pas échouer ensemble.
Recommandations Oracle
Les data centers OCI sont soigneusement conçus pour éliminer les points uniques de pannes catastrophiques. Un data center ou un domaine de disponibilité standard contient plusieurs unités de panne indépendantes appelées domaines de pannes. Deux domaines de pannes indépendants ne peuvent pas échouer ensemble. De même, une seule région peut compter plusieurs domaines de disponibilité, séparés géographiquement pour s'assurer que deux d'entre eux ne puissent pas tomber en panne simultanément.
Utilisez les services de stockage OCI, tels que Block Volumes, Object Storage et File Storage, pour répliquer des données dans les domaines de pannes et de disponibilité afin qu'aucun point de défaillance unique n'ait d'impact sur la disponibilité des données de votre application. Tirez parti de l'isolation résiliente des pannes intégrée à OCI grâce à Container Engine for Kubernetes pour déployer votre application sur plusieurs domaines de pannes et de disponibilité. Oracle Autonomous Database, Data Guard et GoldenGate fournissent une réplication matérielle et logicielle active-active pour la haute disponibilité, ainsi que l'application de correctifs et les mises à niveau sans temps d'arrêt. Utilisez ces services gérés pour bénéficier de données hautement disponibles sans avoir à créer ni à gérer votre infrastructure de stockage.
Présentation
La défense en profondeur est une approche dans laquelle plusieurs contrôles de sécurité indépendants et redondants agissent comme des couches de défense pour une application. Ces couches sont conçues pour assurer la sécurité même si l'une d'entre elles tombe en panne , par exemple, un pare-feu combiné à une détection d'intrusion.
Toutefois, la gestion et la configuration manuelles des contrôles de sécurité peuvent être complexes, floues et sources d'erreurs, individuellement et collectivement. Au lieu de cela, sécurisez votre application et ses données à l'aide de contrôles de sécurité automatisés.
Détails du principe
La défense renforcée permet de gérer les risques en utilisant divers contrôles qui couvrent les éléments physiques, techniques, administratifs, opérationnels, personnels et procéduraux de la sécurité. Étant donné qu'ils sont indépendants, ils fournissent une défense profonde qui lutte contre les défaillances, les exploits ou d'autres vulnérabilités de sécurité. Les contrôles sont conçus pour aborder les risques de différentes manières et fournir la journalisation, les audits et d'autres fonctionnalités afin que les tentatives de violation de sécurité soient détectées et signalées aux parties prenantes concernées.
Plutôt que de devoir configurer manuellement un ensemble complexe de contrôles de sécurité, utilisez des contrôles automatisés simples et prescriptifs pour sécuriser votre application. Les contrôles de sécurité automatisés éliminent les erreurs humaines (une cause fondamentale de nombreux incidents de sécurité) et vous aident à sécuriser votre application et ses données sans que vous n'ayez à être un expert en sécurité.
Recommandations d'Oracle
Implémentez des contrôles de sécurité automatisés faciles à utiliser à toutes les étapes du cycle de vie des applications, y compris le développement, la création, les tests, le déploiement et l'exécution. Vérifiez les utilisateurs, les autorisations et les stratégies d'accès à chaque étape du cycle de vie et assurez-vous qu'un accès est octroyé seulement si nécessaire. Détectez les problèmes de sécurité au début du cycle de développement du logiciel. La détection précoce garantit que votre application est déployée en production avec les bonnes pratiques de l'architecture de sécurité et que les problèmes de sécurité opérationnelle causés par des erreurs de configuration ou des vulnérabilités divulguées sont détectés et atténués.
OCI propose plusieurs services de sécurité automatisés pour sécuriser votre application et vos données client. Voici quelques recommandations concernant l'utilisation des services OCI :