Recommandations d’hébergement Azure pour les applications web ASP.NET Core

Conseil / Astuce

Ce contenu est un extrait du livre électronique, architecte d’applications web modernes avec ASP.NET Core et Azure, disponible sur .NET Docs ou en tant que PDF téléchargeable gratuitement qui peut être lu hors connexion.

Miniature de la couverture de l'eBook: Concevez des applications web modernes avec ASP.NET Core et Azure.

« Les responsables métier partout contournent les services informatiques pour obtenir des applications à partir du cloud (également appelé SaaS) et payer pour eux comme ils le feraient pour un abonnement de magazine. Et quand le service n’est plus nécessaire, ils peuvent annuler l’abonnement sans équipement laissé inutilisé dans le coin. »
- Daryl Plummer, analyste de Gartner

Quels que soient les besoins et l’architecture de votre application, Microsoft Azure peut le prendre en charge. Vos besoins d’hébergement peuvent être aussi simples qu’un site web statique ou une application sophistiquée composée de dizaines de services. Pour les applications web monolithiques ASP.NET Core et les services complémentaires, plusieurs configurations bien connues sont recommandées. Les recommandations de cet article sont regroupées en fonction du type de ressource à héberger, qu’il s’agisse d’applications complètes, de processus individuels ou de données.

Applications Web

Les applications web peuvent être hébergées avec :

  • App Service Web Apps

  • Conteneurs (plusieurs options)

  • Machines virtuelles

App Service Web Apps est l’approche recommandée pour la plupart des scénarios, y compris les applications simples basées sur des conteneurs. Pour les architectures de microservice, envisagez une approche basée sur des conteneurs. Si vous avez besoin d’un contrôle supplémentaire sur les machines exécutant votre application, tenez compte des machines virtuelles Azure.

App Service Web Apps

App Service Web Apps offre une plateforme entièrement managée optimisée pour l’hébergement d’applications web. Il s’agit d’une offre PaaS (Platform as a Service) qui vous permet de vous concentrer sur votre logique métier, tandis qu’Azure s’occupe de l’infrastructure nécessaire pour exécuter et mettre à l’échelle l’application. Certaines fonctionnalités clés d’App Service Web Apps :

  • Optimisation devOps (intégration et livraison continues, plusieurs environnements, tests A/B, prise en charge des scripts).

  • Mise à l’échelle mondiale et haute disponibilité.

  • Connexions aux plateformes SaaS et à vos données locales.

  • Sécurité et conformité.

  • Intégration de Visual Studio.

Azure App Service est le meilleur choix pour la plupart des applications web. Le déploiement et la gestion sont intégrés à la plateforme, les sites peuvent être mis à l’échelle rapidement pour gérer les charges de trafic élevées, et l’équilibrage de charge intégré et traffic Manager offrent une haute disponibilité. Vous pouvez déplacer facilement des sites existants vers Azure App Service avec un outil de migration en ligne. Vous pouvez utiliser une application open source à partir de la galerie d’applications web ou créer un site à l’aide de l’infrastructure et des outils de votre choix. La fonctionnalité WebJobs facilite l’ajout du traitement des travaux en arrière-plan à votre application web App Service. Si vous disposez d’une application ASP.NET existante hébergée localement à l’aide d’une base de données locale, il existe un chemin d’accès clair à migrer. Vous pouvez utiliser l’application web App Service avec une base de données Azure SQL (ou un accès sécurisé à votre serveur de base de données local, le cas échéant).

Stratégie de migration recommandée pour les applications .NET locales vers Azure App Service

Dans la plupart des cas, le passage d’une application ASP.NET hébergée localement à une application web App Service est un processus simple. Peu ou aucune modification ne doit être requise de l’application elle-même, et elle peut rapidement commencer à tirer parti des nombreuses fonctionnalités proposées par Azure App Service Web Apps.

Outre les applications qui ne sont pas optimisées pour le cloud, Azure App Service Web Apps est une excellente solution pour de nombreuses applications monolithiques simples (non distribuées), telles que de nombreuses applications ASP.NET Core. Dans cette approche, l’architecture est de base et simple à comprendre et à gérer :

Architecture Azure de base

Un petit nombre de ressources dans un seul groupe de ressources suffit généralement pour gérer une telle application. Les applications généralement déployées en tant qu’unité unique, plutôt que celles composées de nombreux processus distincts, sont de bons candidats pour cette approche architecturale de base. Bien que simple architecturalement, cette approche permet toujours à l’application hébergée de monter en puissance (plus de ressources par nœud) et de sortir (plus de nœuds hébergés) pour répondre à toute augmentation de la demande. Avec la mise à l’échelle automatique, l’application peut être configurée pour ajuster automatiquement le nombre de nœuds hébergeant l’application en fonction de la demande et de la charge moyenne entre les nœuds.

App Service Web Apps pour conteneurs

