go任務調度11(分佈式crontab架構分析)

crontab是單機工具
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
(所有worker都在調度,如果有1000個任務,所有worker都在調用者1000個任務。對於編譯型語言來說,排序一個一千萬的數組只需要一秒,對於一千一萬的調度,無需擔心性能)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
(相當於完成一個到worker集羣的通知,通知它們殺死任務)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
go任務調度11(分佈式crontab架構分析)
(
1.etcd中的任務會實時同步給worker,worker的調度協程會更新內存中維護的任務列表。etcd在內存中會鏡像一份和etcd完全一樣的任務清單,通過監聽機制實現。
2.調度協程會週期性檢查所有任務的cron任務表達式,掃描到期任務,到期任務會交給執行協程去執行。
3.同時,調度協程還會監聽一個任務控制事件(想要殺死某個任務),收到後,多個協程會強制中斷執行中的子進程(shell命令)。
4.執行協程返回結果給調度協程,調度協程可以更新內存中任務狀態,當任務調度給執行協程的時候,任務的狀態就被更新爲執行中了。任務結果返回就將狀態改爲執行完成。然後將執行結果投遞給日誌協程。
)
go任務調度11(分佈式crontab架構分析)
(worker是個集羣,每個workder任務清單都是從etcd中全量同步的,所以大家都按照每個任務的調度週期,在同時調度,對於同一個任務,比如每秒執行的任務,所有worker每隔一秒都會去執行這個任務。如果不做併發控制,所有worker會同一時刻全部執行一次這個任務。我們希望一個任務同一時刻只被執行一次,不允許任務併發調度。如何防止併發呢?去etcd中搶鎖,大家都要調度,誰搶到誰調度,其他人等待下次過期,下次接着搶,搶到我就執行。這種很依賴各個時間節點的同步,校時不同會讓有些機器老是先搶到鎖。我們需要時間校準保障一致,還可以做些小策略,比如隨機睡眠n-m毫秒)
go任務調度11(分佈式crontab架構分析)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章