공부용 블로그

Nginx에 관한 이해 본문

설계/WebServer

Nginx에 관한 이해

tomato212 2018. 10. 30. 17:47

웹서버 성능 테스트 후 최종 선정한 웹서버가 Nginx임에도 불구하고 구조를 제대로 이해하고 있지 못해서

다시 한번 정리한다.


Nginx는 하나의 마스터프로세스와 소수의 워커 프로세스(보통 코어수만큼 생성)로 동작한다. 

마스터 프로세스는 nginx의 conf 파일을 읽고 그에 맞는 세팅과 워커 프로세서들을 생성한다.

worker 프로세서들은 하나의 소켓으로부터 연결요청을 받아서 이벤트를 처리한다.

worker 프로세스마다 이벤트 루프를 가지고 있는데 비동기/넌블로킹 방식으로 이벤트를 처리한다. 

worker 프로세스는 이벤트 루프 하나로 수천개의 동시연결을 처리가능하다. 


Event-Driven은 다양한 업무를 이벤트로서 다루는 접근 방법이다. 

클라이언트로부터 들어오는 연결요청, 디스크 읽기가 'event'이다. 

이 아이디어는 이벤트가 없으면 서버 리소스를 낭비하지 않는다. 


Event-Driven 방식에서는 worker process가 작업을 하다가 I/O, socket read/write 등 CPU가 관여하지 않는 작업이 시작되면

기다리지 않고 바로 다른 작업을 수행한다. 진행중인 I/O 작업이 끝나면 worker process는 아까 했던 작업을 다시 진행하면 된다는 이벤트가 발생하고 그 작업을 처리하게 된다. 



Q. worker process가 I/O 작업을 직접 수행하지 않으면 I/O 작업은 어떤 스레드? 혹은 누가 수행하는거지?

worker process가 하는 클라이언트의 연결 요청 > 소켓 > worker process로 요청이 들어오면 연결을 처리하거나 

클라이언트의 데이터 요청이 들어오면 응답만 해주는 것? 


Q. worker process마다 event-loop를 갖고있다고 했는데 그럼 worker process에 event-loop라는 연결, 응답을 처리하는 스레드 하나만 존재하는것? worker process에 다른 스레드는 없는것? i/o처리라던지..

.

.

.

.


정 리 중