您好,登錄后才能下訂單哦!
crontab是單機工具
(所有worker都在調度,如果有1000個任務,所有worker都在調用者1000個任務。對于編譯型語言來說,排序一個一千萬的數組只需要一秒,對于一千一萬的調度,無需擔心性能)
(相當于完成一個到worker集群的通知,通知它們殺死任務)
(
1.etcd中的任務會實時同步給worker,worker的調度協程會更新內存中維護的任務列表。etcd在內存中會鏡像一份和etcd完全一樣的任務清單,通過監聽機制實現。
2.調度協程會周期性檢查所有任務的cron任務表達式,掃描到期任務,到期任務會交給執行協程去執行。
3.同時,調度協程還會監聽一個任務控制事件(想要殺死某個任務),收到后,多個協程會強制中斷執行中的子進程(shell命令)。
4.執行協程返回結果給調度協程,調度協程可以更新內存中任務狀態,當任務調度給執行協程的時候,任務的狀態就被更新為執行中了。任務結果返回就將狀態改為執行完成。然后將執行結果投遞給日志協程。
)
(worker是個集群,每個workder任務清單都是從etcd中全量同步的,所以大家都按照每個任務的調度周期,在同時調度,對于同一個任務,比如每秒執行的任務,所有worker每隔一秒都會去執行這個任務。如果不做并發控制,所有worker會同一時刻全部執行一次這個任務。我們希望一個任務同一時刻只被執行一次,不允許任務并發調度。如何防止并發呢?去etcd中搶鎖,大家都要調度,誰搶到誰調度,其他人等待下次過期,下次接著搶,搶到我就執行。這種很依賴各個時間節點的同步,校時不同會讓有些機器老是先搶到鎖。我們需要時間校準保障一致,還可以做些小策略,比如隨機睡眠n-m毫秒)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。