2012-06-23 3 views
4

노드, Express 및 Mongo로 프로젝트를 시작하려고합니다. 먼저 해결해야 할 중요한 질문이 하나 있습니다.서비스 중단없이 변경 사항을 배포하는 방법은 무엇입니까?

을 실행 중이라고 가정 해 봅시다. 조만간 코드를 다시 작성하여 변경 사항을에 배포하려고합니다. 지금까지는 개발 모드에서만 작업 했으므로^C를 수행하고 서버를 다시 시작하는 것은 문제가되지 않습니다.

제작 과정은 어떻습니까? 분명히 서버와 모든 사용자를 한 번에 휴지통으로 만들 수는 없습니다. 서비스를 중단하지 않고 변경 사항을 배포하는 방법이 있습니까?

신생 시스템과 유사한 시스템을 조사했지만 문제가 해결되지 않았습니다 (또는 무엇이든 놓쳤습니까?). 현재 일종의 장애 조치 구축을 고려 중입니다 만 누군가 먼저 저를 수행 했어야합니다 ...

+0

heroku 및 nodejitsu와 같은 클라우드 배포 플랫폼이이 문제를 처리합니다. –

+0

예, 계산에 포함됩니다. 그러나 이것이 비영리 단체를위한 것이므로 가장 저렴한 솔루션을 찾고 싶습니다. :) – aspyct

답변

0

가용성에 신경 쓰면 여러 서버에서 서비스를 실행해야합니다. 가능한 한 서로 다른 물리적 위치에 서비스를 실행해야합니다. 배포 외에도 많은 이벤트가 하나의 서버를 오프라인으로 만들 수 있습니다. 문제가 없으므로 각 서버를 오프라인으로 전환하고 배포 한 다음 다시 온라인 상태로 만듭니다.

가용성에 신경 쓰지 않는다고해도 아무런 문제가 없습니다.

+0

물론 배포 할 때마다 서비스를 가져 오는 것을 피할 수 있다면 이미 멋진 단계 :) – aspyct

1

음, 아마도 nginx와 같은 역방향 프록시를 사용할 것입니다. 메모리 공간이 적어서 동시에 많은 연결을 처리 할 수 ​​있으며 마지막으로 둘 이상의 서버가있을 때 장애 조치를 지원합니다.

이 nginx 리버스 프록시를 사용하면 업데이트 된 소스로 새 노드 프로세스를 시작하고 nginx를 새 노드로 전환하고 이전 버전을 휴지통으로 만들 수 있습니다.

이것은 또한 나 ... 새 버전이 너무 일찍 충돌 단지의 경우, 서버에서 응용 프로그램의 이전 버전을 유지 할 수 있도록

링크됩니다 NodeJitsu에 의해 http://nginx.org/en/docs/control.html

1

체크 아웃 Forever. 프로세스를 대몬 화하고 무언가가 실패하면 자동으로 서버를 다시 시작합니다. 또한 CWD를 볼 수있는 옵션도 있으므로 repo에서 "git pull"을 수행하면 서버가 새 코드로 다시 시작됩니다.

저는 이것을 1 년 넘게 풀 기반 서버 모델로 생산에 사용했으며 거의 ​​문제가 없었습니다.

+0

영원히 좋은 일이지만, 서비스 중단없이 응용 프로그램을 배포 할 수있는 OP의 문제를 처리하는 것이 발견되지 않았습니다. 이것은 장기 실행 연결 (예 : Socket.IO)이있는 응용 프로그램의 경우 특히 우려됩니다. – sffc

+0

@ vote539 노드 코어의 클러스터 모듈은 여러분이 말하는 것에 적합합니다. 하나의 포트에서 수신 대기하는 여러 프로세스와 사용 가능한 프로세스간에로드 균형을 조정할 수 있습니다. 이 대답은 2.5 년 전부터 주어졌으며 그 이후로 노드 개발에서 많은 변화가있었습니다. 나는 영원히 영원히 사용하지 않았다. – srquinn