在AWS Auto Scaling組上執行crontab

在AWS Auto Scaling組上執行crontab

我有以下設定:1 台帶有應用程式 X 的伺服器,每小時運行一次 crontab。 crontab 連接到資料庫並執行一些繁重的計算,並將資料匯出到特殊的資料檔案並重新啟動應用程式。導出的時間可以從 10 分鐘到 40 分鐘不等。

我想要:

  • 將該伺服器移至 AWS 並使用自動縮放群組。

  • crontab 僅在一台伺服器上運行,進行計算並匯出資料並以某種方式將其同步到所有其他即時伺服器。

  • 所有伺服器應自動偵測新資料並安全地重新啟動(例如,不是在同步時)。

  • 從自動縮放群組啟動的新伺服器顯示,在啟動實際應用程式之前,會在啟動時自動取得資料檔案。

我對如何做到這一點或任何 AWS 特定解決方案沒有「簡單」的想法。

這是我的想法:

  • 在 Auto Scaling 群組外部執行一台伺服器。僅在該伺服器上執行 crontab。所有數據檔案將上傳到S3。

  • 所有自動縮放伺服器都會有一個每分鐘運行一次的 crontab,並檢查唯一的檔案“please_download_me_TIMESTAMP”

  • 下載檔案後,腳本將重新啟動服務。

  • 如果啟動新伺服器,啟動時它將自動從 S3 取得所有檔案。

你認為這會起作用嗎?

答案1

這是 AWS EC2 中的常見問題,現已解決。看https://gist.github.com/kixorz/5209217舉個實施的例子。

答案2

承認這是 2015 年的老問題,是 Joe 提出的,所以我不妨回答。

如果該工作每小時一次,並且需要 10 - 40 分鐘,那麼您無論如何都要支付一小時的費用。沒有必要啟動和關閉伺服器,只需讓伺服器保持運作。

如果頻率較低,您可以有一個定時事件將訊息放入 SQS 佇列 - 這可以透過 t2.nano 來完成,或者也許有一種更便宜的方法可以使用 Amazon 服務來完成 - Lambda?根據隊列大小自動縮放。當有數據需要處理時,伺服器就會創建,處理數據,將其移動到需要的地方,然後自行關閉。

另一種方法是基於時間的縮放,但同樣前提是頻率低於每小時。

相關內容