Outre la prise en charge de l’hébergement d’applications web directement, App Service Web Apps for Containers peut être utilisé pour exécuter des applications conteneurisées sur Windows et Linux. À l’aide de ce service, vous pouvez facilement déployer et exécuter des applications conteneurisées qui peuvent être mises à l’échelle avec votre entreprise. Les applications ont toutes les fonctionnalités d’App Service Web Apps répertoriées ci-dessus. En outre, Web Apps for Containers prend en charge le CI/CD rationalisé avec Docker Hub, Azure Container Registry et GitHub. Vous pouvez utiliser Azure DevOps pour définir des pipelines de génération et de déploiement qui publient des modifications dans un registre. Ces modifications peuvent ensuite être testées dans un environnement intermédiaire et déployées automatiquement en production à l’aide d’emplacements de déploiement, ce qui permet des mises à niveau sans temps d’arrêt. La restauration vers les versions précédentes peut être effectuée aussi facilement.

Il existe quelques scénarios dans lesquels Web Apps for Containers est le plus judicieux. Si vous avez des applications existantes que vous pouvez conteneuriser, que ce soit dans des conteneurs Windows ou Linux, vous pouvez les héberger facilement à l’aide de cet ensemble d’outils. Publiez simplement votre conteneur, puis configurez Web Apps for Containers pour extraire la dernière version de cette image à partir de votre registre de choix. Il s’agit d’une approche « lift-and-shift » pour migrer des modèles d’hébergement d’applications classiques vers un modèle optimisé pour le cloud.

Migrer une application .NET locale en conteneur vers Azure Web Apps for Containers

Cette approche fonctionne également bien si votre équipe de développement est en mesure de passer à un processus de développement basé sur des conteneurs. La « boucle interne » du développement d’applications avec des conteneurs inclut la création de l’application avec des conteneurs. Les modifications apportées au code et à la configuration de conteneur sont envoyées au contrôle de code source et une build automatisée est chargée de publier de nouvelles images conteneur dans un registre comme Docker Hub ou Azure Container Registry. Ces images sont ensuite utilisées comme base pour le développement supplémentaire, ainsi que pour les déploiements en production, comme indiqué dans le diagramme suivant :

Flux de travail de cycle de vie DevOps Docker de bout en bout

Le développement avec des conteneurs offre de nombreux avantages, en particulier lorsque des conteneurs sont utilisés en production. La même configuration de conteneur est utilisée pour héberger l’application dans chaque environnement dans lequel elle s’exécute, de l’ordinateur de développement local pour générer et tester des systèmes en production. Cette approche réduit considérablement la probabilité de défauts résultant des différences de configuration de machine ou de versions logicielles. Les développeurs peuvent également utiliser les outils avec lesquels ils sont les plus productifs, y compris le système d’exploitation, car les conteneurs peuvent s’exécuter sur n’importe quel système d’exploitation. Dans certains cas, les applications distribuées impliquant de nombreux conteneurs peuvent être très gourmandes en ressources pour s’exécuter sur un seul ordinateur de développement. Dans ce scénario, il peut être judicieux de procéder à une mise à niveau vers Kubernetes et Azure Dev Spaces, décrite dans la section suivante.

À mesure que des parties d’applications plus volumineuses sont divisées en leurs propres microservices plus petits et indépendants, des modèles de conception supplémentaires peuvent être utilisés pour améliorer le comportement de l’application. Au lieu d’utiliser directement des services individuels, une passerelle d’API peut simplifier l’accès et dissocier le client de son back-end. Le fait d’avoir des back-ends de service distincts pour différents serveurs frontaux permet également aux services d’évoluer en concert avec leurs consommateurs. Les services communs sont accessibles via un conteneur sidecar distinct, qui peut inclure des bibliothèques de connectivité client courantes à l’aide du modèle ambassadeur .

Exemples d’architecture de microservices avec plusieurs modèles de conception courants notés.

En savoir plus sur les modèles de conception à prendre en compte lors de la création de systèmes basés sur des microservices.

Azure Kubernetes Service

Azure Kubernetes Service (AKS) gère votre environnement Kubernetes hébergé, ce qui facilite le déploiement et la gestion d’applications conteneurisées sans expertise en orchestration de conteneur. Il élimine également le fardeau des opérations et de la maintenance en continu en approvisionnant, en mettant à niveau et en mettant à l’échelle des ressources à la demande, sans mettre vos applications hors connexion.

AKS réduit la complexité et la surcharge opérationnelle de la gestion d’un cluster Kubernetes en déchargeant une grande partie de cette responsabilité sur Azure. En tant que service Kubernetes hébergé, Azure gère pour vous les tâches critiques telles que le suivi de la santé et la maintenance. En outre, vous payez uniquement pour les nœuds d'agent au sein de vos clusters informatiques, et non pour les serveurs principaux. En tant que service Kubernetes managé, AKS fournit :

  • Mises à niveau et mises à jour correctives automatisées des versions de Kubernetes.
  • Mise à l’échelle facile des clusters.
  • Un plan de contrôle hébergé avec auto-réparation (maîtres).
  • Une réduction des coûts : vous payez uniquement pour les nœuds de pool d’agents qui s’exécutent.

