Udostępnij za pośrednictwem


Równoważenie obciążenia

Jednym ze sposobów zwiększenia pojemności aplikacji windows Communication Foundation (WCF) jest skalowanie ich w poziomie przez wdrożenie ich w farmie serwerów o zrównoważonym obciążeniu. Aplikacje WCF mogą być zrównoważone przy użyciu standardowych technik równoważenia obciążenia, w tym programowych modułów równoważenia obciążenia, takich jak równoważenie obciążenia sieciowego systemu Windows, a także sprzętowe urządzenia równoważenia obciążenia.

W poniższych sekcjach omówiono zagadnienia dotyczące równoważenia obciążenia aplikacji WCF utworzonych przy użyciu różnych powiązań dostarczanych przez system.

Równoważenie obciążenia przy użyciu podstawowego powiązania HTTP

Z perspektywy równoważenia obciążenia aplikacje WCF komunikujące się przy użyciu elementu BasicHttpBinding nie różnią się od innych typowych typów ruchu sieciowego HTTP (statyczna zawartość HTML, strony ASP.NET lub usługi sieci Web ASMX). Kanały WCF korzystające z tego powiązania są z natury bezstanowe i kończą połączenia po zamknięciu kanału. W związku z tym BasicHttpBinding działa dobrze z istniejącymi technikami równoważenia obciążenia HTTP.

Domyślnie element BasicHttpBinding wysyła nagłówek HTTP połączenia w komunikatach z wartością Keep-Alive , co umożliwia klientom nawiązywanie trwałych połączeń z usługami, które je obsługują. Ta konfiguracja zapewnia zwiększoną przepływność, ponieważ wcześniej nawiązane połączenia mogą być ponownie używane do wysyłania kolejnych komunikatów do tego samego serwera. Jednak ponowne użycie połączenia może spowodować, że klienci będą silnie związani z określonym serwerem w farmie o zrównoważonym obciążeniu, co zmniejsza skuteczność równoważenia obciążenia okrężnego. Jeśli to zachowanie jest niepożądane, protokół HTTP Keep-Alive można wyłączyć na serwerze przy użyciu KeepAliveEnabled właściwości z zdefiniowaną przez Bindingużytkownika wartością CustomBinding lub . W poniższym przykładzie pokazano, jak to zrobić przy użyciu konfiguracji.

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

Korzystając z uproszczonej konfiguracji wprowadzonej w programie .NET Framework 4, to samo zachowanie można wykonać przy użyciu następującej uproszczonej konfiguracji.

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

Aby uzyskać więcej informacji na temat domyślnych punktów końcowych, powiązań i zachowań, zobacz Uproszczone konfigurowanie i uproszczona konfiguracja usług WCF.

Równoważenie obciążenia za pomocą powiązania WSHttp i powiązania WSDualHttp

Zarówno element , jak WSHttpBinding i WSDualHttpBinding można je zrównoważyć przy użyciu technik równoważenia obciążenia HTTP, pod warunkiem, że do konfiguracji powiązania domyślnego wprowadzono kilka modyfikacji.

  • Wyłącz opcję Tworzenie kontekstu zabezpieczeń lub używaj stanowych sesji zabezpieczeń. Utworzenie kontekstu zabezpieczeń można wyłączyć, ustawiając EstablishSecurityContext właściwość na WSHttpBinding wartość false. Jeśli używasz WSDualHttpBinding sesji zabezpieczeń lub wymagane są sesje zabezpieczeń, można użyć sesji zabezpieczeń stanowych zgodnie z opisem w sekcji Bezpieczne sesje. Stanowe sesje zabezpieczeń umożliwiają usłudze pozostanie bezstanowa, ponieważ cały stan sesji zabezpieczeń jest przesyłany wraz z każdym żądaniem w ramach tokenu zabezpieczającego ochrony. Aby włączyć stanową sesję zabezpieczeń, należy użyć zdefiniowanego CustomBindingBindingprzez użytkownika elementu lub , ponieważ niezbędne ustawienia konfiguracji nie są widoczne w systemie i WSHttpBindingWSDualHttpBinding.

  • Jeśli wyłączysz opcję Ustanawianie kontekstu zabezpieczeń, musisz również wyłączyć negocjacje poświadczeń usługi. Aby wyłączyć tę funkcję, ustaw NegotiateServiceCredential właściwość na WSHttpBinding wartość false. Aby wyłączyć negocjacje poświadczeń usługi, może być konieczne jawne określenie tożsamości punktu końcowego na kliencie.

  • Nie używaj niezawodnych sesji. Ta funkcja jest domyślnie wyłączona.

Równoważenie obciążenia powiązania Net.TCP

Można NetTcpBinding je zrównoważyć przy użyciu technik równoważenia obciążenia warstwy IP. NetTcpBinding Jednak domyślnie pule połączeń TCP, aby zmniejszyć opóźnienie połączenia. Jest to optymalizacja, która zakłóca podstawowy mechanizm równoważenia obciążenia. Podstawową wartością konfiguracji optymalizacji parametru NetTcpBinding jest limit czasu dzierżawy, który jest częścią Ustawienia puli Połączenie ion. Połączenie ion pooling powoduje, że połączenia klientów stają się skojarzone z określonymi serwerami w farmie. Wraz ze wzrostem okresu istnienia tych połączeń (czynnikiem kontrolowanym przez ustawienie limitu czasu dzierżawy) rozkład obciążenia między różnymi serwerami w farmie staje się niezrównoważony. W rezultacie średni czas wywołania wzrasta. Dlatego w przypadku korzystania ze NetTcpBinding scenariuszy ze zrównoważonym obciążeniem rozważ zmniejszenie domyślnego limitu czasu dzierżawy używanego przez powiązanie. Limit czasu dzierżawy 30 sekund jest rozsądnym punktem wyjścia dla scenariuszy ze zrównoważonym obciążeniem, chociaż optymalna wartość jest zależna od aplikacji. Aby uzyskać więcej informacji na temat limitu czasu dzierżawy kanału i innych limitów przydziału transportu, zobacz Limity przydziału transportu.

Aby uzyskać najlepszą wydajność w scenariuszach ze zrównoważonym obciążeniem, rozważ użycie metody NetTcpSecurity (lub TransportTransportWithMessageCredential).

Zobacz też