NGINX를 실행시키면 가장 먼저 실행되는 프로세스이다. 이하에 나오는 다른 역할의 프로세스들을 시작시키는 역할 또한 한다.
Master Proces는 (linux기준) systemd로 관리되는 프로그램이다. systemd 는 Linux의 가장 기본 구성요소이고, 가장 먼저 뜨는 프로세스로 PID=1을 가지고 있다. 운영체제 시스템 수준에서 프로세스들을 관리한다. 그래서 master process의 parent pid 가 1인 것을 확인할 수 있다.
ps -ef --forest | grep nginx
master process는 다음 기능들을 한다.
Network 요청에 대한 모든 일을 한다. Master process로 부터 받은 설정을 이용해서 connection, proxy, read/write 등을 한다.
upstream server와 연결하는 프로세스이다.
worker process는 single thread 이고 모든 동작을 비동기로 처리한다. worker process 들 사이는 동작과 메모리 공간이 독립적이다.
worker_processes auto;
시작할 때 실행되는 프로세스로, disk 에 있는 cache를 메모리로 올리는 역할을 한다.
역할을 다 하면 종료된다.
주기적으로 실행되어 디스크 캐시를 비워 메모리 사이즈를 일정 크기 이내로 유지하도록 한다.
모든 worker thread 는 master process로부터 fork 될때, master process의 메모리에 있는 설정을 copy 받는다.
listen socket 또한 master process로부터 공유받고, socket event 를 받을 수 있다. (accept_mutex, kernel_socket_sharing 로 가능하다.)
worker process로 연결이 맺어지면, 위 그림과 같이 state machine으로 동작한다. 각 동작, 구성의 사이는 비동기로 동작한다.
state machine이란?
State machine은 어떤 시스템이나 프로그램이 여러 개의 ‘상태(state)’ 중 하나에 머물며 동작하다가, 특정 조건이나 입력에 따라 다른 상태로 전이(transition)되는 논리적 구조이다.
이때 각 상태는 특정 동작을 수행하고, 상태 간 전이는 미리 정의된 규칙에 따라 이루어진다.
예를 들어 버튼을 눌렀을 때 “대기 → 실행” 상태로 바뀌고, 일정 시간이 지나면 다시 “대기” 상태로 돌아오는 식이다.
이런 상태 전이 구조는 흐름을 명확히 하고 복잡한 로직을 간결하게 관리할 수 있게 해준다.
state machine은 주로 UI, 네트워크 연결, 게임 로직, 통신 프로토콜 등에서 많이 사용된다.
직접 기능을 수행한다기보다, 프로그램의 전체 동작 흐름을 구조화하고 설명하는 추상적인 모델이다.
복잡한 프로그램을 설계할 때 상태 단위로 나눠 사고할 수 있어서 유지보수와 디버깅이 쉬워진다.
NGINX는 새로운 설정을 적용할 때 downtime 없이 적용할 수 있다.
-s reload
요청이 들어오면, 마스터 프로세스는 설정파일을 다시 읽어서 메모리에 올린다.NGINX는 바이너리를 업그레이드 할 때도 downtime없이 Graceful migration 을 할 수 있다.