Héberger ASP.NET Core dans une batterie de serveurs webHost ASP.NET Core in a web farm

Par Luke Latham et Chris RossBy Luke Latham and Chris Ross

Une batterie de serveurs Web est un groupe d’au moins deux serveurs web (ou nœuds) qui héberge plusieurs instances d’une application.A web farm is a group of two or more web servers (or nodes) that host multiple instances of an app. Lorsque les requêtes des utilisateurs arrivent à une batterie de serveurs web, un équilibreur de charge les répartit sur les nœuds de la batterie de serveurs web.When requests from users arrive to a web farm, a load balancer distributes the requests to the web farm's nodes. Les batteries de serveurs web apportent les améliorations suivantes :Web farms improve:

  • Fiabilité/disponibilité – Lorsqu’un ou plusieurs nœuds échouent, l’équilibreur de charge peut acheminer les requêtes vers d’autres nœuds qui fonctionnent pour continuer le traitement des requêtes.Reliability/availability – When one or more nodes fail, the load balancer can route requests to other functioning nodes to continue processing requests.
  • Capacité/niveau de performances – Plusieurs nœuds peuvent traiter plus de requêtes qu’un serveur unique.Capacity/performance – Multiple nodes can process more requests than a single server. L’équilibreur de charge équilibre la charge de travail en répartissant les requêtes sur les nœuds.The load balancer balances the workload by distributing requests to the nodes.
  • Évolutivité – Lorsqu’une capacité supérieure ou inférieure est requise, le nombre de nœuds actifs peut être augmenté ou réduit pour l’adapter à la charge de travail.Scalability – When more or less capacity is required, the number of active nodes can be increased or decreased to match the workload. Les technologies de plateformes de batterie de serveurs web, telles qu’Azure App Service, peuvent automatiquement ajouter ou supprimer des nœuds, à la demande de l’administrateur système ou automatiquement, sans intervention humaine.Web farm platform technologies, such as Azure App Service, can automatically add or remove nodes at the request of the system administrator or automatically without human intervention.
  • Facilité de maintenance – Les nœuds d’une batterie de serveurs web peuvent s’appuyer sur un ensemble de services partagés, ce qui facilite la gestion système.Maintainability – Nodes of a web farm can rely on a set of shared services, which results in easier system management. Par exemple, les nœuds d’une batterie de serveurs web peuvent reposer sur un serveur de base de données unique et un emplacement réseau commun pour les ressources statiques, telles que les images et les fichiers téléchargeables.For example, the nodes of a web farm can rely upon a single database server and a common network location for static resources, such as images and downloadable files.

Cette rubrique décrit la configuration et les dépendances des applications ASP.NET Core hébergées dans une batterie de serveurs web qui s’appuie sur des ressources partagées.This topic describes configuration and dependencies for ASP.NET core apps hosted in a web farm that rely upon shared resources.

Configuration généraleGeneral configuration

Héberger et déployer ASP.NET Core
Découvrez comment configurer des environnements d’hébergement et déployer des applications ASP.NET Core.Learn how to set up hosting environments and deploy ASP.NET Core apps. Configurer un gestionnaire de processus sur chaque nœud de la batterie de serveurs web pour automatiser le démarrage le redémarrage des applications.Configure a process manager on each node of the web farm to automate app starts and restarts. Chaque nœud requiert le runtime ASP.NET Core.Each node requires the ASP.NET Core runtime. Pour plus d’informations, consultez les rubriques de la zone de documentation Héberger et déployer.For more information, see the topics in the Host and deploy area of the documentation.

Configurer ASP.NET Core pour l’utilisation de serveurs proxy et d’équilibreurs de charge
Découvrez la configuration des applications hébergées derrière des serveurs proxy et des équilibreurs de charge, qui masquent souvent des informations de requête importantes.Learn about configuration for apps hosted behind proxy servers and load balancers, which often obscure important request information.

Déployer des applications ASP.NET Core sur Azure App Service
Azure App Service est un service de plateforme de cloud computing Microsoft qui permet d’héberger des applications web, notamment ASP.NET Core.Azure App Service is a Microsoft cloud computing platform service for hosting web apps, including ASP.NET Core. App Service est une plateforme entièrement gérée qui assure la mise à l’échelle automatique, l’équilibrage de charge, la mise à jour corrective et le déploiement continu.App Service is a fully managed platform that provides automatic scaling, load balancing, patching, and continuous deployment.

Données d’applicationApp data

