Nginx vs Apache
Nginx vs Apache
Apache
Apache는 Client 요청을 받으면 MPM(Multi Processing Module : 다중처리모듈)이라는 방식으로 요청을 처리하며 대표적으로 Prefork와 Work방식이있다.
Prefork MPM
실행중인 프로세스를 복제하여 처리하는 방식이다.
각 프로세스는 한번에 한 연결만 처리하고, 요청량이 많아질수록 프로세스를 복제하여 동작한다.
프로세스를 복제하는 방식이기 때문에 메모리가 많이 소비 된다.
connection 수 = 프로세스 수
Worker MPM
Worker방식은 한개의 프로세스가 여러 쓰레드를 사용하여 요청을 처리한다.
쓰레드를 사용하기 때문에 Prefork 방식보다 메모리 소모가 적고, 통신량이 많을 때 유리하다.
문제점으로는 접속마다 Process 또는 Thread를 생성하는 구조 이기 때문에 대용량 처리에서 부족한면을 보인다.
Nginx
Event-Driven 방식으로 동작한다.
한 개 또는 고정된 프로세스만 생성 하고, 그 프로세스 내부에서 비동기 방식으로 효율적으로 작업을 처리한다.
따라서 동시 접속 요청이 많아도 Process 또는 Thread 생성 비용이 존재하지 않는다.
Event-Driven 방식은 작업을 하다 I/O, socket read/write 등 CPU가 관여하지 않는 작업이 시작되면 기다리지 않고 바로 다른 작업을 수행한다.
그러다 진행중인 I/O 등의 작업들이 끝나면 이벤트가 발생하여 그 다음 작업을 처리한다.
Event-Driven 방식은 Reactor pattern을 사용한다.
Reactor pattern이란 이벤트 처리(event handling)디자인 패턴으로,
하나의 Reactor가 계속 이벤트를 찾고 이벤트가 발생(trigger)하면 해당 이벤트 처리기(event handler)에게 이를 알린다.
출처 : https://cornswrold.tistory.com/429