Terheléselosztás
A Windows Communication Foundation (WCF) alkalmazások kapacitásának növelésének egyik módja, ha vertikálisan felskálázza őket egy elosztott terhelésű kiszolgálófarmba való üzembe helyezéssel. A WCF-alkalmazások terheléselosztása szabványos terheléselosztási technikákkal végezhető el, beleértve a szoftveres terheléselosztókat, például a Windows hálózati terheléselosztást, valamint a hardveralapú terheléselosztási berendezéseket.
A következő szakaszok a különböző rendszer által biztosított kötések használatával létrehozott WCF-alkalmazások terheléselosztásának szempontjait ismertetik.
Terheléselosztás az alapszintű HTTP-kötéssel
A terheléselosztás szempontjából a HTTP-hálózati forgalom más gyakori típusaitól (statikus HTML-tartalom, ASP.NET lapok vagy ASMX Web Services) eltérő WCF-alkalmazások BasicHttpBinding nem különböznek. A kötést használó WCF-csatornák eredendően állapot nélküliek, és a csatorna bezárásakor megszakítják a kapcsolatokat. Így a BasicHttpBinding meglévő HTTP-terheléselosztási technikák jól működnek.
Alapértelmezés szerint a BasicHttpBinding rendszer egy kapcsolati HTTP-fejlécet küld egy Keep-Alive
értékkel rendelkező üzenetekben, amely lehetővé teszi, hogy az ügyfelek állandó kapcsolatokat létesíthessenek az őket támogató szolgáltatásokkal. Ez a konfiguráció megnövelt átviteli sebességet biztosít, mivel a korábban létrehozott kapcsolatok újra felhasználhatók a következő üzenetek ugyanazon kiszolgálóra való küldéséhez. A kapcsolat újrafelhasználása azonban azt eredményezheti, hogy az ügyfelek erősen kötődnek egy adott kiszolgálóhoz a terheléselosztási farmon belül, ami csökkenti a ciklikus időszeleteléses terheléselosztás hatékonyságát. Ha ez a viselkedés nem kívánatos, a HTTP Keep-Alive
letiltható a kiszolgálón egy KeepAliveEnabled vagy felhasználó által definiált CustomBindingBindingtulajdonság használatával. Az alábbi példa bemutatja, hogyan teheti ezt meg konfigurációval.
<?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>
A .NET-keretrendszer 4-ben bevezetett egyszerűsített konfigurációval ugyanez a viselkedés az alábbi egyszerűsített konfigurációval valósítható meg.
<?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>
Az alapértelmezett végpontokkal, kötésekkel és viselkedésekkel kapcsolatos további információkért lásd a WCF-szolgáltatások egyszerűsített konfigurációját és egyszerűsített konfigurációját.
Terheléselosztás a WSHttp-kötéssel és a WSDualHttp-kötéssel
WSHttpBinding A http-terheléselosztási technikákkal a terheléselosztás és a WSDualHttpBinding terheléselosztás is kiegyensúlyozható, feltéve, hogy az alapértelmezett kötéskonfiguráció számos módosítást végez.
Kapcsolja ki a biztonsági környezet létrehozását, vagy használjon állapotalapú biztonsági munkameneteket. A biztonsági környezet létrehozása kikapcsolható, ha a EstablishSecurityContext tulajdonságot a WSHttpBinding következőre
false
állítja. Ha ön használ WSDualHttpBinding vagy biztonsági munkamenetekre van szükség, a biztonságos munkamenetekben leírtaknak megfelelően használhat állapotalapú biztonsági munkameneteket. Az állapotalapú biztonsági munkamenetek lehetővé teszik a szolgáltatás állapot nélküli állapotának megőrzését, mivel a rendszer minden kéréssel a védelmi biztonsági jogkivonat részeként továbbítja a biztonsági munkamenet összes állapotát. Az állapotalapú biztonsági munkamenet engedélyezéséhez egy CustomBinding vagy felhasználó által definiált Bindingmunkamenetet kell használnia, mivel a szükséges konfigurációs beállítások nem érhetők el a rendszer által biztosított WSHttpBinding és WSDualHttpBinding.Ha kikapcsolja a biztonsági környezet létrehozását, a Szolgáltatás hitelesítő adatainak egyeztetését is ki kell kapcsolnia. A kikapcsolásához állítsa be a NegotiateServiceCredential tulajdonságot a WSHttpBinding következőre
false
: . A Szolgáltatás hitelesítő adatainak egyeztetésének letiltásához előfordulhat, hogy explicit módon meg kell adnia a végponti identitást az ügyfélen.Ne használjon megbízható munkameneteket. Ez a funkció alapértelmezés szerint ki van kapcsolva.
A Net.TCP-kötés terheléselosztása
A NetTcpBinding terheléselosztás IP-rétegbeli terheléselosztási technikákkal kiegyensúlyozott lehet. A tcp-kapcsolatokat azonban alapértelmezés szerint a NetTcpBinding kapcsolat késésének csökkentése érdekében készletezi. Ez egy optimalizálás, amely zavarja a terheléselosztás alapvető mechanizmusát. A bérlet időkorlátjának optimalizálásához NetTcpBinding az elsődleges konfigurációs érték a Csatlakozás ionkészlet Gépház része. Csatlakozás készletezés hatására az ügyfélkapcsolatok a farm adott kiszolgálóihoz lesznek társítva. A kapcsolatok élettartamának növekedésével (a bérlet időtúllépési beállítása által szabályozott tényező) a farm különböző kiszolgálói közötti terheléselosztás kiegyensúlyozatlanná válik. Ennek eredményeként az átlagos hívási idő nő. A terheléselosztásos forgatókönyvek használatakor NetTcpBinding érdemes lehet csökkenteni a kötés által használt alapértelmezett bérletidőkorlátot. A 30 másodperces bérletidőkorlát ésszerű kiindulópont a terheléselosztásos forgatókönyvekhez, bár az optimális érték alkalmazásfüggő. A csatornabérlet időtúllépéséről és az egyéb szállítási kvótákról további információt a szállítási kvóták című témakörben talál.
A terheléselosztásos forgatókönyvekben a legjobb teljesítmény érdekében fontolja meg a (vagyTransportWithMessageCredentialTransport) használatát NetTcpSecurity .