WAS(Windows Process Activation Service)의 기능

작성자 : Thomas Deml

IIS 7의 WAS(Windows Process Activation Service)는 웹 애플리케이션 및 웹 서비스에 프로세스 모델 및 구성 기능을 제공하는 핵심 구성 요소입니다. WAS 주요 작업은 애플리케이션 풀을 관리하는 것입니다. 애플리케이션 풀은 URL 그룹의 호스팅 환경을 나타내는 구성 컨테이너입니다.

HTTP 클라이언트가 URL을 요청할 때 HTTP.SYS 요청을 애플리케이션 풀 요청 큐에 매핑합니다. 애플리케이션 풀 요청 큐에 대한 작업자 프로세스는 WAS에 의해 생성되고 작업자 프로세스는 응답을 보내는 데 필요한 코드를 실행합니다. WAS의 기본 작업 중 하나는 생성된 작업자 프로세스를 관리하는 것입니다. 즉, WAS는 상태를 모니터링하고, 필요한 경우 재활용하며, 해당 AppPool 구성에 지정된 것보다 더 많은 리소스를 사용하지 않도록 합니다. WAS는 런타임 및 상태 데이터(예: 성능 카운터, 사이트 및 애플리케이션 풀 상태)의 중재자 및 수집기이기도 합니다.

아키텍처 다이어그램

IIS 7.0 아키텍처

프로세스 모델 기능

동일한 물리적 컴퓨터에서 호스트되는 10000개 이상의 웹 사이트를 지원하는 것은 오늘날의 대량 호스팅 환경에 대한 핵심 요구 사항입니다. 이러한 웹 사이트에서 실행되는 코드는 일반적으로 잘 테스트되지 않습니다. 이러한 요구 사항을 지원하려면 WAS는 강력한 프로세스 모델과 효율적인 리소스 관리를 제공해야 합니다.

효율적인 리소스 관리

주문형 활성화

다중 테넌트 시나리오에서는 RAM 및 CPU와 같은 리소스가 부족합니다. WAS는 특정 웹 사이트 또는 웹 애플리케이션에 대한 요청이 도착한 후에만 IIS 작업자 프로세스를 시작합니다.

유휴 시간 제한

리소스는 일반적으로 부족하기 때문에 WAS는 구성 가능한 유휴 시간 제한에 따라 웹 애플리케이션을 종료할 수 있습니다.

상태 모니터링

상태가 WAS가 생성한 작업자 프로세스를 모니터링하도록 합니다. 상태 메시지는 실행 중인 각 작업자 프로세스로 주기적으로 전송됩니다. 작업자 프로세스가 구성 가능한 시간 간격으로 응답하지 않으면 작업자 프로세스가 재활용되거나 종료됩니다. 이렇게 하면 작업자 프로세스를 다시 시작하여 작업자 프로세스에서 검색되지 않은 교착 상태가 자동으로 해결됩니다.

시작 제한

Rapid-Fail 보호 기능의 일부는 시작 제한입니다. 작업자 프로세스가 구성 가능한 시작 제한 내에서 WAS에 다시 보고하지 않으면 종료되고 Rapid-Fail-Protection 카운터가 증가합니다. 애플리케이션 풀이 중지됩니다. 즉, Rapid-Fail-Protection 카운터가 구성 가능한 시간 제한 내에서 구성 가능한 제한에 도달하면 작업자 프로세스를 다시 시작해도 더 이상 시도되지 않습니다. 이렇게 하면 시작 중에 작업자 프로세스가 중단되거나 충돌하는 시나리오가 방지됩니다.

종료 제한

작업자 프로세스도 구성 가능한 한도에서 종료해야 합니다. 이 시간에 종료가 발생하지 않으면 작업자 프로세스가 WAS에 의해 종료됩니다. 이렇게 하면 종료 단계에 중단된 프로세스로 인해 리소스가 과도하게 사용되지 않습니다. 추가 종료 설정을 사용하면 할당된 시간 내에 종료가 완료되지 않을 때 실행 파일(예: 디버거)을 시작할 수 있습니다.

CPU 선호도

구성 설정을 통해 WAS는 하나 이상의 CPU에 선호되는 작업자 프로세스를 시작할 수 있습니다. 이렇게 하면 테넌트가 동일한 물리적 컴퓨터를 공유하는 경우 서로 간섭하지 않습니다.

