less than 1 minute read

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

Categories:

Updated: