Web Server
개념적 구분 : sw / hw
기능
1995년에 만들어진 HTTP 웹 서버
동작 방식 : MPM(Multi Processing Module)
Prefork, Worker, Event(Ver 2.4)
1) Prefork
자식 프로세스가 싱글 쓰레드로 동작하며 요청당 하나의 프로세스가 처리하는 방식
장점 : 요청별로 프로세스가 fork되고, 프로세스간 메모리가 독립적이므로 한 프로세스의 오류가 다른 프로세스에게 영향을 주지 않음
단점 : 프로세스 fork시 cpu, memory 소비 & process context switching 비용 증가
오래된 소프트웨어와의 호환을 위해 사용..
2) Worker
자식 프로세스가 멀티 쓰레드로 동작하며 각 요청당 하나의 쓰레드가 처리하는 방식
장점 : 쓰레드가 요청을 처리하므로 Prefork 방식보다 자원 사용량이 적음 -> 통신량이 많은 서버에 적절
단점 : 쓰레드간 공유 자원 -> Race Condition
http-mpm.conf 파일
<IfModule mpm_worker_module>
StartServers 10 << 아파치 시작시 기본 프로세스 수
ServerLimit 128 << 구성 가능한 child 프로세스의 제한 수
MaxClients 2000 << 최대 동시 접속자 수 ( <= ServerLimit * ThreadPerChild)
MinSpareThreads 75 << 최소로 유지할 스레드 수
MaxSpareThreads 250 << 최대로 유지할 스레드 수
ThreadsPerChild 25 << 하나의 자식프로세스가 가질 수 있는 스레드 수
MaxRequestsPerChild 0 << 자식 프로세스가 살아있는 동안 요청을 받을 수 (0은 무한대, 메모리누수의 경우 메모리 사용량 제한가능)
</IfModule>
MaxClients 수치를 초과하여 온 요청들은 ListenBackLog에 의해 Queueing
성능 비교
worker가 context switching 부담이 덜 하므로, 요청에 따른 유연한 반응 속도를 보인다.
2004년 출시
Apache의 10K 문제를 해결하기 위해 등장(많은 동시접속자를 위해 자원할당-메모리 부담)
동시성문제 해결
단점 : 긴 I/O처리가 필요한 작업의 경우 시스템 큐에 요청이 쌓이게되어 성능이 저하 될 수 있음. 복잡한 처리나 대용량 데이터처리가 필요한 서비스 등에서는 적합하지 않을수 있음.
Blocking 문제!!!!