2013-06-25 2 views
1

HTTP 파이프 라이닝 모드에서 동일한 TCP 소켓에 동시에 도착하는 여러 HTTP 요청을 처리 할 수 ​​있도록 IIS를 구성 할 수 있습니까?IIS 및 HTTP 파이프 라이닝, 병렬 처리 요청

HTTP 파이프 라이닝을 사용하여 단일 TCP 소켓에서 웹 클라이언트가 여러 요청을 처리하는 데 문제가 있습니다. 클라이언트는 기본적으로 한 번에 10 개의 요청을 보낸 다음 서버가 요청과 동일한 순서로 10 개의 응답을 보냅니다. 우리 서버는 각 요청마다 꽤 많은 시간이 걸리고 대부분 외부 IO를 기다리고 있습니다. IIS가 모든 10 개의 요청을 병렬로 처리하기 시작할 수 있다면 클라이언트가 올바른 순서로 응답을 직렬화하면 훨씬 더 효율적입니다. 물론, 서버는 응답을 캐싱 할 방법이 필요합니다. 응답 3은 응답 2보다 먼저 사용할 수 있습니다.

어떻게 든 가능합니까? 어쩌면 이것은 IIS에서 불가능하거나 잘못된 키워드를 찾고있을뿐입니다 ... 우리는 Windows Server 2008 R2에서 IIS 7.5 및 ASP.NET 4.5를 실행하고 있습니다.

답변

3

IIS 7.5에서 같은 문제가 발생했습니다.

우리의 솔루션은 "웹 가든"을 활성화하는 것이 었습니다 ... 그리고 실제로 정말 잘 작동합니다! 그것은 단지 "세션"기반 웹 사이트를 가질 수 없다는 것입니다. 따라서 "로그인하는"클라이언트가있는 경우 프로세스를 다시 구성해야합니다. (우리는 암호화 된 토큰을 저장하기 위해 쿠키를 사용했습니다 - 어쨌든 요점을 제외하고는).

로 이동 :

  1. 인터넷 정보 서비스> 응용 프로그램 풀
  2. 풀은
  3. 고급 설정을 클릭 (당신이 사이트 당 풀을 가져야한다)를 사용하고 선택 ...
  4. 찾기 " 최대 근로자 프로세스 "와 크랭크 그 빨판!

지금까지 밀어 넣은 프로세스의 양은 시스템에있는 RAM의 양에 따라 달라집니다. 물론 자신을 모니터하고 제어 할 수 있습니다.

"웹 가든"을 사용하도록 설정하면 프로세스 탐색기 또는 유사한 기능을 사용하면 IIS가 각 요청에 대해 지정한 최대 개수까지 w3wp.exe의 새 인스턴스를 생성합니다. 새로운 요청은 사용 가능한 다음 Worker Process를 통해 처리되므로 진정한 IIS 병렬 요청 처리가 가능합니다. 두 요청이 서로의 순간에 들어오고 요청 1이 요청 1보다 먼저 완료되면 요청 2가 응답을 보냅니다. 모든 웹을 통해 모든 사용자의 요청이 바로 큐에 추가되고, 최대 (녹색)을 구축하고있는 동안 당신이 볼 수 있듯이

+0

웹 가든 모드가 HTTP 파이프 라이닝과 관련이 있는지 의심 스럽습니다. 어쩌면 앱에서 버그를 막는 교차 요청을 해결할 수있었습니다. – usr

2

This is an impressive illustration of the IIS fail.

- 만 1 싱글 요청 (블루)를 실행한다.

이것은 실제로 질문에 대답하지 않지만,이 비참한 상황에 대한 아름다운 그림입니다.

2

IIS는 HTTP를 사용하는 HTTP server api을 사용합니다.sys); 그래서 간단한 테스트 한 -

내가 관찰 나는 두 번에 HttpReceiveHttpRequest라고하면 (첫 번째 요청에 대한 응답을 보내지 않고) 서버는 두 번째 요청 (기본적으로 두 번째 호출 블록)을 수신하지 않습니다. 이는 PUTGET 요청에 모두 해당됩니다.

실제로 HTTP.sys는 단일 연결에서 IIS에 대한 요청을 직렬화하는 것처럼 보입니다. 이 동작을 수정할 수있는 configuration on HTTP.sys을 찾을 수 없습니다.