2012-06-21 18 views
2

對Heroku的計劃文檔說Heroku的計劃 - 爲什麼排隊長時間運行的作業

「計劃作業是爲了執行短期運行的任務或排隊較長的運行任務到後臺作業隊列凡是。需要更長的時間超過兩分鐘即可完成應該使用工作進程來運行」

https://devcenter.heroku.com/articles/scheduler#longrunning_jobs

如果調度程序爲這些作業啓動一個新的測試程序,並且測試人員與工作人員的成本相同,那麼將任務添加到隊列並讓工作進程運行它有什麼好處?

回答

7

在調度程序任務(或您自己的自定義時鐘進程)中,只調度而不執行時間間隔任務是體系結構的最佳實踐。對此的動機在scheduled jobs文章中有所解釋,但總而言之,您希望您的調度程序進程/任務儘可能輕量級,因爲應該只有其中一個。當你開始用執行重載調度時,你經常遇到時間表衝突和不穩定的行爲。

想象一個間隔工作掛起或需要比預期更長的時間。如果你的時間間隔足夠緊張,這將開始導致積壓,未來的時間間隔可能會被推回或一起跳過。

此外,將組件責任儘可能分開是明智的 - 沒有單個組件負責正交任務。這是一種常見的設計實踐,它通過保持調度和執行獨立而反映在預定的工作用例中。除了最佳實踐,如果您處於開發或引導模式並瞭解上述後果,您當然可以選擇忽略此類建議並在計劃任務中運行所有內容。只是要小心努力調試工作衝突或明顯的重複。

0

嗯,我認爲這只是一個建議。如果您有一個由Scheduler運行的任務,並且您將手動運行此任務(在Heroku管理中),則會出現錯誤 - 此錯誤是由超時引起的(因爲每個任務的限制爲30秒)。但事實上,這項任務不會中斷 - 任務將會正確完成。

如果你有1個動態代碼,所以這個動態代碼使用Heroku來處理你的應用程序。如果你運行一些預定的工作,所以這個動態調整將被調度器 - >如果你有長時間運行的任務,你的頁面將是「空閒」(直到時間,當預定的工作將完成時,不正確的工作) 。

+0

我的理解是,一個新的測功機正在推進這些過程。根據https://devcenter.heroku.com/articles/scheduler和https://devcenter.heroku.com/articles/oneoff-admin-ps。另外,第一個環節意味着沒有30秒的超時時間 – alan