WCF負載平衡基礎知識解析
WCF是一個由微軟公司開發的開發插件,它是一個建立在是建立在.Net Framework 2.0基礎之上的.Net Framework 3.0重要組件。在這篇文章中,我們會了解到其中一個比較基礎的WCF負載平衡的相關內容。#t#
提高 Windows Communication Foundation (WCF) 應用程序能力的方法之一是通過把它們部署到負載平衡的服務器場來擴展它們。使用標準的負載平衡技術,包括諸如 Windows 網絡負載平衡這樣的軟件負載平衡器以及基于硬件的負載平衡設備,可以使 WCF 應用程序實現負載平衡。
以下各節討論對使用各種系統提供的綁定生成的 WCF 應用程序實現負載平衡時的注意事項。
基本 HTTP 綁定的WCF負載平衡
從負載平衡的角度看,使用 BasicHttpBinding 進行通信的 WCF 應用程序與其他普通類型的 HTTP 網絡流量(如靜態 HTML 內容、ASP.NET 頁或 ASMX Web 服務)并沒有什么區別。使用此綁定的 WCF 通道本質上是無狀態的,當通道關閉時,其連接也會終止。因此,BasicHttpBinding 可以很好地與現有的 HTTP 負載平衡技術一起使用。
默認情況下,BasicHttpBinding 會在消息中發送一個具有 Keep-Alive 值的連接 HTTP 標頭,該標頭可讓客戶端建立到支持這些客戶端的服務的持續連接。這種配置具有高的吞吐量,因為可以重新使用以前建立的連接向同一個服務器發送后續消息。然而,重新使用連接可能導致客戶端與負載平衡場中的特定服務器密切關聯,從而降低循環負載平衡的效率。如果不需要此行為,則可以使用 CustomBinding 或用戶定義的 Binding 在使用 KeepAliveEnabled 屬性的服務器上禁用 HTTP Keep-Alive。下面的示例演示如何使用配置來執行該操作。
- < ?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>
WSHttp 綁定和 WSDualHttp 綁定的WCF負載平衡
如果對默認的綁定配置進行一些修改,則 WSHttpBinding 和 WSDualHttpBinding 都可以使用 HTTP 負載平衡技術來實現負載平衡。
關閉安全上下文的建立:這可以通過將 WSHttpBinding 上的 EstablishSecurityContext 屬性設置為 false 來完成。或者,如果需要安全會話,則可以按照 安全會話 主題中的說明,使用有狀態安全會話。有狀態安全會話使服務保持無狀態,因為安全會話的所有狀態都隨每個請求作為保護安全令牌的一部分進行傳輸。請注意,若要啟用有狀態安全會話,必須使用 CustomBinding 或用戶定義的 Binding,因為系統提供的 WSHttpBinding 和 WSDualHttpBinding 上并不會公開必需的配置設置。
不要使用可靠會話。默認情況下此功能處于關閉狀態。
使 Net.TCP 綁定實現WCF負載平衡
可以使用 IP 層負載平衡技術實現 NetTcpBinding 的負載平衡。不過,默認情況下,NetTcpBinding 會匯集 TCP 連接以減少連接延遲。這是一種干擾負載平衡基本機制的優化。用于優化 NetTcpBinding 的主配置值是租約超時,它是連接池設置的一部分。連接池導致客戶端連接與場內特定的服務器關聯。隨著這些連接的生存期的增加(一個受租約超時設置控制的因素),場內不同服務器上的負載分布會變得不平衡。結果使平均調用時間增加。因此,在負載平衡方案中使用 NetTcpBinding 時,應考慮減少由綁定使用的默認租約超時。雖然租約超時的最佳值取決于應用程序,但 30 秒的租約超時對于負載平衡方案不失為一個合理的始點。有關通道租約超時和其他傳輸配額的更多信息,請參見傳輸配額。
若要在WCF負載平衡方案中獲得最佳性能,請考慮使用 NetTcpSecurity(Transport 或 TransportWithMessageCredential)。