누구든지 IIS에서 응용 프로그램 풀, 작업자 프로세스 및 응용 프로그램 도메인 간의 차이점을 설명 할 수 있습니까? 또한 그들은 어떻게 함께 작동합니까? 몇 가지 기사를 읽었지만 여전히 약간 혼란 스럽습니다.
- IIS에서 생성 된 각 웹 사이트가 응용 프로그램이됩니까?
- 각 애플리케이션이 하나의 작업자 프로세스와 연결되어 있습니까?
- 앱 도메인은 어디에 등장합니까?
답변:
다른 말로 말하려고합니다.
서버에는 함께 실행되는 많은 asp.net 사이트가있을 수 있습니다. 각 사이트는 앱 도메인 입니다.
각각에 하나의 응용 프로그램 풀을 할당해야합니다 . 많은 응용 프로그램 도메인 (사이트)은 동일한 응용 프로그램 풀을 가질 수 있으며, 동일한 응용 프로그램 풀을 가지고 있기 때문에 동일한 프로세스 및 동일한 계정에서 실행되며 동일한 풀 설정을 갖습니다. 이 풀이 다시 시작되면 해당 풀 아래의 모든 사이트가 다시 시작됩니다.
이제 각 풀은 하나 이상의 작업자 프로세스를 가질 수 있습니다 . 각 작업자 프로세스는 사이트를 실행하는 다른 프로그램으로, 자체 정적 변수, 다른 시작 중지 호출 등을 가지고 있습니다. 다른 작업자 프로세스는 함께 통신하지 않으며 데이터를 교환하는 유일한 방법은 공통 파일 또는 공통 데이터베이스에서 가져 오는 것입니다. 작업자 프로세스가 두 개 이상 있고 그중 하나가 오랜 시간 계산을 수행하면 다른 하나가 인터넷 통화를 처리하고 콘텐츠를 표시 할 수 있습니다.
많은 작업자 프로세스를 단일 풀에 할당하면 호출 된 웹 가든을 만들고 컴퓨터가 하나의 처리 기계 인 경우 사이트가 둘 이상의 컴퓨터에서 실행되는 것과 같습니다.
각 작업자 프로세스에는 많은 스레드가있을 수 있습니다.
작업자 프로세스가 많을수록 영향을받는 방법 : 작업자 프로세스
가 하나 있으면 모든 것이 더 간단합니다. 응용 프로그램에서 모든 정적 변수는 동일 lock
하며을 사용하여 동기화합니다. 둘 이상의 작업자 프로세스 를
할당 할 때 정적 변수에 대해 계속해서를 사용합니다 . 정적 변수는 사이트의 여러 실행간에 다르지 않으며 공통 리소스가있는 경우 (예 : 디스크에 썸네일 생성) 그런 다음 작업자 프로세스를 .lock
Mutex
메모 하나 더. 당신이 할 때 그 소리는 더 작업자 프로세스를 당신은 더이 비동기 페이지가로드를 원활하게 할 수있다. 페이지로드를 위해 전체 프로세스를 잠그는 asp.net의 세션 처리기에 작은 문제가 있습니다. 이것은 좋지만 좋지는 않지만 알고 있고 처리하거나 변경하는 것입니다.
따라서 작업자 프로세스가 많은 하나의 사이트에 대해 이야기 해 보겠습니다. 여기서 공통 리소스 변경 사항을와 동기화해야하는 문제에 직면합니다 Mutex
. 그러나 세션을 사용하는 페이지 / 핸들러는 세션이 잠그기 때문에 비동기 적이 지 않습니다. 이것은 많은 포인트의 동기화를 자신이하지 않기 때문에 시작하기에 좋습니다.
이 주제에 대한 몇 가지 질문 :
동일한 세션을 공유 할 때 다른 웹앱을 처리하는 동안 차단 된
웹앱 웹 서비스에 대한 jQuery Ajax 호출이 동기식 인 것 같습니다.
ASP.NET 서버가 페이지를 비동기 적으로 처리하지 않음
ASP.Net의 세션을 완전히 대체
이제이 세션 잠금은 다른 사이트에 영향을주지 않습니다.
여러 사이트 중에서 더 많은 작업을 수행하는 프로세스는 한 사이트가 장기 실행 프로세스로 다른 사이트를 차단하지 않도록 도와줍니다.
또한 다른 사이트 간에는 더 많은 풀이 도움이 될 수 있습니다. 각 풀에는 적어도 하나의 작업 프로세스가 있지만 프로세스 탐색기를 사용하여 스스로 기억하고 볼 수 있습니다. 각 작업 프로세스는 컴퓨터의 더 많은 메모리와 16G 메모리가있는 하나의 큰 서버를 차지합니다. 그리고 하나의 SQL 서버는 너무 많은 다른 작업 프로세스를 가질 수 없습니다. 예를 들어 100 개의 공유 사이트가있는 서버에서는 100 개의 다른 풀을 가질 수 없습니다.
ASP.NET 개발자에게 의미 : 웹 사이트를 확장 가능하게하려면 in-proc 세션을 사용하지 말고 동기화를 위해 정적 클래스 변수 잠금을 사용하지 마십시오.
예, 모든 애플리케이션이 웹 사이트는 아니지만. 웹 사이트 아래 에 중첩 된 응용 프로그램이있을 수 있습니다 .
예, 하나의 응용 프로그램 풀이 여러 응용 프로그램을 서버 할 수 있지만 모든 응용 프로그램에는 하나의 작업자 프로세스 (응용 프로그램 풀)가 있어야합니다. 단일 웹 애플리케이션 (웹 가든 / 팜)을 배포 할 수 있습니다. 즉, 여러 프로세스에서 실행됩니다.
각 프로세스는 자체 앱 도메인에서 실행됩니다 (모든 애플리케이션 풀은 별도의 앱 도메인 임).
MSDN에서.
응용 프로그램은 웹 사이트의 루트 수준에있는 콘텐츠 그룹 또는 웹 사이트의 루트 디렉터리 아래에있는 별도의 폴더에있는 콘텐츠 그룹입니다.
응용 프로그램 풀은 해당 응용 프로그램 풀에 할당 된 하나 이상의 응용 프로그램에 요청을 제공하는 공통 설정으로 구성된 하나 이상의 작업자 프로세스 그룹을 정의합니다. 응용 프로그램 풀을 사용하면 웹 응용 프로그램 집합이 유사하게 구성된 하나 이상의 작업자 프로세스를 공유 할 수 있으므로 웹 응용 프로그램 집합을 서버 컴퓨터의 다른 웹 응용 프로그램과 분리하는 편리한 방법을 제공합니다. 프로세스 경계는 각 작업자 프로세스를 구분합니다. 따라서 한 응용 프로그램 풀의 응용 프로그램 문제는 다른 응용 프로그램 풀의 웹 사이트 나 응용 프로그램에 영향을주지 않습니다. 응용 프로그램 풀은 웹 인프라의 안정성과 관리 효율성을 크게 향상시킵니다.
소스 링크에서 : -http : //weblogs.asp.net/owscott/archive/2007/09/02/application-vs-appdomain.aspx
응용 프로그램은 IIS 용어이지만 ASP.NET에서 사용하는 용어입니다. 기본적으로 샌드 박스 또는 경계 집합을 만들어 다른 사이트 나 사이트의 일부를 다른 사이트와 구분합니다.
AppDomain은 .NET 용어입니다. (IIS7에서 AppDomain은 IIS 내에서 더 큰 역할을하지만 대부분의 경우 ASP.NET 용어입니다.)
작업자 프로세스는 웹 애플리케이션의 요청을 처리하는 데 사용됩니다.