LastenausgleichLoad Balancing

Eine Möglichkeit zur Steigerung der Kapazität von Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Anwendungen besteht darin, sie dezentral zu skalieren und in einer Serverfarm mit Lastenausgleich bereitzustellen.One way to increase the capacity of Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) applications is to scale them out by deploying them into a load-balanced server farm. WCFWCF-Anwendungen können mit Standardverfahren zum Lastenausgleich entsprechend ausgeglichen werden. Dazu gehören Softwarelastenausgleichsmodule wie Windows Network Load Balancing sowie hardwarebasierte Anwendungen zum Lastenausgleich. applications can be load balanced using standard load balancing techniques, including software load balancers such as Windows Network Load Balancing as well as hardware-based load balancing appliances.

In den folgenden Abschnitten werden Überlegungen für den Lastenausgleich von WCFWCF-Anwendungen erläutert, der mit verschiedenen vom System bereitgestellten Bindungen erzielt wird.The following sections discuss considerations for load balancing WCFWCF applications built using various system-provided bindings.

Lastenausgleich mit der Basic-HTTP-BindungLoad Balancing with the Basic HTTP Binding

Im Hinblick auf Lastenausgleich unterscheiden sich WCFWCF-Anwendungen, die mithilfe der BasicHttpBinding kommunizieren, nicht von anderen gängigen Arten des HTTP-Netzwerkdatenverkehrs (statischer HTML-Inhalt, ASP.NET-Seiten oder ASMX-Webdienste).From the perspective of load balancing, WCFWCF applications that communicate using the BasicHttpBinding are no different than other common types of HTTP network traffic (static HTML content, ASP.NET pages, or ASMX Web Services). WCFWCF-Kanäle, die diese Bindung verwenden, weisen grundsätzlich keinen Zustand auf und beenden ihre Verbindungen, wenn der Kanal geschlossen wird. channels that use this binding are inherently stateless, and terminate their connections when the channel closes. Daher funktioniert die BasicHttpBinding gut mit vorhandenen HTTP-Lastenausgleichstechniken.As such, the BasicHttpBinding works well with existing HTTP load balancing techniques.

Standardmäßig sendet die BasicHttpBinding einen HTTP-Verbindungsheader in Nachrichten mit einem Keep-Alive-Wert, der Clients ermöglicht, permanente Verbindungen zu den Diensten herzustellen, die sie unterstützen.By default, the BasicHttpBinding sends a connection HTTP header in messages with a Keep-Alive value, which enables clients to establish persistent connections to the services that support them. Diese Konfiguration bietet einen höheren Durchsatz, da zuvor hergestellte Verbindungen erneut verwendet werden können, um nachfolgende Nachrichten an denselben Server zu senden.This configuration offers enhanced throughput because previously established connections can be reused to send subsequent messages to the same server. Die Wiederverwendung der Verbindung kann jedoch dazu führen, dass Clients eng mit einem bestimmten Server innerhalb der Serverfarm mit Lastenausgleich verbunden werden, was die Effektivität des Roundrobin-Lastenausgleichs reduziert.However, connection reuse may cause clients to become strongly associated to a specific server within the load-balanced farm, which reduces the effectiveness of round-robin load balancing. Wenn dieses Verhalten unerwünscht ist, kann HTTP Keep-Alive auf dem Server deaktiviert werden, indem die KeepAliveEnabled-Eigenschaft mit einer CustomBinding oder einer benutzerdefinierten Binding verwendet wird.If this behavior is undesirable, HTTP Keep-Alive can be disabled on the server using the KeepAliveEnabled property with a CustomBinding or user-defined Binding. Im folgenden Beispiel wird gezeigt, wie dieser Vorgang unter Verwendung der Konfiguration ausgeführt wird.The following example shows how to do this using 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>  

Wenn Sie die in .NET Framework 4.NET Framework 4 eingeführte vereinfachte Konfiguration verwenden, kann das gleiche Verhalten mit der folgenden vereinfachten Konfiguration erreicht werden.Using the simplified configuration introduced in .NET Framework 4.NET Framework 4, the same behavior can be accomplished using the following simplified configuration.

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

Weitere Informationen finden Sie unterFor more information about zu Standardendpunkten, Bindungen und Verhaltensweisen finden Sie unter Simplified Configuration und Simplified Configuration for WCF Services. default endpoints, bindings, and behaviors, see Simplified Configuration and Simplified Configuration for WCF Services.

Lastenausgleich mit der WSHttp-Bindung und der WSDualHttp-BindungLoad Balancing with the WSHttp Binding and the WSDualHttp Binding

