weblab-tw / ddia-study-group

Designing Data-Intensive Applications Study Group
36 stars 5 forks source link

第八章:相同時間多節點排程任務防止重複執行的方式 - Mason #95

Open 0x171-0 opened 2 years ago

0x171-0 commented 2 years ago

想請教大家有沒有實作過特定時間排程任務的鎖定?我之前有過的作法是最先處理到的 pod 去 db 拿 redis key,或是利用環境變數設定特定的節點執行特定任務,好奇大家有沒有時做過其他機制來阻止排程任務重複執行?

kylemocode commented 2 years ago

印象中 kubernetes cronjobs (https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) 應該就可以管理排程,kubernetes 根據你定的時間, 起一個 container 跑你的 code 如果有error, application 就 throw exception, 成功跑完就 system.exit(0) 結束 有 exception 的話, pod 就會一直留在那 -> 接著就需要一些 monitor mechanism 來監控 如果失敗要怎麼處理排程

我們專案在 config 上還有加 concurrencyPolicy: Forbid 來做多一層保護 => 假設每小時跑一次, 上個小時的job 失敗了, pod 還卡在哪. 這個小時 k8s 執行前, 發現已經有一個 job 還在跑, 那他就不會執行這個小時的 job

0x171-0 commented 2 years ago