Quand une application est à mise l’échelle pour plusieurs instances, l’état de l’application peut nécessiter le partage entre les nœuds.When an app is scaled to multiple instances, there might be app state that requires sharing across nodes. Si l’état est transitoire, envisagez le partage d’un IDistributedCache.If the state is transient, consider sharing an IDistributedCache. Si l’état partagé nécessite une persistance, envisagez de stocker l’état partagé dans une base de données.If the shared state requires persistence, consider storing the shared state in a database.

Configuration requiseRequired configuration

La protection des données et la mise en cache nécessitent une configuration des applications déployées sur une batterie de serveurs web.Data Protection and Caching require configuration for apps deployed to a web farm.

Data ProtectionData Protection

Le système de Protection des données ASP.NET Core est utilisé par les applications pour protéger les données.The ASP.NET Core Data Protection system is used by apps to protect data. La protection des données repose sur un ensemble de clés de chiffrement stockées dans un fichier Key Ring.Data Protection relies upon a set of cryptographic keys stored in a key ring. Lorsque le système de Protection des données est initialisé, il applique des paramètres par défaut qui stockent le fichier Key Ring localement.When the Data Protection system is initialized, it applies default settings that store the key ring locally. Dans la configuration par défaut, un Key Ring unique est stocké sur chaque nœud de la batterie de serveurs web.Under the default configuration, a unique key ring is stored on each node of the web farm. Par conséquent, chaque nœud de la batterie de serveurs web ne peut pas déchiffrer des données chiffrées par une application sur un autre nœud.Consequently, each web farm node can't decrypt data that's encrypted by an app on any other node. La configuration par défaut ne convient généralement pas à l’hébergement des applications dans une batterie de serveurs web.The default configuration isn't generally appropriate for hosting apps in a web farm. Une alternative à l’implémentation d’un fichier Key Ring partagé consiste à toujours acheminer les requêtes de l’utilisateur vers le même nœud.An alternative to implementing a shared key ring is to always route user requests to the same node. Pour plus d’informations sur la configuration du système de protection des données pour les déploiements sur des batteries de serveurs web, consultez Configurer la Protection des données ASP.NET Core.For more information on Data Protection system configuration for web farm deployments, see Configurer la Protection des données ASP.NET Core.

Mise en cacheCaching

Dans un environnement de batterie de serveurs web, le mécanisme de mise en cache doit partager des éléments mis en cache sur les nœuds de la batterie de serveurs web.In a web farm environment, the caching mechanism must share cached items across the web farm's nodes. La mise en cache doit reposer sur un cache Redis commun, sur une base de données SQL Server partagée, ou sur une implémentation de mise en cache personnalisée qui partage les éléments mis en cache sur la batterie de serveurs web.Caching must either rely upon a common Redis cache, a shared SQL Server database, or a custom caching implementation that shares cached items across the web farm. Pour plus d'informations, consultez Mise en cache dans ASP.NET Core distribuée.For more information, see Mise en cache dans ASP.NET Core distribuée.

Composants dépendantsDependent components

Les scénarios suivants ne nécessitent pas une configuration supplémentaire, mais dépendent de technologies qui nécessitent une configuration pour les batteries de serveurs web.The following scenarios don't require additional configuration, but they depend on technologies that require configuration for web farms.

ScénarioScenario Dépend de …Depends on …
AuthentificationAuthentication Protection des données (voir Configurer la Protection des données ASP.NET Core).Data Protection (see Configurer la Protection des données ASP.NET Core).

Pour plus d’informations, consultez Utiliser l’authentification par cookie sans ASP.NET Core Identity et Partager des cookies d’authentification entre les applications ASP.NET.For more information, see Utiliser l’authentification par cookie sans ASP.NET Core Identity and Partager des cookies d’authentification entre les applications ASP.NET.
IdentitéIdentity Authentification et configuration de la base de données.Authentication and database configuration.

Pour plus d'informations, consultez Introduction à Identity sur ASP.NET Core.For more information, see Introduction à Identity sur ASP.NET Core.
SessionSession Protection des données (cookies chiffrés) (voir Configurer la Protection des données ASP.NET Core) et Mise en cache (voir Mise en cache dans ASP.NET Core distribuée).Data Protection (encrypted cookies) (see Configurer la Protection des données ASP.NET Core) and Caching (see Mise en cache dans ASP.NET Core distribuée).

Pour plus d’informations, consultez État de session et d’application : état de session.For more information, see Session and app state: Session state.
TempDataTempData Protection des données (cookies chiffrés) (voir Configurer la Protection des données ASP.NET Core) ou Session (voir État de session et d’application : état de session).Data Protection (encrypted cookies) (see Configurer la Protection des données ASP.NET Core) or Session (see Session and app state: Session state).

