2013-06-23 64 views
0

我打算在Heroku上託管一個快速應用程序(我已經在試用一個dyno)。同步多個node.js dynos

我想使用node-cron進行維護任務(執行一些MongoDB更新)。問題是,確保維護只運行一次最簡單的方法是什麼?所有的dynos都會嘗試同時運行維護。

我目前的方法使用MongoDB的原子upserts作爲某種信號量(每個dyno試圖爲當前維護設置標誌)。但這有點難看。

我想沒有單獨的工人實例,因爲它實際上只是一個簡單的任務,需要每天運行一次。

回答

1

我認爲這就是Heroku Scheduler的優點(https://devcenter.heroku.com/articles/scheduler)。如果您的更新執行時間不長,那就是要走的路。你寫一個知道如何更新你的MongoDB的JS腳本(例如schedule.js),把它放在你的根目錄下,並使用Heroku Scheduler(它帶有一個簡單的前端)來調度它(node scheduler.js)。

+0

好吧,這聽起來很容易;-)。以前沒有找到該插件,或者我認爲它會太昂貴。但是如果我的任務每天運行一次並花幾秒鐘時間,那麼這隻會增加幾美分。 – Prinzhorn

+0

您每個應用獲得750個免費動態小時,意味着31.25天的免費計算時間 - >如果您的預定腳本在一個月內每天不會消耗更多的時間(31天),則免費。實際上,無論如何,你必須運行2個網頁dynos,因爲一個dyno會在60分鐘的空閒時間後進入休眠狀態,並且在路由事件觸發時需要15秒才能喚醒。 (https://devcenter.heroku.com/articles/dynos) - >如果您的應用程序只運行一個網絡測試程序,它將會休眠 - 無論工作人員的dynos數量如何。你必須有多個網絡測力儀來防止睡覺。 – Stefan

+0

我已經知道這一點,並計劃在我們推出時運行至少兩個網絡dynos。由於Heroku每秒鐘都有一個測功機運行(不僅僅是EC2等全時段),所以我可能每月需要支付一美分的額外一次性測功機。 – Prinzhorn