2017-02-28 50 views
0

我有一個在Heroku上運行的Django應用程序,我需要每小時運行一次後臺任務。這是非常重要的,我不會錯過任何事件Heroku調度程序和時鐘進程

我知道我可以使用Heroku調度器。但它說:

調度程序是一個「盡力而爲」的服務,這意味着執行是 預期,但不能保證。調度程序偶爾會知道(但很少),不會錯過預定作業的執行。如果計劃的作業是應用程序的關鍵組件 ,建議運行 自定義時鐘進程,以取得更高的可靠性,控制和 可見性。

因爲我不想錯過的事件,我去了定製的時鐘程序頁面,那裏說:

由於DYNOS重新啓動至少每天一次,一些邏輯需要 在時鐘進程啓動時存在,以確保在dyno重啓期間沒有跳過作業間隔 。

所以我的問題是,除了在應該運行的時間方面更靈活之外,使用時鐘進程還是比Heroku調度器更有優勢?既然都不是100%可靠的,我寧願使用調度程序並執行一些邏輯來確保它運行,否則我必須支付額外的測試程序(時鐘進程)。

回答

1

是的,有一些!但正如您所說,使用時鐘進程的主要和最顯着的區別在於,您可以實現更精細的粒度級別。隨着Heroku的調度程序,例如,你不能做到的事情,如:

  1. 運行每5分鐘
  2. 運行每10秒

話雖這麼說,兩種調度方法之間的另一個重要區別是可靠性。當您使用Heroku Scheduler時,您實際上使用的是「黑匣子」,無法控制基礎架構的大小。隨着時鐘進程的進一步發展,你可以選擇你的dyno的大小(也許你有一個需要某種硬計算的調度過程(儘管你可以更好地將計算任務分派給後臺工作人員)) 。如果你有一個複雜的調度系統調用許多不同的外部服務和腳本,控制調度代碼可以幫助你測試和組織你的代碼,你可以爭辯。