Pour plus d’informations, consultez État de session et d’application : TempData.For more information, see Session and app state: TempData.
Anti-contrefaçonAnti-forgery Protection des données (voir Configurer la Protection des données ASP.NET Core).Data Protection (see Configurer la Protection des données ASP.NET Core).

Pour plus d'informations, consultez Attaques empêcher Cross-Site Request Forgery (XSRF/CSRF) dans ASP.NET Core.For more information, see Attaques empêcher Cross-Site Request Forgery (XSRF/CSRF) dans ASP.NET Core.

Résoudre les problèmesTroubleshoot

Protection et mise en cache des donnéesData Protection and caching

Lorsque la protection des données ou la mise en cache ne sont pas configurées pour un environnement de batterie de serveurs web, des erreurs intermittentes se produisent pendant le traitement des requêtes.When Data Protection or caching isn't configured for a web farm environment, intermittent errors occur when requests are processed. Ceci est dû au fait que les nœuds ne partagent pas les mêmes ressources et que les requêtes des utilisateurs ne sont pas toujours redirigées vers le même nœud.This occurs because nodes don't share the same resources and user requests aren't always routed back to the same node.

Prenons l’exemple d’un utilisateur qui se connecte à l’application à l’aide de l’authentification basée sur les cookies.Consider a user who signs into the app using cookie authentication. L’utilisateur se connecte à l’application sur un nœud de batterie de serveurs web.The user signs into the app on one web farm node. Si sa prochaine requête arrive sur ce même nœud où il est connecté, l’application est en mesure de déchiffrer le cookie d’authentification et autorise l’accès aux ressources de l’application.If their next request arrives at the same node where they signed in, the app is able to decrypt the authentication cookie and allows access to the app's resource. Si sa prochaine requête arrive sur un autre nœud, l’application ne peut pas déchiffrer le cookie d’authentification à partir du nœud où l’utilisateur est connecté, et autorisation d’accès à la ressource demandée échoue.If their next request arrives at a different node, the app can't decrypt the authentication cookie from the node where the user signed in, and authorization for the requested resource fails.

En présence de l’un des symptômes suivants par intermittence, le problème provient généralement d’une configuration incorrecte de la protection des données ou de la mise en cache dans un environnement de batterie de serveurs web :When any of the following symptoms occur intermittently, the problem is usually traced to improper Data Protection or caching configuration for a web farm environment:

  • Interruptions d’authentification – Le cookie d’authentification est mal configuré ou ne peut pas être déchiffré.Authentication breaks – The authentication cookie is misconfigured or can't be decrypted. OAuth (Facebook, Microsoft, Twitter) ou les connexions OpenIdConnect échouent avec l’erreur « Échec de la corrélation ».OAuth (Facebook, Microsoft, Twitter) or OpenIdConnect logins fail with the error "Correlation failed."
  • Interruptions d’autorisation – L’identité est perdue.Authorization breaks – Identity is lost.
  • L’état de session perd des données.Session state loses data.
  • Des éléments mis en cache disparaissent.Cached items disappear.
  • TempData échoue.TempData fails.
  • Échec des messages – la vérification anti-contrefaçon échoue.POSTs fail – The anti-forgery check fails.

Pour plus d’informations sur la configuration de la protection des données pour les déploiements sur des batteries de serveurs web, consultez Configurer la Protection des données ASP.NET Core.For more information on Data Protection configuration for web farm deployments, see Configurer la Protection des données ASP.NET Core. Pour plus d’informations sur la configuration de la mise en cache pour les déploiements sur des batteries de serveurs web, consultez Mise en cache dans ASP.NET Core distribuée.For more information on caching configuration for web farm deployments, see Mise en cache dans ASP.NET Core distribuée.

Obtenir des données à partir d’applicationsObtain data from apps

Si les applications de la batterie de serveurs web sont capables de répondre aux requêtes, obtenez des informations sur une requête, une connexion et d’autres informations supplémentaires à partir des applications à l’aide de l’intergiciel en ligne terminal.If the web farm apps are capable of responding to requests, obtain request, connection, and additional data from the apps using terminal inline middleware. Pour obtenir des informations supplémentaires ainsi qu'un code d'exemple, consultez Résoudre les problèmes des projets ASP.NET Core.For more information and sample code, see Résoudre les problèmes des projets ASP.NET Core.