User Profile

WAS는 사용자 프로필을 로드하거나 로드하지 않고 작업자 프로세스를 시작할 수 있습니다.

보안

애플리케이션 풀 ID

IIS 작업자 프로세스는 사용자 지정 계정, 기본 제공 계정(LocalService, LocalSystem, NetworkService) 또는 애플리케이션 풀 ID(기본값)로 실행할 수 있습니다. 암호 관리가 필요하지 않고 애플리케이션 풀 ID가 최소 권한 원칙을 이미 준수하므로 애플리케이션 풀 ID를 사용하는 것이 좋습니다. 기본 제공 계정에는 암호 관리도 필요하지 않습니다. 사용자 지정 사용자 ID를 사용하는 경우 암호가 자동으로 암호화됩니다. 구성 설정은 컴퓨터 간에 구성 암호화 키를 공유하여 여러 컴퓨터에 복제할 수 있습니다.

작업 개체 기능

작업 개체를 사용하면 관리자가 작업자 프로세스를 특정 CPU 제한으로 제한할 수 있습니다. 이 CPU 제한을 초과하면 구성 가능한 작업이 수행됩니다. 또한 작업 개체는 작업자 프로세스에 의해 생성된 프로세스가 종료되도록 합니다.

구성 격리 및 보안

WAS가 애플리케이션 풀 및 해당 작업자 프로세스를 시작하기 전에 이 애플리케이션 풀에 대한 고유한 구성 파일을 생성합니다. 애플리케이션 풀에는 고유 ID에서 애플리케이션 풀을 실행하는 구성 설정도 있습니다. 그러나 동일한 ID를 사용하는 경우에도 격리를 수행할 수 있습니다. WAS는 각 애플리케이션 풀에 대해 고유한 SID(보안 식별자)를 만듭니다. 그런 다음, 애플리케이션 풀 구성 파일은 이 고유한 SID로 보호됩니다. 이렇게 하면 관리자와 애플리케이션 풀 자체에서만 애플리케이션 풀 구성 파일을 읽을 수 있습니다. 이 고유한 SID를 사용하여 파일 사용 권한도 구성할 수 있습니다.

진단 및 모니터링

이벤트 로깅

잘못된 구성, 재활용, 시작 또는 작업자 프로세스 종료와 관련된 이벤트가 시스템 Eventlog에 보고됩니다.

현재 요청 실행 중

WAS는 스크립트 및 도구가 특정 작업자 프로세스의 현재 실행 중인 요청을 쿼리할 수 있도록 하는 런타임 및 상태 제어 인터페이스를 노출합니다. 이는 중단되는 요청 또는 완료하는 데 매우 오랜 시간이 걸리는 요청을 찾는 데 유용합니다.

성능 카운터

모든 IIS 성능 카운터는 WAS를 통해 유입됩니다. IIS 카운터는 사이트 기반이고 웹 애플리케이션은 서로 다른 애플리케이션 풀에 살 수 있기 때문에 WAS는 이러한 성능 카운터를 수집합니다.

재활용

재활용을 사용하면 가동 중지 시간으로 인해 단일 요청을 잃지 않고 작업자 프로세스를 새로 고칠 수 있습니다. 이 작업은 "겹치는 재활용"이라는 기능을 통해 수행됩니다.

겹치는 재활용

WAS는 여전히 요청을 처리하는 이전 작업자 프로세스와 병렬로 새 작업자 프로세스를 생성하여 이 작업을 수행합니다. 새 작업자 프로세스가 시작되면 요청 큐에서 요청을 수집하기 시작하고 이전 작업자 프로세스는 WAS에서 요청 수신을 중지하도록 지시합니다. 이전 작업자 프로세스가 모든 실행 요청을 완료하면 종료됩니다. 이 기능을 "겹치는 재활용"이라고 합니다. 재활용 중에 요청이 손실되지 않도록 합니다.

재활용 구성

재활용 매개 변수는 IIS 구성 시스템에서 구성할 수 있습니다.

예약된 재활용

고객은 정기적인 일정에 따라 애플리케이션을 재활용할 수 있습니다. 구성 설정을 통해 재활용을 주기적으로 예약할 수 있습니다(예: 4시간마다, 매일 오전 1시 등).

