Aracılığıyla paylaş


Yük Dengeleme

Windows Communication Foundation (WCF) uygulamalarının kapasitesini artırmanın bir yolu, bunları yük dengeli bir sunucu grubuna dağıtarak ölçeği genişletmektir. WCF uygulamaları, Windows Ağ Yükü Dengeleme gibi yazılım yük dengeleyicileri ve donanım tabanlı yük dengeleme gereçleri dahil olmak üzere standart yük dengeleme teknikleri kullanılarak yük dengelenebilir.

Aşağıdaki bölümlerde, sistem tarafından sağlanan çeşitli bağlamalar kullanılarak oluşturulan WCF uygulamalarının yük dengelemesi konusunda dikkat edilmesi gerekenler açıklanmıştır.

Temel HTTP Bağlaması ile Yük Dengeleme

Yük dengeleme açısından bakıldığında, kullanarak BasicHttpBinding iletişim kuran WCF uygulamaları diğer yaygın HTTP ağ trafiği türlerinden (statik HTML içeriği, ASP.NET sayfaları veya ASMX Web Hizmetleri) farklı değildir. Bu bağlamayı kullanan WCF kanalları doğal olarak durum bilgisizdir ve kanal kapandığında bağlantılarını sonlandırır. Bu nedenle, BasicHttpBinding mevcut HTTP yük dengeleme teknikleriyle iyi çalışır.

Varsayılan olarak, BasicHttpBinding değeri olan Keep-Alive iletilere bağlantı HTTP üst bilgisi gönderir ve bu da istemcilerin bunları destekleyen hizmetlere kalıcı bağlantılar kurmasını sağlar. Daha önce kurulan bağlantılar aynı sunucuya sonraki iletileri göndermek için yeniden kullanılabilir olduğundan bu yapılandırma gelişmiş aktarım hızı sunar. Ancak, bağlantının yeniden kullanılması, istemcilerin yük dengelemeli sunucu grubundaki belirli bir sunucuya güçlü bir şekilde bağlanmasına neden olabilir, bu da dairevi yük dengelemenin etkinliğini azaltır. Eğer bu davranış istenmeyen bir durumsa, Keep-Alive özelliği veya kullanıcı tanımlı KeepAliveEnabled ile CustomBinding sunucuda HTTP Binding devre dışı bırakılabilir. Aşağıdaki örnekte, yapılandırma kullanılarak bunun nasıl yapılacağını gösterilmektedir.

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

.NET Framework 4'te sunulan basitleştirilmiş yapılandırma kullanılarak, aynı davranış aşağıdaki basitleştirilmiş yapılandırma kullanılarak gerçekleştirilebilir.

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

Varsayılan uç noktalar, bağlamalar ve davranışlar hakkında daha fazla bilgi için bkz. WCF Hizmetleri için Basitleştirilmiş Yapılandırma ve Basitleştirilmiş Yapılandırma.

WSHttp Bağlantısı ve WSDualHttp Bağlantısı ile Yük Dengeleme

WSHttpBinding Hem hem deWSDualHttpBinding, varsayılan bağlama yapılandırmasında çeşitli değişiklikler yapılması koşuluyla HTTP yük dengeleme teknikleri kullanılarak yük dengelenebilir.

  • Güvenlik Bağlamı Oluşturma özelliğini kapatın veya durumlu güvenlik oturumlarını kullanın. Güvenlik Bağlamı Kurulumu, EstablishSecurityContext özelliği WSHttpBinding üzerinde false olarak ayarlanarak kapatılabilir. WSDualHttpBinding kullanıyorsanız veya güvenlik oturumları gerekiyorsa, Güvenli Oturumlar'da açıklandığı gibi, durum bilgisi olan güvenlik oturumlarını kullanabilirsiniz. Durum bilgisine sahip güvenlik oturumları, tüm güvenlik oturumu durumu koruma güvenlik belirteciyle birlikte her istekle aktarıldığı için hizmetin durumsuz kalmasını sağlar. Durum bilgisi olan bir güvenlik oturumunu etkinleştirmek için, sistem tarafından sağlanan CustomBinding ve Binding üzerinde gerekli yapılandırma ayarları gösterilmediğinden WSHttpBinding veya kullanıcı tanımlı WSDualHttpBinding kullanmanız gerekir.

  • Güvenlik Bağlamı Oluşturma'yı kapatırsanız, Hizmet Kimlik Bilgisi Anlaşması'nın da kapatılması gerekir. Kapalı konuma getirmek için NegotiateServiceCredential özelliğini WSHttpBinding üzerinde false olarak ayarlayın. Hizmet Kimlik Bilgisi Anlaşması'nı devre dışı bırakmak için istemcide uç nokta kimliğini açıkça belirtmeniz gerekebilir.

  • Güvenilir oturumlar kullanmayın. Bu özellik varsayılan olarak kapalıdır.

Net.TCP Bağlantısını Yük Dengeleme

, NetTcpBinding IP katmanı yük dengeleme teknikleri kullanılarak yük dengelenebilir. Ancak, NetTcpBinding bağlantı gecikme süresini azaltmak için TCP bağlantılarını varsayılan olarak havuzlar. Bu, temel yük dengeleme mekanizmasını engelleyen bir iyileştirmedir. en iyi duruma getirmek NetTcpBinding için birincil yapılandırma değeri, Bağlantı Havuzu Ayarları'nın bir parçası olan kira zaman aşımıdır. Bağlantı havuzu, istemci bağlantılarının gruptaki belirli sunucularla ilişkilendirilmesine neden olur. Bu bağlantıların kullanım ömrü arttıkça (kira zaman aşımı ayarı tarafından denetlenen bir faktör), gruptaki çeşitli sunucular arasında yük dağılımı dengesiz hale gelir. Sonuç olarak ortalama çağrı süresi artar. Bu nedenle, yük dengeli senaryolarda NetTcpBinding kullanırken bağlama tarafından kullanılan varsayılan kiralama zaman aşımını azaltmayı düşünün. En uygun değer uygulamaya bağımlı olsa da, 30 saniyelik kira zaman aşımı, yük dengeli senaryolar için makul bir başlangıç noktasıdır. Kanal kiralama zaman aşımı ve diğer aktarım kotaları hakkında daha fazla bilgi için bkz . Aktarım Kotaları.

Yük dengeli senaryolarda en iyi performans için NetTcpSecurity kullanmayı, ya Transport veya TransportWithMessageCredential, göz önünde bulundurun.

Ayrıca bakınız