로드 밸런서 뒤의 서버 집합에 여러 노드/익스프레스 응용 프로그램을 배포해야합니다. 이러한 앱은 기능면에서 서로 완전히 독립적입니다. 먼저 디자인을 어떻게 생각하는지 설명하고, 디자인에 붉은 깃발이 있다면 모범 사례의 측면에서 의견을 구합니다.노드 클러스터에서 여러 노드 응용 프로그램 실행
다음은 내가 생각하고있는 설정입니다.
부하 분산 장치 뒤의 프론트 엔드 서버는 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 리버스 프록시는 요청을 올바른 프론트 엔드 시스템으로 라우트합니다. 각 시스템에는 멀티 코어 시스템을 활용하는 노드 클러스터가 있습니다. 이 접근법의 장점은 배포가 각 앱마다 훨씬 쉬워진다는 것입니다. 또한 각 앱을 개별적으로 확장 할 수 있습니다.이 방법에 대해서도 의견을 나누십시오.