Freigeben über


Windows Azure 웹 사이트에서 ARR 인스턴스에 선호도를 사용 하지 않도록 설정하기

Windows Azure 웹 사이트에서 ARR 인스턴스에 선호도를 사용 하지 않도록 설정

이 포스트는, 11월 19일에 게시된 Disabling ARR 's Instance Affinity in Windows Azure Web Sites 의 번역본 입니다.

편집메모 : 이번에는 Windows Azure 웹 사이트 팀에서 프로그램 관리자를 맡고 있는 Erez Benari의 한 기사를 소개합니다.

웹 사이트를 확장하는 경우 Windows Azure 웹 사이트에서 웹 사이트의 인스턴스를 여러개 설치하는 방법이 효과적입니다. Windows Azure는 IIS 확장 응용 프로그램 요청 라우팅 (ARR, 영문) 을 사용하여 활성 인스턴스 사이에서 사용자 할당을 결정합니다. ARR는 연결 중인 사용자를 특수한 쿠키 ( 선호도 쿠키)로 추적합니다. 이렇게 하면 후속 요청에 대해, 각 사용자가 서버 인스턴스와 통신하고 있는지를 파악하는 것이 가능합니다. 이러한 방법으로, 클라이언트는 특정 서버 인스턴스 간에 세션을 설정하여 세션이 활성 상태인 동안 동일한 서버와 통신합니다. 이것은 세션에 민감한 응용 프로그램 (상태 비저장 응용 프로그램)에 특히 중요합니다. 세션 관련 데이터 자체가 특정 서버에서 다른 서버로 이동할 수 없습니다. 세션 데이터를 SQL 등의 공유 저장소에 저장하는 방법과 같이 서버 간에 이동할 수 있도록 응용 프로그램을 디자인할 수 있습니다, 그러나 대부분의 응용 프로그램은 해당 되지 않습니다. 이 때문에 각 사용자가 특정 서버와 통신을 계속할 수 있도록 해야 합니다. 사용자가 다른 서버로 이동할 때 새로운 세션이 시작되고 응용 프로그램을 사용하여 세션 데이터 (장바구니의 내용 등)는 모두 삭제 됩니다. 이 일련의 과정에 대해 쉽게 정리했습니다.

  1. 클라이언트가 Windows Azure 웹 사이트의 웹 사이트에 연결합니다.
  2. ARR이 프런트 엔드 데이터베이스 서버에서 실행 되는 요청을 받습니다.
  3. 사용 가능한 인스턴스 내에서 요청을 수행하는 인스턴스를 ARR이 결정합니다.
  4. ARR에서 선택한 서버에 요청을 전달한다. 이 때, 요청에 대해 ARRAffinity 쿠키를 생성하여 첨부합니다.
  5. ARRAffinity 쿠키를 유지하면서 클라이언트에 응답을 반환합니다.
  6. 클라이언트에서 요청을 수신하면 나중에 사용할 수 있도록 쿠키를 저장합니다. (브라우저는 서버에서 받은 쿠키를 저장하도록 디자인되어 있습니다.)
  7. 클라이언트가 다음 요청을 보내는 경우 저장된 쿠키가 요청에 포함됩니다.
  8. ARR에서 요청을 수신 하면 쿠키를 디코딩합니다.
  9. 디코딩된 쿠키에는 먼저 사용된 인스턴스 이름이 포함됩니다.. 따라서 ARR 인스턴스를 풀 중에서 선택하는 대신, 동일한 인스턴스에 이 요청을 전달합니다.
  10. 동일한 사이트에서 계속 요청을 보낼 때마다 위의 7-9번 스탭이 반복됩니다.. 사용자가 브라우저를 닫으면 이 프로세스를 종료하고 이 시점에 쿠키는 삭제됩니다.

 

하지만 선호도를 유지 하지 않는 편이 좋은 경우도 있습니다. 예를 들어, 사용자가 브라우저를 닫지 않고 연결이 유지 된 상태로 있으면 선호도 쿠키는 브라우저에 저장되고 사용자는 몇 시간, 며칠 또는 심지어 더 오랫동안 (이론적으로는 무제한) 서버에 연결된 상태로 유지 됩니다. 컴퓨터를 켠 상태에서 브라우저가 열려 진 상태로 유지하는 것이 일반적이고, 특히 업무용 컴퓨터에는 더 흔 합니다. 실제로, 이 때문에 인스턴스에 대한 사용자 지정이 균형있게 이뤄 지지 않을 수 있습니다.(이것은 슈퍼마켓에서 한명의 고객을 등록하다가 대기가 길어져, 다른 손님이 평소 보다 오래 기다려야 할 것과 유사합니다.)

응용 프로그램이나 응용 프로그램의 실행 형태에 따라 서버에 연결된 사용자 요청을 어떻게 처리할 지 걱정이 되실 수도 있겠습니다. 이런 방식을 사용할 필요가 없는 경우 오히려 이 선호도를 사용하지 않도록 설정하여 더 나은 부하 분산에 유리한 방식으로 설정 변경을 할수 있는 기능을 도입 했습니다.

