웹 서버가 프리 포크 웹 서버로 자신을 설명 할 때 정확히 무엇을 의미하는지 알고 싶습니다. 루비의 경우 unicorn 과 파이썬의 경우 gunicorn 과 같은 몇 가지 예가 있습니다.
더 구체적으로 다음은 질문입니다.
- 이 모델은 어떤 문제를 해결합니까?
- 프리 포크 웹 서버가 처음 시작되면 어떻게됩니까?
- 요청을 어떻게 처리합니까?
또한 unicorn / gunicorn에 대한보다 구체적인 질문 :
(g) unicorn으로 실행하려는 웹앱이 있다고 가정 해 보겠습니다. 초기화시 webapp은 몇 가지 초기화 작업을 수행합니다 (예 : 추가 데이터베이스 항목 채우기). 여러 작업자로 (g) unicorn을 구성하면 초기화 작업이 여러 번 실행됩니까?
답변
사전 포크는 기본적으로 마스터가 각 요청을 처리하는 포크를 만드는 것을 의미합니다. 포크는 완전히 별개의 * nix 프로세스입니다.
아래 의견에 따라 업데이트하십시오.
pre
의pre-fork
요청에 오기 전에 이러한 프로세스가 포크 것을 의미한다. 그러나 그들은 일반적으로 증가하거나 부하가 아래로 가고으로 감소 될 수있다.
스레드로부터 안전하지 않은 라이브러리가있을 때 Pre-forking을 사용할 수 있습니다. 또한 문제를 일으키는 요청 내의 문제가 전체 서버가 아니라 처리되는 프로세스에만 영향을 미친다는 것을 의미합니다.
여러 번 실행되는 초기화는 모두 배포하는 항목에 따라 다릅니다. 그러나 일반적으로 각 프로세스에 대해 연결 풀과 해당 특성이 존재합니다.
스레딩 모델에서 마스터는 요청을 전달하기 위해 더 가벼운 스레드를 생성합니다. 그러나 스레드가 대규모 문제를 일으키는 경우 마스터 프로세스에 영향을 미칠 수 있습니다.
Nginx, Apache 2.4의 Event MPM 또는 gevent (Gunicorn과 함께 사용할 수 있음)와 같은 도구를 사용하면 비동기식으로 프로세스가 차단하지 않고 수백 개의 요청을 처리 할 수 있습니다.