이 질문을 찾기 위해 많이 검색했지만 명확한 설명을 얻지 못했습니다. 클러스터링 된 앱을 확장 할 수 있고 분기 된 앱을 확장 할 수 없다는 차이점이 하나뿐인가요?
PM2의 공개 사이트는 클러스터 모드가 이러한 기능을 수행 할 수 있다고 설명 하지만 포크 모드의 장점에 대해서는 아무도 언급하지 않습니다 (아마도 NODE_APP_INSTANCE
변수 를 얻을 수 있음).
Fork가 일반적으로 사용되는 것처럼 보이기 때문에 Cluster가 Fork의 일부라고 생각합니다. 그래서 포크는 PM2 시점에서 ‘포크 된 프로세스’를 의미하고 클러스터는 ‘스케일 아웃 할 수있는 포크 된 프로세스’를 의미한다고 생각합니다. 그렇다면 왜 포크 모드를 사용해야합니까?
답변
주요 차이점 fork_mode
및 cluster_mode
그 주문이 중 하나를 사용하는 PM2이다 child_process.fork의 API 또는 클러스터 API를.
이것은 내부적으로 무엇을 의미합니까?
포크 모드
테이크 fork
기본 프로세스 산란 등의 모드를. 이렇게하면을 변경할 수 exec_interpreter
있으므로 php
또는 python
pm2 로 서버를 실행할 수 있습니다 . 예, 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.js
4 개의 인스턴스를 시작 server.js
하고 클러스터 모듈이 부하 분산을 처리하도록합니다.
답변
Node.js는 단일 스레드입니다.
즉, Intel 쿼드 코어 CPU의 1 개 코어 만 노드 응용 프로그램을 실행할 수 있습니다.
이름 : fork_mode
.
우리는 그것을 로컬 dev에 사용합니다 .
pm2 start server.js -i 0
CPU의 각 코어에서 1 개의 노드 스레드를 실행하는 데 도움이됩니다.
그리고 자동 부하의 균형 상태 비 오는 요청을.
온 같은 포트 .
우리는 그것을라고 부릅니다 cluster_mode
.
프로덕션 성능을 위해 사용됩니다 .
PC에 스트레스 테스트를하고 싶다면 로컬 개발자에서이 작업을 수행하도록 선택할 수도 있습니다. 🙂
답변
문서와 소스는 여기에서 오해의 소지가 있습니다.
소스에서 이것을 읽으면 유일한 차이점은 노드 cluster
또는 child_process
API를 사용한다는 것 입니다. cluster
후자를 사용하기 때문에 실제로 동일한 작업을 수행합니다. stdio
여관 주변 에는 훨씬 더 많은 관습이 fork_mode
있습니다. 또한 cluster
객체가 아닌 문자열을 통해서만 통신 할 수 있습니다.
기본적으로 fork_mode
. -i [number]
-옵션 을 전달 cluster_mode
하면 일반적으로 w /를 목표로하는으로 이동합니다 pm2
.
또한 fork_mode
인스턴스는 .NET으로 인해 동일한 포트에서 수신 할 수 없습니다 EADDRINUSE
. cluster_mode
할 수있다. 이렇게하면 자동으로로드 밸런싱되는 동일한 포트에서 실행되도록 앱을 구성 할 수도 있습니다. 세션, dbs 등 상태없이 앱을 빌드해야합니다.