2014-07-24 4 views
2

faye (nodejs)를 사용하여 pub/sub 인프라를 만들려고합니다. 수평 확장이 가능한지 여부를 알고 싶습니다. 하나의 nodejs 프로세스가 단일 코어에서 실행되므로 사람들이 클러스터링에 대해 이야기 할 때 동일한 시스템에서 여러 프로세스를 작성하고 포트를 공유하며 redis를 통해 데이터를 공유하는 방법에 대해 이야기합니다. 이처럼 : 첫째
http://www.davidado.com/2013/12/18/using-node-js-cluster-with-socket-io-for-push-notifications/여러 노드를 클러스터링하는 노드 NodeJS

, 나는 우리가 갈래의 프로세스의 각각 다른 코어에 간다 있는지 확인하는 방법을 이해하지 않습니다. 4 개의 코어가있는 머신에서 10 개의 노드 서버를 포크한다면 균등하게 분산되어 있는지주의해야합니까?

새 컴퓨터를 추가하고 확장하려는 경우 어떻게해야합니까? 나는 그런 지원을 어디에도 보지 못했다. 나는 그것을 할 수 있는지 확실하지 않습니다. 어떻게 든 여러 개의 노드가 사용 중이며 일부로드 밸런서가 있다고 가정 해 봅니다. 그러나 하나의 클라이언트는 하나의 서버 프로세스에만 연결됩니다. 따라서 클라이언트 C1이 클라이언트 C2가 가입 한 채널에 게시하고 C1이 프로세스 P1에 연결되어 있고 C2가 프로세스 P2에 연결되어있을 때 연결이없는 경우 P1에서 C2에 메시지를 게시하는 방법은 무엇입니까?

cluster 모듈을 사용하면 모든 프로세스가 동일한 포트와 연결을 공유 할 수 있으므로 단일 시스템의 경우이 작업이 가능할 수 있습니다.

나는 nodejs와 faye뿐만 아니라 웹 세계에 상당히 익숙하다. 질문에 잘못된 것이 있으면 저에게 계몽하십시오.

답변

0

cluster 모듈을 사용하면 단일 코어에서 여러 코어를 사용할 수 있습니다. 클러스터 모듈을 사용하면 동일한 포트를 수신하는 동안 동일한 애플리케이션을 여러 번 생성 할 수 있습니다. 코어 사이의 배포는 운영 체제에 따라 다르므로 10 개의 프로세스와 4 개의 코어가있는 경우 운영 체제는 이들을 최적으로 배포하는 방법을 결정합니다 (설정된 선호도로 생성되지 않은 경우). 기본적으로 이것은 당신을 염려하지 않아야합니다.

노드를 통해로드 균형 조정을 수행 할 수도 있지만 이는 클러스터링과 별개입니다. 대신 실행중인 각 서버에서 부하 통계를 수집하고 http 요청을 가장 적합한 서버 (예 : http-proxy 사용)로 프록시하는 별도의 응용 프로그램을 사용해야합니다. 매우 원시적 인로드 밸런서는 실행중인 각 서버 인스턴스에 하나의 요청을 점차적으로 보내 균등 한 분배를 제공합니다.

모든 인스턴스간에 메시지를 공유하는 마지막 점은 모든 메시지가 보관되는 단일 지점이 있다고 가정합니다. 이 기사에서 링크 된 문서에서는 단 하나의 서버 만 있고 모든 프로세스가 redis 인스턴스에 대한 액세스를 공유한다고 가정합니다. 모두가 동일한 redis 인스턴스에 액세스하므로 모든 프로세스가 동일한 메시지를 수신 할 수 있습니다. 전 세계의 서로 다른 위치에있는 여러 서버가 서로 다른 메시지 저장소 (즉, 자체 redis 인스턴스)를 가지고 있다고 생각하기 시작하면 '복제'도메인으로 들어갑니다. 일부 데이터 저장소는이를 염두에두고 작성되었으므로 is one of them을 다시 작성하십시오. 마스터와 주기적으로 업데이트되고 누락 된 데이터를 가져 오는 '마스터'데이터 세트와 '슬레이브'세트로 끝납니다. 여기서 매우 중요한 복제 프로세스가 없다면 메시지는 '실시간'으로 전송되지 않습니다.

결론적으로 개발자는 응용 프로그램에 대해 이러한 일련의 확장을 수행합니다. 첫 번째는 응용 프로그램을 다중 프로세스 (cluster 모듈)로 만드는 것입니다. 두 번째는 다중 프로세스 응용 프로그램을 실행중인 해당 서버에 http 요청을 프록시하는 부하 분산 장치를 갖는 것입니다. 세 번째는 서버가 독립적으로 실행되지만 서로 동기화되도록 데이터 저장소를 복제하는 것입니다.