Sowohl die WSHttpBinding als auch die WSDualHttpBinding können mit HTTP-Lastenausgleichstechniken ausgeglichen werden, vorausgesetzt, an der Standardbindungskonfiguration werden einige Änderungen vorgenommen.Both the WSHttpBinding and the WSDualHttpBinding can be load balanced using HTTP load balancing techniques provided several modifications are made to the default binding configuration.

  • Sicherheitskontexterstellung deaktivieren: Dies kann durch Festlegen der EstablishSecurityContext-Eigenschaft der WSHttpBinding auf false erreicht werden.Turn off Security Context Establishment: this can be accomplished by the setting the EstablishSecurityContext property on the WSHttpBinding to false. Alternativ können Sie sicherheitssitzungen sind erforderlich, es ist möglich, zustandsbehaftete Sitzungen verwenden, wie in beschrieben die sichere Sitzungen Thema.Alternatively, if security sessions are required, it is possible to use stateful security sessions as described in the Secure Sessions topic. Zustandsbehaftete Sicherheitssitzungen ermöglichen dem Dienst, zustandslos zu bleiben, da der gesamte Zustand für die Sicherheitssitzung mit jeder Anforderung als Teil des Schutzsicherheitstokens übertragen wird.Stateful security sessions enable the service to remain stateless as all of the state for the security session is transmitted with each request as a part of the protection security token. Zum Aktivieren einer zustandsbehafteten Sicherheitssitzung muss eine CustomBinding oder eine benutzerdefinierte Binding verwendet werden, da die erforderlichen Konfigurationseinstellungen nicht für die vom System bereitgestellte WSHttpBinding und WSDualHttpBinding verfügbar gemacht werden.Note that to enable a stateful security session, it is necessary to use a CustomBinding or user-defined Binding as the necessary configuration settings are not exposed on WSHttpBinding and WSDualHttpBinding that are provided by the system.

  • Verwenden Sie keine zuverlässigen Sitzungen.Do not use reliable sessions. Diese Funktion ist standardmäßig deaktiviert.This feature is off by default.

Lastenausgleich der Net.TCP-BindungLoad Balancing the Net.TCP Binding

Die NetTcpBinding kann mit Lastenausgleichstechniken der IP-Ebene ausgeglichen werden.The NetTcpBinding can be load balanced using IP-layer load balancing techniques. Die NetTcpBinding legt jedoch TCP-Verbindungen standardmäßig zusammen, um die Verbindungswartezeit zu reduzieren.However, the NetTcpBinding pools TCP connections by default to reduce connection latency. Dies ist eine Optimierung, die den grundlegenden Mechanismus des Lastenausgleichs behindert.This is an optimization that interferes with the basic mechanism of load balancing. Der primäre Konfigurationswert zur Optimierung der NetTcpBinding ist der Leasetimeout, der zu den Verbindungspooleinstellungen gehört.The primary configuration value for optimizing the NetTcpBinding is the lease timeout, which is part of the Connection Pool Settings. Verbindungspooling bewirkt, dass Clientverbindungen bestimmten Servern innerhalb der Farm zugeordnet werden.Connection pooling causes client connections to become associated to specific servers within the farm. Mit steigender Lebensdauer dieser Verbindung (ein Faktor, der von der Leasetimeout-Einstellung gesteuert wird) wird die Lastenverteilung über die verschiedenen Server auf der Farm zunehmend unausgeglichen.As the lifetime of those connections increase (a factor controlled by the lease timeout setting), the load distribution across various servers in the farm becomes unbalanced. Demzufolge steigt die durchschnittliche Aufrufzeit.As a result the average call time increases. Erwägen Sie daher bei der Verwendung der NetTcpBinding in Lastenausgleichsszenarien, den von der Bindung verwendeten Leasetimeout-Standardwert zu reduzieren.So when using the NetTcpBinding in load-balanced scenarios, consider reducing the default lease timeout used by the binding. Ein 30 Sekunden dauernder Leasetimeout ist ein angemessener Ausgangspunkt für Lastenausgleichsszenarien. Der optimale Wert richtet sich jedoch nach der jeweiligen Anwendung.A 30-second lease timeout is a reasonable starting point for load-balanced scenarios, although the optimal value is application-dependent. Weitere Informationen zu den Timeout für die kanalfreigabe und andere transportkontingente finden Sie unter Transportkontingente.For more information about the channel lease timeout and other transport quotas, see Transport Quotas.

Erwägen Sie, für die optimale Leistung in Lastenausgleichsszenarien NetTcpSecurity ( Transport oder TransportWithMessageCredential) zu verwenden.For best performance in load-balanced scenarios, consider using NetTcpSecurity (either Transport or TransportWithMessageCredential).

Siehe auchSee Also

Bewährte Methoden für das Hosten in IIS (Internetinformationsdienste)Internet Information Services Hosting Best Practices