我們的設定包括部署在 AWS EC2 上並具有自動縮放功能的 Python Flask 應用程序,並且它使用 MySQL 資料庫。
我們還在單獨的 Linux 系統上安排了作業,該系統每 10 秒觸發一次,命中位於 的 API 端點https://api.example.com
。
該應用程式在 pm2 下運行。
最近,我們遇到了這些計畫作業所造成的資料重複問題。儘管 cron 作業被正確設定為每 10 秒執行一次,但我們觀察到相同作業同時運行的情況,間隔僅微秒。啟用 API 日誌後,我們已經確認了這些情況。
當這些作業被安排每 10 秒訪問一次 API URL 時,它們如何同時執行,這是令人費解的。我們正在尋求有關可以幫助我們診斷此問題的方法或工具的建議,以及防止此類同時執行作業的策略。
答案1
執行重複性作業而不檢查作業的單一副本,尤其是在如此短的時間間隔內,會直接帶來麻煩。
您可以做的是測量 API 呼叫的運行時間並將計劃設為最大間隔。和實作檢查,以便只有一份作業副本正在執行。您可以設定要跳過的作業(如果已執行)並發送某種警報,以便您可以(再次)重新考慮計劃的時間間隔。
當然,您可以組織跳過作業的佇列,但這在很大程度上取決於作業的性質。而且你可能會面臨排隊不斷增加的風險。