負載平衡
將 Windows Communication Foundation (WCF) 應用程式部署到負載平衡的伺服器陣列來加以放大,就是一種擴大應用程式容量的方法。 WCF 應用程式可以透過標準負載平衡技術來達到負載平衡,這類技術包括 Windows 網路負載平衡等軟體負載平衡器,以及硬體架構的負載平衡裝置。
下列各節會討論在針對使用各種系統提供繫結所建置 WCF 應用程式進行負載平衡時的考量。
使用基本 HTTP 繫結的負載平衡
從負載平衡的觀點而言,使用 BasicHttpBinding 通訊的 WCF 應用程式與其他常見的 HTTP 網路流量類型 (靜態 HTML 內容、ASP.NET 網頁或 ASMX Web 服務) 並無不同。 使用這個繫結的 WCF 通道原本是無狀態 (Stateless),而且會在通道關閉時終止其連線。 因此,BasicHttpBinding 可搭配現有的 HTTP 負載平衡技術正常運作。
根據預設,BasicHttpBinding 會在訊息中傳送包含 Keep-Alive
值的連線 HTTP 標頭,該值可以讓使用者建立服務 (指支援使用者的服務) 的持續連線。 這項組態會改進處理能力,因為先前建立的連線可以重複使用,並將後續訊息傳送到相同的伺服器。 不過,重複使用連線可能會使用戶端與負載平衡陣列內的特定伺服器產生強烈的關聯性,這樣就會降低循環配置資源的有效性。 如果不希望發生這種行為,請針對 Keep-Alive
或使用者定義的 KeepAliveEnabled 使用 CustomBinding 屬性,停用伺服器上的 HTTP Binding。 下列範例會示範如何使用組態來做到這點。
<?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 中導入的簡化組態時,就可以透過下列簡化組態完成相同的行為。
<?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>
如需預設端點、繫結和行為的詳細資訊,請參閱簡化的組態和 WCF 服務的簡化組態。
使用 WSHttp 繫結和 WSDualHttp 繫結的負載平衡
只要對預設的繫結組態進行一些修改,即可透過 HTTP 負載平衡技術來使 WSHttpBinding 與 WSDualHttpBinding 兩者達成負載平衡。
關閉資訊安全內容建立或使用具狀態安全性工作階段。 藉由將 WSHttpBinding 上的 EstablishSecurityContext 屬性設定為
false
,即可關閉資訊安全內容建立。 如果需要使用 WSDualHttpBinding 或安全性工作階段,則可使用如安全工作階段中所述的具狀態安全性工作階段。 具狀態的安全性工作階段讓服務能夠保持無狀態,因為安全性工作階段的所有狀態都會隨著每項要求傳輸為保護安全性權杖的一部分。 若要啟用具狀態安全性工作階段,您必須使用 CustomBinding 或使用者定義的 Binding,因為系統提供的 WSHttpBinding 和 WSDualHttpBinding 上不會公開必要的組態設定。如果您關閉資訊安全內容建立,您也需要關閉服務認證交涉。 若要將其關閉,請將 WSHttpBinding 上的 NegotiateServiceCredential 屬性設定為
false
。 若要停用服務認證交涉,您可能需要在用戶端上明確指定端點身分識別。請勿使用可靠工作階段。 這項功能預設為關閉。
負載平衡 Net.TCP 繫結
NetTcpBinding 可以使用 IP 層負載平衡技術來達成負載平衡。 不過,根據預設,NetTcpBinding 會建立 TCP 連線集區來縮短連線延遲時間。 這種最佳化方式會干擾到負載平衡的基本機制。 進行 NetTcpBinding 最佳化的主要組態值是租用逾時,這個值是「連線集區設定」的一部分。 連線集區會導致用戶端連線與陣列內的特定伺服器產生關聯。 隨著這些連線的存留期 (Lifetime) 延長 (由租用逾時設定所控制的因素),在陣列內各個伺服器中的負載散佈會出現不平衡的情形。 結果一來,就會提高平均的呼叫時間。 所以,當您在負載平衡案例中使用 NetTcpBinding 時,請考慮降低繫結所使用的預設租用逾時。 對負載平衡案例來說,30 秒的租用逾時是合理的起始值,不過最佳值會視應用程式而定。 如需通道租用逾時和其他傳輸配額的詳細資訊,請參閱傳輸配額。
為了在負載平衡案例中創造最佳效能,請考慮使用 NetTcpSecurity (Transport 或 TransportWithMessageCredential)。