2013-10-10 4 views
2

로드 밸런서 뒤의 서버 집합에 여러 노드/익스프레스 응용 프로그램을 배포해야합니다. 이러한 앱은 기능면에서 서로 완전히 독립적입니다. 먼저 디자인을 어떻게 생각하는지 설명하고, 디자인에 붉은 깃발이 있다면 모범 사례의 측면에서 의견을 구합니다.노드 클러스터에서 여러 노드 응용 프로그램 실행

다음은 내가 생각하고있는 설정입니다.

부하 분산 장치 뒤의 프론트 엔드 서버는 node-http-proxy를 실행하며 포트 80에서 들어오는 요청을 수락합니다.이 역방향 프록시는이 서버의 다른 포트에서 실행중인 적절한 노드 응용 프로그램으로 요청을 라우팅합니다. 예 :

var http = require('http'), 
    httpProxy = require('http-proxy'); 

var options = { 
    router: { 
    'myapphost.com/MyFirstApp': 'myapphost.com:3000', 
    'myapphost.com/MySecondApp': 'myapphost.com:3001' 
    } 
} 

// ...and then pass them in when you create your proxy. 
var proxyServer = httpProxy.createServer(options).listen(80); 

각 노드 응용 프로그램은 클러스터 2와 같은 것을 사용하여 노드 클러스터에서 실행되어 멀티 코어 시스템을 활용합니다.

내 질문 :

  • 이 바로 디자인과 전략인가?
  • 일부 애플리케이션은 상태 유지가 필요합니다. 이런 종류의 설정에서 상태 관리를 수행하는 가장 좋은 방법은 무엇입니까? Redis와 같은 외부 세션 저장소를 사용하는 것이 올바른 접근 방법입니까? 또는 주어진 프론트 엔드 시스템에 세션을 고정시키고 메모리 내 세션 저장을 사용합니까?

UPDATE : 나는 사람들의 부부 이야기 한 후,이 질문을 게시 때문에

,

나는 역방향 프록시로 Nginx에 사용할 수를 up-- 온 또 하나 개의 방법이 내 프런트 엔드 시스템 앞에로드 밸런서를 설치합니다. 각 프론트 엔드 컴퓨터는 하나의 앱만 제공합니다. 해당 응용 프로그램을위한 하나 이상의 백업 시스템이있을 수 있습니다. (요구 사항에 따라 다름). 따라서 세 개의 앱이있는 경우 각기 다른 앱을 제공하는 3 개의 개별 머신을 갖게됩니다. 모든 요청은 포트 80에서 Nginx에 의해 수신됩니다. Nginx 리버스 프록시는 요청을 올바른 프론트 엔드 시스템으로 라우트합니다. 각 시스템에는 멀티 코어 시스템을 활용하는 노드 클러스터가 있습니다. 이 접근법의 장점은 배포가 각 앱마다 훨씬 쉬워진다는 것입니다. 또한 각 앱을 개별적으로 확장 할 수 있습니다.

이 방법에 대해서도 의견을 나누십시오.

답변

0

이것은 올바른 방법이며 redis을 언급했거나 connect-mongo 또는 다른 세션 저장소와 같은 다른 세션 저장소를 사용할 수도 있습니다.
Load Balancer를 사용하는 경우 동일한 서버의 인스턴스가 여러 개 있다고 생각하십니까? 이 경우 세션 성능과 세션 사용률을 분석 한 다음 세션 저장소/데이터베이스를 분할해야하는지 아니면 모든 균형 인스턴스가 통신 할 단일 시스템 하나를 사용해야하는지 결정해야합니다.

당신은 이미 옳은 길을 생각합니다. 왜 그걸 시도하고 해킹하지 않으시고 귀하의 요구에 맞는 지보십시오.

또한 정적 미디어를 생각해 볼 필요가 있습니다. 별도로 저장하는 것이 좋습니다 (S3 + CloudFront?).
응용 프로그램 논리 일관성을 유지하면서 인스턴스에 대한 업데이트를 제공하고 다시 시작하는 방법에 대해서도 설명합니다.대부분의 주요 인스턴스에 균형 될 것이지만

는 이 구조뿐만 아니라 AB 테스트를위한 가능성을 가능하게

는 (당신은. 응용 프로그램의 "테스트 버전"과 특정 인스턴스에 균형을로드 할 수 있습니다.

을 그것은 모든뿐만 아니라 당신의 규모에 따라 달라집니다 , 때로는 처음에는 그만큼 많이 필요로하지 않고 앞으로는 개선하고 확장 할 준비를하십시오.