선호도 쿠키로 선호도를 제어하기 때문에 Windows Azure가 쿠키를 허용하지 않도록 하는 선호도를 비활성화할 수 있습니다. 사용하지 않도록 설정하면 사용자가 보낸 후속 요청은 새로운 요청으로 처리 됩니다. ARR 요청을 「 사용자 」 서버로 라우팅하지 않고 부하 분산 처리를 적용하여 최적의 서버에 라우팅합니다.

아래 그림에서는 선호도 쿠키 예입니다.

 

선호도를 사용 하지 않도록 설정 하는 방법에는 다음 두 가지가 있습니다.

  1. 응용 프로그램 설정
  2. 사이트의 구성 설정

응용 프로그램에서는 ARR 선호도 쿠키 삭제를 요구하는 특수한 HTTP 헤더를 전송하는 코드를 작성해야 합니다. Arr-Disable-Session-Affinity 헤더를 true로 설정하면 ARR 선호도 쿠키를 삭제합니다. 응용 프로그램에 추가하는 코드는 다음과 같습니다.

headers. Add("Arr-Disable-Session-Affinity", "True");

*이 예제는 C#입니다. 다른 언어 및 플랫폼에도 유사하게 간단한 코드를 추가하기만 하면 됩니다.

응용프로그램 실행과정 대부분에서 선호도를 유지하면서 응용 프로그램의 특정 페이지에만 다시 설정하는 경우에는 이 방법을 이용하시는 것이 좋습니다. 대신 선호도를 완전히 비활성화 하는 경우 IIS가 헤더를 직접 삽입하여 ARR이 항상 쿠키를 삭제하도록 설정할 수 있습니다. web.config 구성 섹션의 customHeaders 에 지정할 수 있습니다. 다음 코드를 web.config에 추가하고 사이트의 루트에 업로드할 수 있습니다.

 

주의하실 점은 web.config 구성이 섬세하고, 파일의 설정을 잘못 사용하면 사이트가 제대로 작동하지 않게 될 수 있다는 것 입니다. 이전에 web.config 파일을 변경해 보신 경험이 없는 경우에는 시작 안내서 (영문) 를 읽어보십시오.

문제해결

이를 구현하는 경우의 동작 확인 및 문제 해결에 대해 설명합니다. ARR 선호도 쿠키는 일반적으로 Windows Azure 웹 사이트에서 실행되는 웹 사이트에서 받는 첫 번째 응답에 포함되어 있으며, 그 후에도 클라이언트에서 보낸 요청으로 서버에서 보낸 응답에 포함됩니다. 이것이 원인이 되어 있는지 확인하려면 HTTP 문제 해결 및 진단에 대한 다양한 도구를 사용할 수 있습니다. 다음은 중요한 것입니다.

  1. Fiddler
  2. HTTPWatc
  3. Network Monitor
  4. WireShark
  5. Firebug

이 쪽의 페이지 (영문) 에는 위의 리스트 이외의 도구 몇 가지를 소개 하고 있습니다. 첫 번째인 Fiddler는 모든 브라우저와 상호 작용하고 또한 무료로 사용할 수 있는 매우 인기 있는 도구입니다. Fiddler를 설치하면, 방문한 페이지의 URL이 기록되는 각 요청 및 응답에서 [Inspector] 탭을 클릭하면 자세한 정보를 확인할 수 있습니다. 예를 들어 아래 그림의 탭에 Set-Cookie 헤더를 사용하여 서버에서 보낸 선호도 쿠키를 표시 합니다.

 

Arr-Disable-Session-Affinity 헤더를 추가하여 선호도 쿠키를 비활성화 하면 ARR이 쿠키를 설정하지 않습니다. 그러나 이 경우에는 Arr-Disable-Session-Affinity 헤더 자체는 삭제되므로 작업이 성공적으로 실행된 경우에는 모두 표시되지 않습니다. 쿠키와 헤더가 모두 표시 되는 경우에는 헤더를 설정하는 방법이 뭔가 잘못된 것입니다. 헤더 또는 헤더의 값을 지정하는 텍스트가 잘못되었을 수 있습니다. 또한 머리글이 표시 되지 않는 경우, web.config 파일의 변경 내용이 잘못 되었거나 헤더에 삽입된 코드가 제대로 작동하지 않을 수 있습니다. 이것은 다른 관련 헤더를 추가하여 확인할 수 있습니다. 일반적으로 헤더를 설정하는 코드보다 web.config를 구성하는 것이 더 쉽습니다. 의심스러운 경우에는 조사 대상 범위를 좁히기 위해 먼저 간단하게 하는 것을 권장합니다.

마지막으로, 선호도의 비활성화를 무조건 설정하시는 경우 문제가 발생할 수 있습니다. 정적 콘텐츠에서는 별로 문제가 될 것은 없지만, 사용자가 사용하는 서버가 변경될 경우에 대처하지 않는 응용 프로그램에서는 문제가 발생할 수 있습니다. 선호도설정으로 부하 분산에 이상이 발생하는 것으로 확인 된 경우에는 이러한 새 기능을 활용하는 것이 좋습니다.