對於時間輪算法的一些思考

最近一直在使用噹噹的分佈式任務調用框架,但是由於zk集羣是依賴別人的一直想換一套耦合性較低的,偶然的機會在看完許大神開源的xxl-job後萌生了自研的想法。在查詢了一些資料後發現大部分的延遲算都是基於時間輪,例如kafka的延遲隊列。
在這裏插入圖片描述
一、爲什麼使用時間輪算法
時間輪是一種高效來利用線程資源來進行批量化調度的一種調度模型。把大批量的調度任務全部都綁定到同一個的調度器上面,使用這一個調度器來進行所有任務的管理(manager),觸發(trigger)以及運行(runnable)。能夠高效的管理各種延時任務,週期任務,通知任務等等。
二、時間輪缺點
時間輪的精度取決於每一格精度,精度越小誤差越小,且時間輪無法備份,當服務器宕機時會丟失所有任務。
三、複合時間輪
有時候有些任務會是幾小時、幾天甚至幾月一次,單個時間輪無法窮舉所有可能性,這時可以按照時鐘的方式,通過多層時間輪來實現,例如:定義一個時間輪爲60秒每秒跳一次,使用60+60+60+60+60的五層時間輪可以表示出長達24年的時間。
對於高層的時間輪如果遇到過期任務時,只需要將任務再重新放入下一層時間輪中就可以達到繼續定時的效果了。
四、最後的一些想法
這個提議最終還是沒有落地各種原因就不說了心累,以目前的想法對於中小型系統使用時間輪可以達到延時和高可用的目的,如果全公司統一使用還有一些挑戰,例如:

1、各任務耗費的調試資源不一,有些任務可能幾天一次,有些任務可能一秒一次,如何更好的均勻這些任務達到資源最大利用率。
2、單服務器的調度吞吐量是有限的,同時一個任務做高可用往往也只需要二臺左右的服務器即可,那麼整個大集羣中,如何更好的分發任務達到整個集羣最大吞吐量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章