《分佈式技術原理與算法解析》學習筆記Day12

調度框架:共享狀態調度

什麼是共享狀態調度?

共享狀態調度是爲了解決單體調度和兩層調度遇到的問題而創建出來的新的調度框架。它通過將單體調度器分解爲多個調度器,每個調度器都有全局的資源狀態信息,從而實現最優的任務調度,提供了更好的可擴展性。

共享裝填調度將集羣狀態之外的功能抽象出來,形成獨立的服務,包括:

  • State Storage模塊:負責存儲和維護資源及任務狀態,一遍Scheduler查詢資源狀態和調度任務。
  • Resource Pool模塊:多個節點集羣,接收並執行Scheduler調度的任務。
  • Scheduler模塊:只包含任務調度操作。

共享狀態調度框架如下圖所示。

共享狀態調度和兩層調度相比的不同點:

  1. 存在多個調度器,每個調度器都可以擁有集羣全局的資源狀態信息,可以根據該信息進行任務調度。
  2. 樂觀併發調度,執行了任務匹配算法後,調度器將其調度結果提交給State Storage,由其決定是否進行本次調度,從而解決競爭同一種資源而引起的衝突問題,實現全局最優調度。兩層調度是悲觀併發調度。

樂觀併發調度和悲觀併發調度的區別:

  • 樂觀併發調度:強調事後檢測,在事務提交時檢查是否避免了衝突,若避免,則提交,否則回滾並自動重新執行。
  • 悲觀併發調度:強調事前預防,在事務執行時檢查是否會存在衝突,不存在,則繼續執行,否則等待或者回滾。

有哪些系統採用了共享狀態調度機制?

常用的有以下幾種:

  • Google Omega
  • Apollo
  • Nomad

Omega調度

Omega使用事務管理狀態的設計思想,將集羣中資源的使用和任務的調度類似基於數據庫的一條條事務去管理。

Omega的調度流程如下圖所示。

調度器對Job的調度是具有原子性的,一個Job中所有的Task都是一起調度的,即使部分Task調度失敗了,調度器再次調度時必須調整整個Job。

Omega調度器將兩層調度器中的集中式資源調度模塊簡化成一些持久化的共享數據和針對這些數據的驗證代碼。

三種調度機制有什麼區別?

單體調度是由一箇中央調度器去管理整個集羣的資源信息和任務調度,它的優點是可以實現全局最優調度,缺點是調度沒有併發性,且中央服務器有單點瓶頸問題。它適用於小規模集羣。

兩層調度是將資源管理和任務調度分爲兩層來調度,第一層調度器負責集羣資源管理,並將可用資源發送給第二層調度,第二層調度收到第一層調度發送的資源,進行任務調度。它的優點是避免了單體調度的單點瓶頸問題,可以支持更大的服務規模和更多的服務類型。它適用於中等規模集羣。

共享狀態調度包含多個調度器,每個調度器都可以看到集羣的全局資源信息。它的優點是每個調度器都可以獲取集羣中的全局資源信息,因此任務匹配算法也可以實現全局最優解。

下面是關於單體調度、兩層調度和共享狀態調度的詳細比較。

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