고성능 ISAPI 응용 프로그램 디자인
ISAPI는 가장 성능이 우수한 웹 응용 프로그램용 인터페이스입니다. ISAPI 확장이나 필터를 작성하면 ASP 스크립트나 유사한 작업을 수행하는 구성 요소보다 성능이 뛰어납니다. 그러나, ISAPI 인터페이스의 원래 속도가 성능과 확장성 고려를 무시할 수 있다는 의미는 아닙니다. ISAPI는 ASP와 COM에 의해 제공되는 서비스를 지원하는 많은 응용 프로그램을 활용할 수 없습니다. 예를 들어, 세션 상태를 유지 관리하기 위해 ISAPI 응용 프로그램을 사용하려면 많은 세션 상태 기능 구현이 필요합니다.
다음은 ISAPI 확장의 확장성과 성능을 향상시키기 위한 제안 사항입니다.
- ISAPI 필터 방지 - 응용 프로그램 아키텍처에 반드시 ISAPI 필터를 추가해야 하는 경우가 아니면 ISAPI 필터를 사용하지 마십시오.특히 데이터를 받거나 보내는 자료에서 처리를 수행하는 필터를 사용해서는 안됩니다. 필터를 반드시 사용해야 할 경우에는 필터 이벤트 알림 코드를 사용하여 주요 코드 경로를 주의 깊게 최적화해야 합니다.
- 작업자 스레드 풀 만들기 - 작업자 스레드 풀을 만들어 주 I/O 스레드를 다른 작업을 실행할 때 사용합니다. 이 옵션은 ISAPI 확장에서만 사용할 수 있습니다.
- 비동기 작업과 I/O 완료 포트를 사용하여 고려 - Windows NT 4.0 및 Windows 2000 이후 버전의 IIS는 I/O 완료 포트를 사용하여 비동기 읽기/쓰기를 지원합니다. 수행중인 I/O 작업 유형을 위해 비동기 작업은 사용 가능한 CPU 사용 시간을 더 효율적으로 만들 수 있습니다. 비동기 작업은 작업자 스레드 풀을 사용하여 구현했을 때 더 효과적으로 작업합니다.
- Win32 TransmitFile 기능 사용 - HTML이나 이미지 파일을 보낼 때 ISAPI 확장은 Win32 TransmitFile 함수를 사용합니다. 이것은 HSE_REQ_TRANSMIT_FILE ServerSupportFunction에 의해 사용됩니다.
- 연결 사용: 연결 유지 헤더 - 영구HTTP 연결을 유지하는 대부분의 경우 비영구 연결을 사용하는 것 보다 더 좋은 성능을 제공합니다.
- 스레드 동기화의 필요 사항 최소화 - 요청 컨텍스트를 가진 세션 상태 정보를 유지 관리하여 스레드 동기화의 필요 사항을 최소화할 수 있습니다. 스레드 동기화가 요구되는 경우에는 중요한 섹션이 작게 유지되는지 확인하십시오.
- 대체할 수 있는 다른 힙 고려 - ISAPI 응용 프로그램이 집약적으로 힙을 사용하면 대체할 수 있는 다른 힙을 고려해야 합니다. Windows® 힙의 집약적인 사용으로 자원 경합이 일어날 수 있습니다. 다음과 같은 여러 가지 메모리 할당 대체 방안을 강구합니다.
- 힙 분할 - 기본 프로세스 힙 뿐만 아니라 각 스레드에 하나씩 다중 사용자 지정 힙을 만듭니다. 전역이 아닌 잠금이 각 사용자 지정 힙을 관리하므로 잠금 경합이 줄어듭니다.
- 캐시된 할당 - 개체 사용자와 힙 사이의 중간 층에서 작동하는 사용자 지정 할당 작업을 사용합니다. Win32 힙은 자주 호출되지 않고 크기가 큰 메모리 블록에 대해서만 호출됩니다. 이들 블록은 사용자 지정 할당기에 의해 나눠지고 관리됩니다.
- 스택 할당 - C 런타임 함수 _alloca를 사용하여 힙 대신에 스택에 개체에 대한 메모리를 할당합니다. 사용할 수 있는 스택 공간이 제한되어 있기 때문에 이 방법은 비교적 작은 개체에만 사용할 수 있습니다. 또한 새로 할당된 개체는 현재 함수 내에서나 현재 함수에 의해 호출된 함수 내에서만 사용할 수 있습니다. 현재 함수가 주 호출 프로그램을 반환할 때 스택에 할당된 저장소는 잃게 됩니다.
- 개체 간략화 - 버퍼를 클래스의 데이터 구조 구성원으로 포함합니다. Win32 힙에 액세스를 요청하는 작업을 위해 이 버퍼를 사용합니다.
- ISAPI에서 전역 잠금 사용 방지 - 전역 잠금은 일반적으로 확장성을 저하합니다.
ISAPI 확장과 필터에 대한 자세한 내용은 MSDN Online Library의 Developing ISAPI Extensions and Filters 또는 ISAPI Reference를 참조하십시오.
© 1997-2001 Microsoft Corporation. All rights reserved.