Apache와 Nginx 차이점
Apache, NGINX
Apache | Nginx |
- 쓰레드/프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조이다. - 사용자가 많으면 그만큼 많은 쓰레드가 생성되고 메모리 및 CPU 낭비가 심하다. - 하나의 쓰레드 당 하나의 클라이언트 구조 |
- 비동기 Event-Driven 기반 구조(비동기이벤트처리방식) - 다수의 연결을 효과적으로 처리할 수 있다. - 더 적은 쓰레드로 클라이언트 요청을 처리할 수 있다. |
- Apache는 Nginx에 비해 모듈이 다양하다.
- Apache는 안정성, 확장성, 호환성이 장점이고 Nginx는 성능이 우세하다는 장점이 있다.
Apache
아파치는 클라이언트에게 요청을 받으면 MPM(Multi Processing Module : 다중처리모듈) 방식으로 요청을 처리한다.
- 쓰레드 / 프로세스 기반 구조로 요청 하나 당 쓰레드 하나가 처리하는 구조
- 사용자가 많으면 많은 쓰레드가 생성되므로 메모리와 CPU낭비가 심하다.
- 하나의 쓰레드 당 하나의 클라이언트 구조
MPM : 다중 처리 모듈
PreFort 방식, Worker 방식
- PreFort MPM (다중 프로세스)
- 클라이언트 요청에 대해 apache 자식 프로세스를 생성하여 처리한다.
- 요청이 많을 경우 Process를 생성하여 처리한다. (Apache 설치 시 Default로 설정되어있음)
- 하나의 자식프로세스 당 하나의 스레드를 갖는다. (최대 1024개)
- 스레드간에 메모리 공유를 하지 않는다. (독립적이어서 안전하지만, 메모리 소모가 크다)
- Worker MPM (멀티 프로세스-스레드)
- Prefork보다 메모리 사용량이 적고 동시 접속자가 많은 사이트에 적합하다. (통신량이 많을 때 유리)
- 각 프로세스가 여러 개의 스레드를 생성해서 요청을 처리하는 구조이다.
- 스레드 간의 메모리 공유가 가능하다
- 프로세스 당 최대 64개의 스레드처리가 가능하며, 각 스레드는 하나의 연결만을 부여받는다.
Apache의 한계
클라이언트 접속마다 새로운 Process 혹은 Thread가 필요하다. 동시 접속자 수가 1만명이 넘어간다면 CPU와 메모리 사용이 증가하고 추가적인 Process/Tread 생성비용이 드는 등 대용량 요청에서 한계가 있다.
NGINX
Apache의 C10K(한 시스템에 동시 접속자 수가 1만명이 넘어갈 때 효율적 방안)문제점 해결을 위해 만들어졌다.
트래픽이 많은 웹사이트에서 확장성을 위해 설계한 비동기 이벤트 기반 구조의 웹서버 SW이다.
비동기 Event-Driven 기반 구조로 다수의 연결을 효과적으로 처리할 수 있다.
단일 nginx 작업자가 동시에 수 천 개의 요청을 처리할 수 있다.
- 비동기 이벤트 기반으로 요청하여 적은 양의 스레드가 사용되기 때문에 CPU소모가 적다.
- 요청을 수행하는 도중 CPU와 관계 없이 I/O, socket R/W 등을 전부 Event Listener로 미루기 때문에 시작되면 기다리지 않고 바로 다른 요청을 수행한다
'서버세션 > Server' 카테고리의 다른 글
phpmyadmin 설치 (0) | 2021.04.20 |
---|---|
[DataGrip] MySQL 외부접속 (0) | 2021.04.20 |
[AWS 서버구축] Linux + Nginx + PHP + MySQL (0) | 2021.04.19 |
[Local서버구축-2] 외부 접속을 위한 포트 포워딩 (Port Forwarding) (0) | 2021.04.19 |
[Local서버구축-1] Bitnami WAMP 설치 (Window, Apache, PHP, MySQL) (0) | 2021.04.18 |
댓글