Avec Azure qui gère la gestion des nœuds dans votre cluster AKS, vous n’avez plus besoin d’effectuer de nombreuses tâches manuellement, comme les mises à niveau de cluster. Étant donné qu’Azure gère ces tâches de maintenance critiques pour vous, AKS ne fournit pas d’accès direct (par exemple, SSH) au cluster.

Les équipes qui tirent parti d’AKS peuvent également tirer parti d’Azure Dev Spaces. Azure Dev Spaces aide les équipes à se concentrer sur le développement et l’itération rapide de leur application de microservice en permettant aux équipes de travailler directement avec l’ensemble de leur architecture ou application de microservices s’exécutant dans AKS. Azure Dev Spaces permet également de mettre à jour indépendamment les parties de votre architecture de microservices en isolation sans affecter le reste du cluster AKS ou d’autres développeurs.

Exemple de flux de travail Azure Dev Spaces

Azure Dev Spaces :

  • Réduire le temps de configuration de l’ordinateur local et les besoins en ressources
  • Permettre aux équipes d’itérer plus rapidement
  • Réduire le nombre d’environnements d’intégration requis par une équipe
  • Supprimer la nécessité de simuler certains services dans un système distribué lors du développement/test

En savoir plus sur Azure Dev Spaces

Machines virtuelles Azure

Si vous disposez d’une application existante qui nécessiterait des modifications substantielles pour s’exécuter dans App Service, vous pouvez choisir des machines virtuelles pour simplifier la migration vers le cloud. Toutefois, la configuration, la sécurisation et la maintenance correctes des machines virtuelles nécessitent beaucoup plus de temps et d’expertise informatique par rapport à Azure App Service. Si vous envisagez des machines virtuelles Azure, veillez à prendre en compte les efforts de maintenance en cours nécessaires pour corriger, mettre à jour et gérer votre environnement de machine virtuelle. Les machines virtuelles Azure sont une infrastructure en tant que service (IaaS), tandis qu’App Service est PaaS. Vous devez également déterminer si le déploiement de votre application en tant que conteneur Windows sur Web App pour conteneurs peut être une option viable pour votre scénario.

Processus logiques

Les processus logiques individuels qui peuvent être découplés du reste de l’application peuvent être déployés indépendamment sur Azure Functions de manière « serverless ». Azure Functions vous permet d’écrire simplement le code dont vous avez besoin pour un problème donné, sans vous soucier de l’application ou de l’infrastructure pour l’exécuter. Vous pouvez choisir parmi un large éventail de langages de programmation, notamment C#, F#, Node.js, Python et PHP, ce qui vous permet de choisir le langage le plus productif pour la tâche. Comme la plupart des solutions basées sur le cloud, vous payez uniquement pour la durée de votre utilisation, et vous pouvez faire confiance à Azure Functions pour effectuer un scale-up en fonction des besoins.

Données

Azure offre un large éventail d’options de stockage de données, afin que votre application puisse utiliser le fournisseur de données approprié pour les données en question.

Pour les données transactionnelles, relationnelles, Azure SQL Databases est la meilleure option. Pour de hautes performances avec les données qui sont principalement en lecture, un cache Redis s’appuyant sur une base de données Azure SQL Database est une bonne solution.

Les données JSON non structurées peuvent être stockées de différentes manières, de colonnes SQL Database aux objets blob ou tables du Stockage Azure vers Azure Cosmos DB. Parmi ceux-ci, Azure Cosmos DB offre la meilleure fonctionnalité d’interrogation et est l’option recommandée pour un grand nombre de documents JSON qui doivent prendre en charge l’interrogation.

Les données temporaires basées sur des commandes ou des événements utilisées pour orchestrer le comportement de l’application peuvent utiliser Azure Service Bus ou les files d’attente de stockage Azure. Azure Service Bus offre plus de flexibilité et est le service recommandé pour la messagerie non triviale au sein et entre les applications.

Suggestions en matière d’architecture

Les exigences de votre application doivent dicter son architecture. Il existe de nombreux services Azure différents. Choisir le bon choix est une décision importante. Microsoft propose une galerie d’architectures de référence pour vous aider à identifier les architectures classiques optimisées pour les scénarios courants. Vous trouverez peut-être une architecture de référence qui correspond étroitement aux exigences de votre application, ou au moins offre un point de départ.

La figure 11-1 montre un exemple d’architecture de référence. Ce diagramme décrit une approche d’architecture recommandée pour un site web de gestion de contenu Sitecore optimisé pour le marketing.

Figure 11-1

Figure 11-1. Architecture de référence du site web de marketing Sitecore.

Références – Recommandations d’hébergement Azure