아파치 HTTP Server
- Request 들어올때마다 process 하나씩
- 시간 오래걸리네, prefork로 미리 process 만들어두자
- 다양한 모듈 만들어서 확장성 높일 수 있도록 지원
- But, 동시 연결된 커넥션이 엄청 많아지면 뻗어!
- C10K == Connection 10000 Problem
- 동시 연결된 커넥션 수 != 초당 요청 처리 수
- 요청 보낼 때 Connection 재활용하자
- keep-alive로 유지
- 동시 커넥션 수가 만단위로 넘어가면 커넥션 생성 X
- 하드웨어는 문제 X
- 아파치가 리퀘스트별로 프로세스 => 메모리 부족 현상
- 여러가지 기능 확장 모듈 == 메모리 더 부족
- 프로세스 기반이다 보니 컨텍스트 스위칭 뒤지게 일어남 => CPU 터질랑말랑
nginx 두둥등장
- 아파치 앞단에 nginx 둘라고 탄생
- master process, worker process
- worker process (keep alive 시간만큼 유지)
- 커넥션(리퀘스트 처리) == 이벤트 드리븐
- 커널이 리퀘스트 처리 해야할 것을 Queue에 묶어둠 (비동기)
- worker 프로세스는 하드웨어의 core 만큼 생성
- 동시 커넥션 양 아파치에 비해 최소 10배 증가