三豐 soft張三豐
常見的定時任務處理方式有線程的while(true)和sleep組合、使用timer定時器觸發任務又或者是使用quartz架構。這些傳統的定時任務處理方式面臨如下幾個方面的挑戰:
Ø 高可用
單機版的定時任務排程隻能在一台機器上運作,如果程式或者系統出現異常就會導緻功能不可用。雖然可以在單機程式實作的足夠穩定,但始終有機會遇到非程式引起的故障,而這個對于一個系統的核心功能來說是不可接受的。
Ø 多任務管理複雜,系統負載不均
一個系統可能會有很多需要定時執行的任務,當出現單機無法承載所有的任務時,一般會簡單地進行拆分,讓不同的機器各自配置設定一定數量的任務。在這種方式下,需要由開發人員人工管理和配置設定各個機器上所負責運作的任務,新的任務的加入,需要重新考慮各個機器的負載并合理安排任務配置設定,以保證整體叢集負載均衡。這種方式對開發人員的心智負擔過于沉重,并且可能因為人工配置設定的不合理而造成系統負載不均。
Ø 單機處理極限
原本1分鐘内需要處理1萬個訂單,但是現在需要1分鐘内處理10萬個訂單;原來一個統計需要1小時,現在業務方需要10分鐘就統計出來。可以通過多線程、單機多程序處理來提高機關時間的處理效率。但是,單機畢竟資源有限(cpu、記憶體和磁盤等),始終會有單機能力處理不過來的情況。
架構設計采用分布式任務排程平台來實作定時任務。它的設計思想為:将排程行為抽象形成“排程中心”公共平台,而平台自身并不承擔業務邏輯,“排程中心”負責發起排程請求;将任務抽象成分散的jobhandler,交由“執行器”統一管理,“執行器”負責接收排程請求并執行對應的jobhandler中業務邏輯。“排程”和“任務”兩部分可以互相解耦,提高系統整體穩定性和擴充性。
單體排程
定義
一個叢集中隻有一個節點運作排程程序,該排程程序負責叢集資源管理和任務排程,也就是說單體排程器擁有全局資源視圖和全局任務
特征
容易實作對作業的限制并實施全局性的排程政策,是以适合批處理任務和吞吐量較大、運作時間較長的任務
容易進行狀态同步,并且很穩定
排程算法全部内置在核心排程器中,是以排程架構的靈活性和政策的擴充性不高,但是排程算法可以擴充甚至自定義
存在單點故障的可能性
應用
google borg/kubernetes
兩層排程
資源的使用狀态同時由中央排程器和第二層排程器管理,中央排程器從整體上進行資源的管理和配置設定,将資源配置設定到第二層排程器;再由第二層排程器負責将資源和具體的任務進行配對,是以第二層排程可以由多個排程器以支援不同的任務類型
mesos排程架構
架構圖
resource offer機制:mesos master主動将節點空閑資源,以類似發放的形式發送給每個架構,如果架構需要則使用,不需要則歸還
資源配置設定算法
最大最小公平算法
主導資源公平算法
共享狀态排程
state storage子產品負責存儲和維護資源以及任務狀态
resource pool為多個節點叢集,接收并執行scheduler排程的任務
scheduler值包含任務排程操作
舉例:google omega
并發控制
樂觀并發控制:在樂觀并發控制中,使用者讀取資料時不鎖定資料。當一個使用者更新資料時,系統将進行檢查,檢視該使用者讀取資料後其他使用者是否又更改了該資料。如果其他使用者更新了資料,将産生一個錯誤。一般情況下,收到錯誤資訊的使用者将復原事務并重新開始。對應于樂觀并發排程,強調時候檢測,在事務送出時檢查是否避免了沖突,若避免則送出,否則復原并自動重新執行
悲觀并發控制:一個鎖定系統,可以阻止使用者以影響其他使用者的方式修改資料。如果使用者執行的操作導緻應用了某個鎖,隻有這個鎖的所有者釋放該鎖,其他使用者才能執行與該鎖沖突的操作。對應于悲觀并發控制,強調事前預防,在事務執行時檢查是否會存在沖突,不存在,則繼續執行,否則等待或復原
總結對比