Principaux enseignements sur l'architecture des microservices .NET

Conseil / Astuce

Ce contenu est un extrait du livre électronique 'Architecture des microservices .NET pour les applications .NET conteneurisées', disponible sur .NET Docs ou en tant que PDF téléchargeable gratuitement, lisible hors ligne.

Architecture de microservices .NET pour les applications .NET conteneurisées - vignette de couverture du livre électronique.

En guise de résumé et de points clés, voici les conclusions les plus importantes de ce guide.

Avantages de l’utilisation de conteneurs. Les solutions basées sur des conteneurs offrent des économies importantes car elles permettent de réduire les problèmes de déploiement causés par des dépendances défaillantes dans les environnements de production. Les conteneurs améliorent considérablement les opérations de production et DevOps.

Les conteneurs seront omniprésents. Les conteneurs Docker deviennent la norme de facto dans le secteur, prise en charge par les principaux fournisseurs dans les écosystèmes Windows et Linux, tels que Microsoft, Amazon AWS, Google et IBM. Docker sera probablement omniprésent dans les centres de données cloud et locaux.

Conteneurs en tant qu’unité de déploiement. Un conteneur Docker devient l’unité standard de déploiement pour n’importe quelle application ou service basé sur le serveur.

Microservices. L’architecture des microservices devient l’approche recommandée pour les applications distribuées et volumineuses ou complexes basées sur de nombreux sous-systèmes indépendants sous la forme de services autonomes. Dans une architecture basée sur un microservice, l’application est créée en tant que collection de services développés, testés, versionnés, déployés et mis à l’échelle indépendamment. Chaque service peut inclure n’importe quelle base de données autonome associée.

Conception pilotée par le domaine et SOA. Les modèles d’architecture de microservices dérivent de l’architecture orientée service (SOA) et de la conception pilotée par le domaine (DDD). Lorsque vous concevez et développez des microservices pour les environnements avec des besoins et des règles métier en constante évolution, il est important de prendre en compte les approches et les modèles DDD.

Défis liés aux microservices. Les microservices offrent de nombreuses fonctionnalités puissantes, telles que le déploiement indépendant, les limites fortes du sous-système et la diversité technologique. Toutefois, ils soulèvent également de nombreux nouveaux défis liés au développement d’applications distribuées, tels que les modèles de données fragmentés et indépendants, la communication résiliente entre les microservices, la cohérence éventuelle et la complexité opérationnelle résultant de l’agrégation des informations de journalisation et de surveillance de plusieurs microservices. Ces aspects présentent un niveau de complexité beaucoup plus élevé qu’une application monolithique traditionnelle. Par conséquent, seuls des scénarios spécifiques sont adaptés aux applications basées sur des microservices. Il s’agit notamment d’applications volumineuses et complexes avec plusieurs sous-systèmes en évolution. Dans ces cas, il vaut la peine d’investir dans une architecture logicielle plus complexe, car elle fournira une meilleure agilité à long terme et une maintenance des applications.

Conteneurs pour n’importe quelle application. Les conteneurs sont pratiques pour les microservices, mais peuvent également être utiles pour les applications monolithiques basées sur le .NET Framework traditionnel, lors de l’utilisation de conteneurs Windows. Les avantages de l’utilisation de Docker, tels que la résolution de nombreux problèmes de déploiement en production et la fourniture d’environnements dev et test de pointe, s’appliquent à de nombreux types d’applications différents.

CLI et IDE. Avec les outils Microsoft, vous pouvez développer des applications .NET conteneurisées à l’aide de votre approche préférée. Vous pouvez développer avec une interface CLI et un environnement basé sur l’éditeur à l’aide de l’interface CLI Docker et de Visual Studio Code. Vous pouvez également utiliser une approche axée sur l’IDE avec Visual Studio et ses fonctionnalités uniques pour Docker, telles que le débogage à plusieurs conteneurs.

Applications cloud résilientes. Dans les systèmes cloud et les systèmes distribués en général, il existe toujours le risque de défaillance partielle. Étant donné que les clients et les services sont des processus distincts (conteneurs), un service peut ne pas être en mesure de répondre en temps voulu à la demande d’un client. Par exemple, un service peut être arrêté en raison d’une défaillance partielle ou d’une maintenance ; le service peut être surchargé et répondre lentement aux requêtes ; ou il peut ne pas être accessible pendant une courte période en raison de problèmes réseau. Par conséquent, une application basée sur le cloud doit adopter ces défaillances et avoir une stratégie en place pour répondre à ces défaillances. Ces stratégies peuvent inclure des stratégies de nouvelle tentative (renvoyer des messages ou réessayer des demandes) et implémenter des modèles disjoncteur pour éviter la charge exponentielle des requêtes répétées. En fait, les applications basées sur le cloud doivent avoir des mécanismes résilients, basés sur l’infrastructure cloud ou personnalisées, comme ceux de haut niveau fournis par des orchestrateurs ou des bus de service.

Sécurité. Notre monde moderne de conteneurs et de microservices peut exposer de nouvelles vulnérabilités. Il existe plusieurs façons d’implémenter la sécurité des applications de base, en fonction de l’authentification et de l’autorisation. Toutefois, la sécurité des conteneurs doit prendre en compte des composants clés supplémentaires qui entraînent des applications intrinsèquement plus sûres. L’un des éléments essentiels de la création d’applications plus sécurisées consiste à communiquer avec d’autres applications et systèmes, ce qui nécessite souvent des informations d’identification, des jetons, des mots de passe et des secrets d’application. Toute solution sécurisée doit suivre les meilleures pratiques de sécurité, telles que le chiffrement des secrets en transit et au repos, et empêcher les secrets de fuite lorsqu’ils sont consommés par l’application finale. Ces secrets doivent être stockés et conservés en toute sécurité, comme lors de l’utilisation d’Azure Key Vault.

Orchestrateurs. Les orchestrateurs basés sur des conteneurs, tels qu’Azure Kubernetes Service et Azure Service Fabric, font partie intégrante de toute application importante basée sur des microservices et des conteneurs. Ces applications sont dotées d’une complexité élevée, d’un besoin d’extensibilité et d’une évolution constante. Ce guide a introduit des orchestrateurs et leur rôle dans les solutions basées sur des microservices et des conteneurs. Si vos besoins d’application vous déplacent vers des applications conteneurisées complexes, vous trouverez utile de rechercher des ressources supplémentaires pour en savoir plus sur les orchestrateurs.