Sdílet prostřednictvím


Vyrovnávání zatížení

Jedním ze způsobů, jak zvýšit kapacitu aplikací WCF (Windows Communication Foundation), je škálovat je tak, že je nasadíte do serverové farmy s vyrovnáváním zatížení. Aplikace WCF můžou být vyrovnány zatížení pomocí standardních technik vyrovnávání zatížení, včetně nástrojů pro vyrovnávání zatížení softwaru, jako je vyrovnávání zatížení sítě Windows a zařízení pro vyrovnávání zatížení založená na hardwaru.

Následující části diskutují o aspektech vyrovnávání zatížení aplikací WCF vytvořených pomocí různých systémových vazeb.

Vyrovnávání zatížení pomocí základní vazby HTTP

Z hlediska vyrovnávání zatížení se aplikace WCF, které komunikují pomocí protokolu BasicHttpBinding , neliší od jiných běžných typů síťového provozu HTTP (statický obsah HTML, ASP.NET stránky nebo webové služby ASMX). Kanály WCF, které používají tuto vazbu, jsou ze své podstaty bezstavové a ukončí jejich připojení, když se kanál zavře. Proto funguje BasicHttpBinding dobře se stávajícími technikami vyrovnávání zatížení HTTP.

Ve výchozím nastavení BasicHttpBinding odesílá hlavičku HTTP připojení ve zprávách s Keep-Alive hodnotou, která klientům umožňuje navázat trvalá připojení ke službám, které je podporují. Tato konfigurace nabízí zvýšenou propustnost, protože dříve vytvořená připojení je možné znovu použít k odesílání následných zpráv na stejný server. Opakované použití připojení však může způsobit, že se klienti silně přidružují ke konkrétnímu serveru ve farmě s vyrovnáváním zatížení, což snižuje efektivitu vyrovnávání zatížení s kruhovým dotazováním. Pokud je toto chování nežádoucí, Keep-Alive http lze na serveru zakázat pomocí KeepAliveEnabled vlastnosti s definovaným Bindinguživatelem CustomBinding . Následující příklad ukazuje, jak to provést pomocí konfigurace.

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

Pomocí zjednodušené konfigurace zavedené v rozhraní .NET Framework 4 lze stejné chování provést pomocí následující zjednodušené konfigurace.

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

Další informace o výchozích koncových bodech, vazbách a chování najdete v tématu Zjednodušená konfigurace a zjednodušená konfigurace pro služby WCF.

Vyrovnávání zatížení pomocí vazby WSHttp a vazby WSDualHttp

WSHttpBinding Vyrovnávání zatížení lze provést pomocí technik vyrovnávání zatížení HTTP za předpokladuWSDualHttpBinding, že se ve výchozí konfiguraci vazby provede několik změn.

  • Vypněte vytvoření kontextu zabezpečení nebo použijte stavové relace zabezpečení. Zřízení kontextu zabezpečení lze vypnout nastavením EstablishSecurityContext vlastnosti na WSHttpBindingfalsehodnotu . Pokud používáte WSDualHttpBinding relace zabezpečení nebo relace zabezpečení, je možné použít stavové relace zabezpečení, jak je popsáno v části Zabezpečené relace. Stavové relace zabezpečení umožňují službě zůstat bezstavové, protože všechny stavy relace zabezpečení se přenášejí s každou žádostí jako součást tokenu zabezpečení ochrany. Chcete-li povolit stavovou relaci zabezpečení, musíte použít definovanou uživatelem CustomBindingBinding, protože potřebná nastavení konfigurace nejsou v systému zpřístupněna WSHttpBinding a WSDualHttpBinding.

  • Pokud vypnete zřízení kontextu zabezpečení, musíte také vypnout vyjednávání přihlašovacích údajů služby. Pokud ji chcete vypnout, nastavte NegotiateServiceCredential vlastnost na WSHttpBindingfalsehodnotu . Pokud chcete zakázat vyjednávání přihlašovacích údajů služby, možná budete muset explicitně zadat identitu koncového bodu v klientovi.

  • Nepoužívejte spolehlivé relace. Tato funkce je ve výchozím nastavení vypnutá.

Vyrovnávání zatížení vazby Net.TCP

NetTcpBinding Vyrovnávání zatížení může být vyváženo pomocí technik vyrovnávání zatížení vrstvy PROTOKOLU IP. Ve výchozím nastavení ale fondy NetTcpBinding připojení TCP snižují latenci připojení. Jedná se o optimalizaci, která koliduje se základním mechanismem vyrovnávání zatížení. Primární hodnotou konfigurace pro optimalizaci NetTcpBinding je časový limit zapůjčení, který je součástí Nastavení fondu Připojení. Připojení sdružování způsobí přidružení klientských připojení ke konkrétním serverům ve farmě. S nárůstem doby životnosti těchto připojení (faktor řízený nastavením časového limitu zapůjčení) se distribuce zatížení mezi různými servery ve farmě stane nevyváženou. Výsledkem je zvýšení průměrné doby volání. Pokud tedy používáte NetTcpBinding scénáře s vyrovnáváním zatížení, zvažte snížení výchozího časového limitu zapůjčení používaného vazbou. Časový limit zapůjčení 30 sekund je přiměřeným výchozím bodem pro scénáře s vyrovnáváním zatížení, i když optimální hodnota je závislá na aplikaci. Další informace o vypršení časového limitu zapůjčení kanálu a dalších kvótách přenosu najdete v tématu Kvóty přenosu.

Pokud chcete dosáhnout nejlepšího výkonu ve scénářích s vyrovnáváním zatížení, zvažte použití NetTcpSecurity (nebo TransportTransportWithMessageCredential).

Viz také