[node.js] PM2의 클러스터 및 포크 모드 차이

이 질문을 찾기 위해 많이 검색했지만 명확한 설명을 얻지 못했습니다. 클러스터링 된 앱을 확장 할 수 있고 분기 된 앱을 확장 할 수 없다는 차이점이 하나뿐인가요?

PM2의 공개 사이트는 클러스터 모드가 이러한 기능을 수행 할 수 있다고 설명 하지만 포크 모드의 장점에 대해서는 아무도 언급하지 않습니다 (아마도 NODE_APP_INSTANCE변수 를 얻을 수 있음).

Fork가 일반적으로 사용되는 것처럼 보이기 때문에 Cluster가 Fork의 일부라고 생각합니다. 그래서 포크는 PM2 시점에서 ‘포크 된 프로세스’를 의미하고 클러스터는 ‘스케일 아웃 할 수있는 포크 된 프로세스’를 의미한다고 생각합니다. 그렇다면 왜 포크 모드를 사용해야합니까?



답변

주요 차이점 fork_modecluster_mode그 주문이 중 하나를 사용하는 PM2이다 child_process.fork의 API 또는 클러스터 API를.

이것은 내부적으로 무엇을 의미합니까?

포크 모드

테이크 fork기본 프로세스 산란 등의 모드를. 이렇게하면을 변경할 수 exec_interpreter있으므로 php또는 pythonpm2 로 서버를 실행할 수 있습니다 . 예, exec_interpreter하위 프로세스를 시작하는 데 사용되는 “명령”입니다. 기본적으로 PM2는 사용할 node정도로 pm2 start server.js같은 것을 할 것입니다 :

require('child_process').spawn('node', ['server.js'])

이 모드는 많은 가능성을 가능하게하기 때문에 매우 유용합니다. 예를 들어 사전 설정된 포트에서 여러 서버를 시작한 다음 HAProxy 또는 Nginx에 의해 부하 분산됩니다.

클러스터 모드

cluster에서만 작동합니다 node그것의로 exec_interpreter(: 예는 nodejs 클러스터 모듈에 액세스 할 수 있기 때문에 isMaster, fork방법 등). 프로세스가 여러 인스턴스에서 자동으로 분기되므로 구성이 필요없는 프로세스 관리에 적합합니다. 예를 들어 pm2 start -i 4 server.js4 개의 인스턴스를 시작 server.js하고 클러스터 모듈이 부하 분산을 처리하도록합니다.


답변

Node.js는 단일 스레드입니다.

즉, Intel 쿼드 코어 CPU의 1 개 코어 만 노드 응용 프로그램을 실행할 수 있습니다.

이름 : fork_mode.

우리는 그것을 로컬 dev에 사용합니다 .

pm2 start server.js -i 0 CPU의 각 코어에서 1 개의 노드 스레드를 실행하는 데 도움이됩니다.

그리고 자동 부하의 균형 상태 비 오는 요청을.

같은 포트 .

우리는 그것을라고 부릅니다 cluster_mode.

프로덕션 성능을 위해 사용됩니다 .

PC에 스트레스 테스트를하고 싶다면 로컬 개발자에서이 작업을 수행하도록 선택할 수도 있습니다. 🙂


답변

문서와 소스는 여기에서 오해의 소지가 있습니다.

소스에서 이것을 읽으면 유일한 차이점은 노드 cluster또는 child_processAPI를 사용한다는 것 입니다. cluster후자를 사용하기 때문에 실제로 동일한 작업을 수행합니다. stdio여관 주변 에는 훨씬 더 많은 관습이 fork_mode있습니다. 또한 cluster객체가 아닌 문자열을 통해서만 통신 할 수 있습니다.

기본적으로 fork_mode. -i [number]-옵션 을 전달 cluster_mode하면 일반적으로 w /를 목표로하는으로 이동합니다 pm2.

또한 fork_mode인스턴스는 .NET으로 인해 동일한 포트에서 수신 할 수 없습니다 EADDRINUSE. cluster_mode할 수있다. 이렇게하면 자동으로로드 밸런싱되는 동일한 포트에서 실행되도록 앱을 구성 할 수도 있습니다. 세션, dbs 등 상태없이 앱을 빌드해야합니다.


답변