데브허브 | DEVHUB | How NGINX Handles MILLIONS of Requests With Just 1 Process 🔥How NGINX Handles MILLIONS of Requests With Just 1 Process 🔥
- NGINX는 전통적인 서버와 달리 '요청당 스레드' 모델을 사용하지 않고, 이벤트 기반의 비동기(non-blocking) 아키텍처로 수백만 건의 요청을 효율적으로 처리합니다. 🚀
- 마스터 프로세스는 설정 관리 및 워커 프로세스 생성을 담당하며, 실제 트래픽 처리는 각 CPU 코어에 할당된 소수의 워커 프로세스가 수행합니다. 🧠
- 각 워커 프로세스는 독립적인 이벤트 루프를 사용하여 수천 개의 동시 연결을 단일 스레드처럼 처리하며, IO 대기 시 블로킹 없이 다음 준비된 작업으로 전환합니다. 🔄
- 새로운 연결은 '리스닝 소켓'의 대기열에 쌓이고, 워커는 이 연결들을 받아들여 '연결 소켓'을 통해 관리하며, 효율적인 시스템 호출(epoll/kqueue)로 준비된 소켓만 처리합니다. 🚪
- Node.js와 유사하게 이벤트 기반이지만, NGINX는 스레드 대신 독립적인 워커 프로세스를 사용하여 더 구조화되고 안정적인 동시성 관리를 제공합니다. 🏗️
epoll 또는 kqueue와 같은 시스템 호출은 수천 개의 소켓을 동시에 모니터링하며, 오직 이벤트가 발생한(준비된) 소켓만 워커의 이벤트 루프에 알려 불필요한 검사를 제거합니다. 🔔
- 이러한 메커니즘 덕분에 NGINX는 IO 대기 중에도 유휴 상태로 있지 않고, 초경량 작업을 번개처럼 빠르게 처리하여 대규모 트래픽 부하에서도 서버를 빠르고 안정적으로 유지합니다. ⚡