[Web] Apache vs. Nginx
in Web
Apache
- MPM (Multi Processing Module) 방식으로 클라이언트 요청을 처리
- 프로세스/스레드 기반 구조로 동작
- ServerSocket 으로 요청 A가 들어오면 프로세스/스레드 할당
- 프로세스/스레드는 해당 소켓을 가지고 I/O 작업 수행
- ServerSocket 으로 새로운 요청 B가 들어오면 새로운 프로세스/스레드 할당하고 컨텍스트 스위치 후 I/O 작업 수행
Prefork MPM
- 프로세스를 복제하여 요청 처리
- 프로세스 당 하나의 스레드
- 프로세스 복제 방식이기 때문에 메모리 비용이 큼
Worker MPM
- 프로세스 당 여러 개의 스레드를 생성하여 요청 처리
- Prefork 방식보다 메모리 소모가 적고 통신량이 많을 때 유리
Event MPM
- Worker MPM 방식에서
Keep Alive
한 요청을 처리하는 스레드를 따로 둠
Nginx
- 한개 또는 고정된 프로세스만 생성하고, 프로세스 내부에서 비동기 방식으로 요청 처리
- 프로세스/스레드 생성 비용이 적음
- Reactor Pattern
- Reactor 는 event 가 들어오면 알맞은 handler 로 dispatch
- Handler 는 dispatch 된 event 를 받아서 처리
Apache, Nginx 성능 비교
- Nginx 가 전반적으로 우세한 성능을 보인다고 하나 그 편차가 크지 않다고 함(좀더 조사 필요)