다음을 통해 공유


부하 분산

WCF(Windows Communication Foundation) 응용 프로그램의 용량을 높이는 한 가지 방법은 이러한 응용 프로그램을 부하가 분산된 서버 팜에 배포하여 확장하는 것입니다. WCF 응용 프로그램에서는 Windows 네트워크 부하 분산과 같은 소프트웨어 부하 분산 장치와 하드웨어 기반의 부하 분산 장치 등 표준 부하 분산 기술을 사용하여 부하를 분산할 수 있습니다.

다음 단원에서는 여러 가지 시스템 제공 바인딩을 사용하여 부하 분산 WCF 응용 프로그램을 빌드할 때의 고려 사항에 대해 설명합니다.

기본 HTTP 바인딩을 사용한 부하 분산

부하 분산 측면에서 볼 때, BasicHttpBinding을 사용하여 통신하는 WCF 응용 프로그램은 정적 HTML 콘텐츠, ASP.NET 페이지 또는 ASMX 웹 서비스와 같은 다른 일반적인 형식의 HTTP 네트워크 트래픽과 다르지 않습니다. 이 바인딩을 사용하는 WCF 채널은 기본적으로 상태 비저장 채널이고 채널이 닫힐 때 연결을 종료합니다. 따라서 BasicHttpBinding은 기존의 HTTP 부하 분산 기술과 호환됩니다.

기본적으로 BasicHttpBindingKeep-Alive 값을 사용하여 메시지의 연결 HTTP 헤더를 보내는데, 이를 통해 클라이언트는 영구 연결을 지원하는 서비스에 대해 이러한 연결을 설정할 수 있습니다. 또한 이 구성에서는 이전에 설정된 연결을 다시 사용하여 이후 메시지를 동일한 서버에 보낼 수 있으므로 처리량을 향상시킬 수 있습니다. 하지만 연결을 다시 사용하면 클라이언트가 부하 분산 팜의 특정 서버에만 강력하게 연결되어 라운드 로빈 부하 분산의 효율성이 떨어집니다. 이를 방지하려면, CustomBinding 또는 사용자 정의 BindingKeepAliveEnabled 속성을 사용하여 서버에서 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="https://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 바인딩을 사용한 부하 분산

기본 바인딩 구성을 일부 수정한다면, HTTP 부하 분산 기술을 사용하여 WSHttpBindingWSDualHttpBinding을 모두 부하 분산할 수 있습니다.

  • 보안 컨텍스트 설정 해제: 이 작업은 WSHttpBindingEstablishSecurityContext 속성을 false로 설정하여 수행할 수 있습니다. 또는 보안 세션이 필요할 경우 보안 세션 항목에서 설명한 바와 같이 상태 저장 보안 세션을 사용할 수 있습니다. 상태 저장 보안 세션을 사용하면 보안 세션을 각 요청과 함께 보호 보안 토큰의 일부로 전송할 때 서비스의 상태를 비저장 상태로 유지할 수 있습니다. 상태 저장 보안 세션을 사용하려면, 필요한 구성 설정이 시스템에서 제공되는 WSHttpBindingWSDualHttpBinding에 노출되지 않으므로 CustomBinding 또는 사용자 정의 Binding을 사용해야 합니다.
  • 신뢰할 수 있는 세션은 사용하지 마십시오. 이 기능은 기본적으로 해제되어 있습니다.

Net.TCP 바인딩을 사용한 부하 분산

NetTcpBinding은 IP 계층 부하 분산 기술을 사용하여 부하 분산될 수 있습니다. 하지만 NetTcpBinding은 연결 대기 시간을 줄이기 위해 기본적으로 TCP 연결을 풀링합니다. 이러한 최적화 작업은 기본 부하 분산 메커니즘과 충돌하게 됩니다. NetTcpBinding을 최적화하기 위한 기본 구성 값은 연결 풀 설정의 일부인 대여 시간 제한입니다. 연결을 풀링하면 클라이언트 연결이 팜 내의 특정 서버와 이루어지게 됩니다. 이러한 연결 수명은 대여 시간 제한 설정으로 제어할 수 있지만 수명이 늘어나면 팜 내 여러 서버 간에 부하 분산 균형이 맞지 않게 됩니다. 결과적으로 평균 호출 시간이 늘어납니다. 따라서 NetTcpBinding을 부하 분산 시나리오에 사용할 때는 이 바인딩에서 사용하는 기본 대여 시간 제한을 줄이는 것이 좋습니다. 응용 프로그램에 따라 최적 값이 다르겠지만 부하 분산 시나리오에 적절한 대여 시간 제한은 30초부터입니다. 채널 대여 시간 제한 및 기타 전송 할당량에 대한 자세한 내용은 전송 할당량을 참조하십시오.

부하 분산 시나리오에서 성능을 최대화하려면 NetTcpSecurity(Transport 또는 TransportWithMessageCredential)를 사용하는 것이 좋습니다.

참고 항목

개념

인터넷 정보 서비스 호스팅을 위한 최선의 방법