메모리 사용량에 따른 재활용

애플리케이션은 시간이 지남에 따라 메모리를 누수할 수 있습니다. WAS는 각 작업자 프로세스의 메모리 사용량을 모니터링하여 작업자 프로세스가 미리 구성된 제한보다 더 많이 사용하지 않도록 할 수 있습니다. 구성된 가상 또는 프라이빗 메모리 임계값에 도달하면 작업자 프로세스의 재활용이 트리거됩니다.

요청 수에 따른 재활용

특정 작업자 프로세스가 처리한 요청 수에 따라 재활용을 구성할 수도 있습니다.

사용자 지정 재활용

사용자 지정 코드는 WAS 런타임 및 상태 API에 대한 API 호출을 통해 상태 통계를 사용자 지정하고 재활용을 트리거할 수 있습니다.

프로세스 분리

일부 오류는 프로덕션 환경에서만 발생합니다. 작업자 프로세스를 종료하면 작업 시간이 길어지지만 이러한 오류의 문제 해결은 어려워집니다(예: 실패한 작업자 프로세스를 디버그해야 하는 경우). WAS의 프로세스 분리 기능을 사용하면 실패한 작업자 프로세스를 종료하지 않고 작업자 프로세스를 재활용할 수 있습니다. 이제 디버거를 연결할 수 있습니다. 추가 프로세스 분리 설정을 사용하면 분리가 발생하는 경우 프로세스(예: 디버거)를 실행할 수 있습니다.

애플리케이션 풀 상태 관리

애플리케이션 풀은 공개적으로 사용 가능한 API를 통해 중지, 재활용 또는 시작할 수 있습니다. 예를 들어 애플리케이션을 오프라인으로 전환해야 하거나 applicationhost.config 파일에서 구성할 수 있는 것과 다른 매개 변수에 따라 재활용을 수행해야 하는 경우입니다.

추가 WAS 기능

Load-Balancer 기능

HTTP.SYS 여전히 네트워크에서 수신 대기하며 애플리케이션 풀에서 요청을 선택하지 않으면 500 HTTP 오류 메시지를 반환합니다. 이는 수준 5 TCP/IP(Load Balancer)의 경우 500 HTTP 오류가 유효한 TCP/IP 연결처럼 보이기 때문에 문제가 됩니다. WAS 구성 설정을 사용하면 HTTP.SYS HTTP 응답을 보내는 대신 연결을 거부할 수 있습니다.

WAS는 다음 설정을 사용하여 작업자 프로세스를 시작하도록 구성할 수 있습니다.

WoW64 지원

WAS는 32비트 또는 64비트 작업자 프로세스를 시작할 수 있습니다.

.NET Framework 미리 로드

특정 버전의 .NET Framework 미리 로드하도록 WAS를 구성할 수 있습니다. 이렇게 하면 버전 충돌 문제를 훨씬 쉽게 해결할 수 있습니다.

웹 정원

Web Garden은 여러 작업자 프로세스로 실행되는 애플리케이션 풀의 용어입니다. 요청은 라운드 로빈 메커니즘을 사용하여 이러한 작업자 프로세스 인스턴스 간에 배포됩니다.

WAS 다중 프로토콜 지원

WAS는 HTTP 스택만 호스트하지 않습니다. 또한 수신기 어댑터 및 작업자 프로세스 프레임워크를 통해 다른 프로토콜을 호스트할 수도 있습니다. WCF 서비스는 WAS 다중 프로토콜 지원을 활용합니다. WCF 프로토콜에는 자체 수신기(예: NET)가 함께 제공됩니다. TCP, NET. MSMQ 또는 NET. 파이프 수신기). 이러한 수신기는 WAS가 제공하는 수신기 어댑터 인터페이스를 사용하여 WAS에 연결합니다.

이 인프라를 활용하는 애플리케이션 프로토콜은 일반 ASP.NET 애플리케이션과 동일한 .NET 애플리케이션 도메인에서 사용자 지정 애플리케이션 코드를 호스트할 수 있습니다. 또한 ASP.NET 호스팅 환경에서 제공하는 프로토콜 독립적 서비스(예: 주문형 컴파일, 구성 지원 등)를 활용할 수 있습니다.