Compartir a través de


Equilibrio de carga

Una manera de aumentar la capacidad de las aplicaciones Windows Communication Foundation (WCF) es escalarlas implementándolas en una granja de servidores con carga equilibrada. Las aplicaciones WCF pueden cargarse mediante la técnicas de equilibrio de carga estándar, incluidos los equilibradores de carga de software como el equilibrio de carga de red de Windows así como los dispositivos de equilibro de carga basados en hardware.

Las secciones siguientes tratan sobre las consideraciones para las aplicaciones WCF de equilibrio de carga compiladas con varios enlaces proporcionados por el sistema.

Equilibrio de carga con el enlace HTTP básico

Desde la perspectiva del equilibrio de carga, las aplicaciones WCF que se comunican utilizando BasicHttpBinding no son diferentes de otros tipos comunes de tráfico de red HTTP (contenido de HTML estático, páginas ASP.NET o servicios Web de ASMX). Los canales de WCF que utilizan este enlace no tienen estado de manera predeterminada y terminan sus conexiones cuando el canal se cierra. Como tal, BasicHttpBinding funciona bien con técnicas de equilibrio de carga de HTTP existentes.

De forma predeterminada, BasicHttpBinding envía un encabezado HTTP de conexión en mensajes con un valor Keep-Alive, que permite a los clientes establecer conexiones permanentes a los servicios que las admiten. Esta configuración proporciona un rendimiento mejorado ya que las conexiones previamente establecidas se pueden reutilizar para enviar los mensajes subsiguientes al mismo servidor. Sin embargo, la reutilización de la conexión puede hacer que los clientes se asocien con un servidor concreto dentro de la granja con la carga equilibrada, lo que reduce la eficacia del equilibrio de carga por turnos (round-robin). Si este comportamiento no es adecuado, Keep-Alive de HTTP puede estar deshabilitado en el servidor utilizando la propiedad KeepAliveEnabled con CustomBinding o Binding definido por el usuario. En el ejemplo siguiente se muestra cómo hacerlo usando la configuración.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
 <system.serviceModel>
  <services>
   <service 
     name="Microsoft.ServiceModel.Samples.CalculatorService"
     behaviorConfiguration="CalculatorServiceBehavior">
     <host>
      <baseAddresses>
       <add baseAddress="https://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>

Si se usa la configuración simplificada presentada en .NET Framework 4, se puede lograr el mismo comportamiento mediante la siguiente configuración simplificada.

<?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>

Para obtener más información sobre los extremos, enlaces y comportamientos predeterminados, vea Configuración simplificada y Configuración simplificada de los servicios de WCF.

Equilibrio de carga con los enlaces WSHttp y WSDualHttp

WSHttpBinding y WSDualHttpBinding pueden tener la carga equilibrada gracias a las técnicas de equilibrio de carga de HTTP siempre que se hagan algunas modificaciones a la configuración de enlace predeterminada.

  • Desactive el establecimiento del contexto de seguridad: puede lograrse definiendo la propiedad EstablishSecurityContext de WSHttpBinding en false. Por otra parte, si son necesarias las sesiones de seguridad, es posible utilizar las sesiones de seguridad con estado tal y como se ha descrito en el tema Sesiones seguras. Las sesiones de seguridad con estado permiten al servicio seguir estando sin estado ya que se transmitirá todo el estado para la sesión de seguridad con cada solicitud como parte del token de seguridad de protección. Tenga en cuenta que para habilitar una sesión de seguridad con estado, es necesario utilizar CustomBinding o Binding definido por el usuario ya que no se exponen los valores de configuración necesarios en WSHttpBinding y WSDualHttpBinding que son proporcionados por el sistema.

  • No utilice las sesiones confiables. Esta característica está desactivada de forma predeterminada.

Equilibrio de carga del enlace Net.TCP

Puede equilibrarse la carga de NetTcpBinding mediante técnicas de equilibrio de carga de nivel IP. Sin embargo, NetTcpBinding agrupa de forma predeterminada las conexiones TCP para reducir la latencia de conexión. Ésta es una optimización que interfiere con el mecanismo básico del equilibrio de carga. El valor de configuración principal para optimizar NetTcpBinding es el tiempo de espera de la concesión, que forma parte de la configuración del grupo de conexiones. La agrupación de conexiones produce conexiones de cliente que se asociarán a servidores concretos dentro de la granja. Como la duración de esas conexiones aumenta (un factor controlado por el valor de tiempo de espera de la concesión), la distribución de carga en varios servidores de la granja pasa a estar sin equilibrar. Como resultado, aumentará el tiempo medio de la llamada. Así, al utilizar NetTcpBinding en escenarios con carga equilibrada, considere reducir el tiempo de espera de concesión predeterminado utilizado por el enlace. Un tiempo de espera de concesión de 30 segundos es un punto de inicio razonable para los escenarios con carga equilibrada, aunque el valor óptimo depende de la aplicación. Para obtener más información sobre el tiempo de espera de concesión de canal y otras cuotas de transporte, vea Cuotas de transporte.

Para obtener el máximo rendimiento en escenarios con carga equilibrada, considere utilizar NetTcpSecurity (Transport o TransportWithMessageCredential).

Vea también

Conceptos

Procedimientos recomendados de hospedaje de Internet Information Services