Partager via


Équilibrage de charge

Une façon d’augmenter la capacité des applications Windows Communication Foundation (WCF) consiste à les mettre à l’échelle en les déployant dans une batterie de serveurs à charge équilibrée. Les applications WCF peuvent être équilibrées à l’aide de techniques d’équilibrage de charge standard, notamment des équilibreurs de charge logiciels tels que l’équilibrage de charge réseau Windows ainsi que des appliances d’équilibrage de charge basées sur le matériel.

Les sections suivantes décrivent les considérations relatives à l’équilibrage de charge des applications WCF créées à l’aide de différentes liaisons fournies par le système.

Équilibrage de charge avec la liaison HTTP de base

Du point de vue de l’équilibrage de charge, les applications WCF qui communiquent à l’aide BasicHttpBinding ne sont pas différentes des autres types courants de trafic réseau HTTP (contenu HTML statique, pages ASP.NET ou services web ASMX). Les canaux WCF qui utilisent cette liaison sont fondamentalement sans état et terminent leurs connexions lorsque le canal se ferme. Par conséquent, le BasicHttpBinding fonctionne bien avec les techniques d’équilibrage de charge HTTP existantes.

Par défaut, le BasicHttpBinding envoie un en-tête HTTP de connexion dans les messages avec un paramètre Keep-Alive, ce qui permet aux clients d’établir des connexions persistantes avec les services qui les prennent en charge. Cette configuration offre un débit amélioré, car les connexions établies précédemment peuvent être réutilisées pour envoyer des messages suivants au même serveur. Toutefois, la réutilisation des connexions peut provoquer une forte association des clients à un serveur spécifique dans la batterie à charge équilibrée, ce qui réduit l'efficacité de l'équilibrage de charge tourniquet. Si ce comportement n’est pas souhaitable, HTTP Keep-Alive peut être désactivé sur le serveur à l’aide de la propriété KeepAliveEnabled avec un CustomBinding ou par un Binding défini par l'utilisateur. L’exemple suivant montre comment effectuer cette opération à l’aide de la configuration.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  
 <system.serviceModel>  
  <services>  
   <service
     name="Microsoft.ServiceModel.Samples.CalculatorService"  
     behaviorConfiguration="CalculatorServiceBehavior">  
     <host>  
      <baseAddresses>  
       <add baseAddress="http://localhost:8000/servicemodelsamples/service"/>  
      </baseAddresses>  
     </host>  
    <!-- configure http endpoint, use base address provided by host  
         And the customBinding -->  
     <endpoint address=""  
           binding="customBinding"  
           bindingConfiguration="HttpBinding"
           contract="Microsoft.ServiceModel.Samples.ICalculator" />  
   </service>  
  </services>  
  
  <bindings>  
    <customBinding>  
  
    <!-- Configure a CustomBinding that disables keepAliveEnabled-->  
      <binding name="HttpBinding" keepAliveEnabled="False"/>  
  
    </customBinding>  
  </bindings>  
 </system.serviceModel>  
</configuration>  

À l’aide de la configuration simplifiée introduite dans .NET Framework 4, le même comportement peut être effectué à l’aide de la configuration simplifiée suivante.

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
 <system.serviceModel>  
    <protocolMapping>  
      <add scheme="http" binding="customBinding" />  
    </protocolMapping>  
    <bindings>  
      <customBinding>  
  
      <!-- Configure a CustomBinding that disables keepAliveEnabled-->  
        <binding keepAliveEnabled="False"/>  
  
      </customBinding>  
    </bindings>  
 </system.serviceModel>  
</configuration>  

Pour plus d’informations sur les points de terminaison, les liaisons et les comportements par défaut, consultez Configuration simplifiée et Configuration simplifiée pour les services WCF.

Équilibrage de charge avec les liaisons WSHttp et WSDualHttp

Les éléments WSHttpBinding et WSDualHttpBinding peuvent être équilibrés à l'aide de techniques d'équilibrage HTTP, à condition que plusieurs modifications soient apportées à la configuration de liaison par défaut.

  • Désactivez l’établissement du contexte de sécurité ou utilisez des sessions de sécurité avec état. L’établissement du contexte de sécurité peut être désactivé en définissant la propriété EstablishSecurityContext sur le WSHttpBinding sur false. Si vous utilisez WSDualHttpBinding ou que des sessions de sécurité sont requises, il est possible d’utiliser des sessions de sécurité avec état, comme décrit dans Sessions sécurisées. Les sessions de sécurité avec état permettent au service de rester sans état car l’ensemble de l’état de la session de sécurité est transmis avec chaque demande dans le cadre du jeton de sécurité de protection. Pour activer une session de sécurité avec état, il est nécessaire d’utiliser CustomBinding ou Binding défini par l’utilisateur car les paramètres de configuration requis ne sont pas exposés sur WSHttpBinding et WSDualHttpBinding, qui sont fournis par le système.

  • Si vous désactivez l’établissement du contexte de sécurité, vous devez également désactiver la négociation des informations d’identification du service. Pour la désactiver, définissez la propriété NegotiateServiceCredential sur le WSHttpBinding sur false. Pour désactiver la négociation des informations d’identification du service, vous devrez peut-être spécifier explicitement l’identité du point de terminaison sur le client.

  • N’utilisez pas de sessions fiables. Cette fonctionnalité est désactivée par défaut.

Équilibrage de charge avec la liaison Net.TCP

La NetTcpBinding peut être mise en équilibre à l’aide de techniques d’équilibrage de charge au niveau IP. Cependant, NetTcpBinding regroupe les connexions TCP par défaut afin de réduire la latence de la connexion. Il s’agit d’une optimisation qui interfère avec le mécanisme de base de l’équilibrage de charge. La valeur de configuration principale pour optimiser le NetTcpBinding est le délai d’expiration du bail, qui fait partie des paramètres du pool de connexions. Le regroupement de connexions entraîne l’attribution de connexions clientes à des serveurs spécifiques au sein de la ferme de serveurs. À mesure que la durée de vie de ces connexions augmente (facteur contrôlé par le paramètre de délai d’expiration du bail), la distribution de charge sur différents serveurs de la ferme de serveurs devient déséquilibrée. Par conséquent, le temps moyen d’appel augmente. Donc lorsque vous utilisez NetTcpBinding dans les scénarios à charge équilibrée, réduisez le délai de bail par défaut utilisé par la liaison. Un délai d’expiration de bail de 30 secondes est un point de départ raisonnable pour les scénarios à charge équilibrée, même si la valeur optimale dépend de l’application. Pour plus d’informations sur le délai d’expiration du bail de canal et d’autres quotas de transport, consultez Quotas de transport.

Pour des performances optimales dans les scénarios à charge équilibrée, envisagez d’utiliser NetTcpSecurity (soit TransportTransportWithMessageCredential).

Voir aussi