2012-10-23 6 views
0

여러 클라이언트 서비스에서 직접 연결을 허용하는 Azure 호스트 응용 프로그램 (iisnode)이 있습니다. 이 응용 프로그램은 다양한 연결간에 데이터를 스트리밍합니다. node.js의 인스턴스가 여러 개인 시스템에서 실행중인 경우 실제 TCP 연결은 서로 다른 인스턴스에 연결됩니다.Node.js 클러스터에서 어떻게 연결을 공유합니까?

어떻게하면 메모리 내 연결을 한 인스턴스에서 다른 인스턴스로 "이동"또는 "공유"할 수 있습니까?

물론 데이터를 라우트하기 위해 일부 인스턴스 간 통신을 구축 할 수는 있지만 데이터를 빠르게 옮기는 것이 전체 용도이므로 애플리케이션 규모가 확대되지는 않을 것이라고 생각합니다. 예를 들어, 각 인스턴스에 대해 100 개의 연결을 갖는 4 개의 인스턴스가 있고 클라이언트 연결간에 데이터를 이동하는 데 필요한만큼 많은 리소스를 인스턴스간에 이동합니다.

+0

소켓 연결을 언급하고 있습니까? 이것으로 당신의 실제 목적은 무엇입니까? –

+0

상당히 복잡한 프록시입니다. –

답변

2

nodeProcessCountPerApplication 설정을 사용하여 둘 이상의 node.exe 프로세스를 만들기 위해 iisnode를 구성하면 라운드 로빈 논리를 사용하여 들어오는 HTTP 요청을 전달합니다. 응용 프로그램은 해당 동작을 제어 할 수 없습니다. 시나리오가 주어지면 두 개의 개별 클라이언트로부터의 요청 ("연결")이 동일한 node.exe 프로세스에 동일하게 배치되도록 결정적으로 보장 할 방법이 없습니다.

node.exe 프로세스간에 기존 TCP 연결 또는 HTTP 요청을 "이동"하는 메커니즘이 없습니다.

일반적으로 이러한 알림 시나리오를 해결하는 더 좋은 방법은 가입 기반 메시징 인프라를 백엔드로 사용하는 것입니다. Azure의 ServiceBus는 이러한 메커니즘을 제공합니다. 이 설계에서 node.exe의 각 인스턴스는 클라이언트와의 연결을 수신 할 때 특정 주제에 가입하고 일치하는 알림이 도착하면 ServiceBus에서 node.exe의 다른 인스턴스를 통해 통지됩니다.

관련 문제