2013-06-23 3 views
0

헤로 쿠 (나는 이미 하나의 dyno를 실험하고있다)에 익스프레스 앱을 호스트 할 계획이다.여러 개의 node.js dynos 동기화

유지 관리 작업 (일부 MongoDB 업데이트 수행)에 node-cron을 사용하고 싶습니다. 문제는 유지 보수가 한 번만 실행되는 것을 확인하는 가장 간단한 방법은 무엇입니까? 모든 dynos는 유지 보수를 동시에 실행하려고합니다.

현재의 접근 방식은 MongoDB의 원자 업스 트를 일종의 세마포어로 사용합니다 (모든 dyno는 현재 유지 관리를 위해 플래그를 설정하려고 시도합니다). 그러나 그것은 다소 추한 것입니다.

저는 하루에 한 번씩 실행해야하는 단순한 작업이므로 별도의 작업자 인스턴스를 갖고 싶지 않습니다.

답변

1

나는 Heroku Scheduler가 (https://devcenter.heroku.com/articles/scheduler)에 좋은 것이라고 생각합니다. 업데이트 실행이 너무 오래 걸리지 않으면 이동하는 것이 좋습니다. MongoDB를 업데이트하는 방법을 알고있는 JS 스크립트 (예 : schedule.js)를 루트에두고 Heroku Scheduler (사소한 프론트 엔드가 함께 제공됨)를 사용하여 원하는 시간에이를 호출합니다 (node scheduler.js).

+0

글쎄, 쉽게 들리 네 ;-). 그 addon을 전에 발견하지 않았거나 어쩌면 나는 그것이 너무 비쌀 것이라고 생각했다. 그러나 내 작업이 하루에 한 번 실행되고 몇 초가 걸릴 경우 일부 센트까지 추가됩니다. – Prinzhorn

+0

앱 당 750 회의 무료 다이노웨어 시간을 얻습니다. 즉, 31.25 일의 무료 컴퓨팅 시간을 의미합니다. -> 예약 된 스크립트가 31 일 동안 1 개월 동안 하루 더 많은 시간을 소비하지 않으면 무료입니다. 실제로는 하나의 dyno가 60 분 유휴 시간이 지나면 잠자기 상태가되고 라우팅 이벤트에 의해 트리거 될 때까지 15 초가 필요하기 때문에 어쨌든 2 개의 웹 dynos를 실행해야합니다. (https://devcenter.heroku.com/articles/dynos) -> 앱에 웹 dyno가 하나만 실행되는 경우 작업자 dynos의 수와 관계없이 잠자기 상태가됩니다. 당신은 잠을 자제하기 위해 하나 이상의 웹 다이노를 가져야합니다. – Stefan

+0

나는 이것에 대해 이미 알고 있으며 우리가 시작할 때 적어도 두 개의 웹 다이노를 운영 할 계획이다. Heroku가 매초마다 dyno를 실행하기 때문에 (EC2와 같은 정식 시간뿐만 아니라), 매월 추가 일회용 dyno에 대해 약간의 센트를 지불해야 할 것입니다. – Prinzhorn