반응형
Nginx
트래픽이 많은 웹사이트의 확장성을 위해 개발된 경량의 고성능 웹서버
- 적은 자원으로 높은 성능과 높은 동시성을 추구하기 위해 개발됨
- Nginx 가 등장하기 이전엔 Apache를 웹서버로 많이 활용하였으나, 늘어나는 네트워크 트래픽으로 인해 러시아의 Igor Sysoev 라는 개발자에 의해 Nginx가 2002년 개발 시작, 2004년에 릴리즈 됨
※ C10K 문제 : 하나의 웹 서버에 1만개 이상의 클라이언트 접속을 처리하지 못하는 문제
Nginx의 주요 구성
- HTTP Server : 요청에 의해 정적 파일을 응답해주는 웹서버
- Reverse Proxy Server : 요청으로부터 애플리케이션 서버에 로드밸런싱
- Mail Proxy Server
Nginx 의 주요 특징
- 비동기 Event-Drive로 요청하여 적은 자원을 사용하므로 CPU 소모가 비교적 적음
- 다수의 클라이언트 연결을 효율적으로 처리 가능함
- 문맥교환 (Context switching)의 비용이 적음
- Apache에 비해 모듈이 다소 적음
- 복잡한 처리가 필요한 요청의 경우 시스템 큐에 쌓이게 되어 성능이 저하될 수 있음
- Nginx는 event driven으로 클라이언트 요청을 병렬 처리하는 구조임.
- 싱글 프로세스이며, 클라이언트의 요청 이벤트를 reactor가 받는 형태임. 그리고 받은 이벤트는 handler를 통해 worker로 전달되어 처리됨
Apache의 주요 특징
- 환경에 맞게 PreFork 방식 (요청마다 프로세스 생성), Worker 방식 (프로세스와 쓰레드 병행해서 사용) 선택 가능함
- 안정성, 확장성, 호환성의 장점이 있음
- 하나의 클라이언트 연결에 하나의 쓰레드만 부여됨
- 클라이언트의 연결이 늘어남에 따라 프로세스가 계속 늘어나서 메모리 낭비가 심하고 문맥 교환 비용이 많이 듬
- 프로세스가 차단되면 요청을 처리하지 못하고 이전 요청을 처리하기 전까지 대기상태가 됨
반응형