《分佈式技術原理與算法解析》二-二:分佈式資源管理與負載調度之分佈式調度架構

從2-1中可以曉得分佈式體系結構的目的是將多個服務器資源管理起來,尋找合適的服務器去執行用戶任務。

那什麼是合適的服務器呢?
衡量一個服務器是否合適會涉及很多條件或約束,比如在一些場景下,任務存在優先級,當需要執行多個任務的時候,通常需要滿足優先級高的任務優先執行的條件,但在這些條件中,服務器資源能夠滿足用戶任務對資源的訴求是必須的。

而爲用戶任務尋找合適的服務器這個過程,在分佈式領域中叫作調度;
在分佈式體系結構中,調度器就是一個非常重要的組件,它通常會提供多種調度策略,負責完成具體的調度工作。

1 單體調度

概念:

一個集羣中只有一個節點運行調度進程,該節點對集羣中的其他節點具有訪問權限,可以蒐集其他節點的資源信息、節點狀態等進行統一管理,同時根據用戶下發的任務對資源的需求,在調度器中進行任務與資源匹配,然後根據匹配結果將任務指派給其他節點

單體調度器擁有全局資源視圖和全局任務,可以很容易地實現對任務的約束並實施全局性的調度策略

設計:

在集羣管理中,單體調度模塊稱爲“Scheduler”或“單體調度器”。單體調度器也叫作集中式調度器,指的是使用中心化的方式去管理資源和調度任務。

也就是說,調度器本身在系統中以單實例形式存在,所有的資源請求和任務調度都通過這個
實例進行。集中式調度器的常見模型

在這裏插入圖片描述

作業和任務:一個作業可以包含多個任務,一個作業中的任務大多有相同的屬性,但也可以被覆蓋 ,比如特定任務的命令行參數、各維度的資源(比如,CPU 核、內存、硬盤空間、硬盤訪問速度、TCP 端口等);
多個任務可以在多臺機器上同時執行,從而加快作業的完成速度,提高系統的並行程度。而具體將哪個任務分配給哪個機器去完成,就是調度器要做的事

場景:Hadoop、Spark、Borg

集羣聯邦:多個集羣或多個數據中心,基於單體調度實現,如K8S

將多個集羣聯合起來工作,核心思想是增加一個控制中心,由它提供統一對外接口,多個集羣的 Master 向這個控制中心進行註冊;
控制中心會管理所有註冊集羣的狀態和資源信息,控制中心接收到任務後會根據任務和集羣信息進行調度匹配,選擇到合適的集羣后,將任務發送給相應的集羣去執行

集羣聯邦的概念,其實就是單體調度的分層實現

優點:
單體調度器很容易就能實現對作業的約束並實施全局性的調度策略,因此適合批處理任務和吞吐量較大、運行時間較長的任務;
單體調度系統的狀態同步比較容易且穩定,因爲資源使用和任務執行的狀態被統一管理,降低了狀態同步和併發控制的難度

缺點:
調度算法只能全部內置在覈心調度器當中,因此調度框架的靈活性和策略的可擴展性不高;
單體調度存在單點故障的可能性。

2 兩層調度

單體調度的核心是所有節點的資源以及用戶的任務均由中央服務器統一管理和調度。因此,中央服務器很容易成爲單點瓶頸,會直接導致其支持的調度規模(資源不夠)和任務類型受限(不同任務需要處理的數據不同,比如批處理任務是處理靜態數據,流數據任務卻是處理實時數據,單體調度框架會隨着任務類型增加而變得越來越複雜,最終出現擴展瓶頸),於是出現了兩層調度

概念:

把資源和任務分開調度,一層調度器只負責資源管理和分配,另外一層調度器負責任務與資源的匹配

資源的使用狀態同時由中央調度器和第二層調度器管理,中央調度器從整體上進行資源的管理與分配,將資源分配到第二層調度器,再由第二層調度器負責將資源與具體的任務配對,因此第二層調度可以有多個調度器,以支持不同的任務類型

在這裏插入圖片描述

場景:Mesos、Hadoop

資源分配算法:決策需要將當前可用資源分配給哪些框架以及分配多少

  • 1 最大最小公平算法:在兼顧公平的前提下,儘可能分配讓更多人滿意的資源

流程:
1 按照用戶對資源需求量遞增的順序進行空閒資源分配
2 不存在用戶得到的資源超過自己需求的情況
3 對於分配的資源不滿足需求的用戶,所獲得的資源是相等的

在執行資源分配時,最大最小公平算法按照上述 3 條原則進行多次迭代,每次迭代中資源均平均分配,如果還有剩餘資源,就進入下一次迭代,一直到所有用戶資源得到滿足或集羣資源分配完畢,迭代結束。

例子:假設有總量爲 100 的空閒資源,有 4 個用戶 A、B、C、D 對該資源的需求量分別爲(35,10,25,45),分配流程如下所示:

  1. 按照用戶對資源的需求量升序排列,則 4 個用戶的需求量爲(B:10,C:25,A:35,
    D:45)。
  2. 平均分配空閒資源。資源空閒總量 100,除以用戶數 4,則平均空閒資源量爲 25;按
    照第一步中需求量分配後,用戶資源需求量爲(0,0,10,20),且用戶 B 由於資源
    需求量小於 25,因此會剩餘資源。此時空閒資源量爲 15,資源需求人數爲 2。
  3. 重複第二步,平均分配資源,15/2=7.5,即分別爲用戶 A 和 D 分配 7.5 份資源,此時
    用戶資源需求量爲(0,0,2.5,12.5),空閒資源量爲 0,資源需求人數爲 2。
  4. 所有資源已分配完,算法終止。

在這裏插入圖片描述

缺點:採用了絕對公平的方式分配資源,會導致大量的資源浪費,比如用戶需求量爲 35 和 45 的用戶 A 和用戶 D,均分配了 32.5 的空閒資源,但由於資源不滿足需求,這兩個用戶均無法使用

  • 2 主導資源公平算法

在考慮用戶公平性的前提下,還考慮了用戶對不同資源類型的需求,更合理地分配資源

首先計算已經分配給用戶的每一種資源的佔用率(Resource Share),比如已經分配的 CPU 佔總資源量的多少,已經分配的內存佔總資源量的多少;
所有資源佔用率中的最大值稱作該用戶的主導資源佔用率,而主導資源佔用率對應的資源就是用戶的主導資源

例子:

在這裏插入圖片描述

兩種算法對比:
最大最小公平算法適用於單一類型的資源分配場景,主導資源公平算法適用於多種類型資源混合的場景;
最大最小公平算法從公平的角度出發,爲每個用戶分配不多於需求量的資源,主導資源公平算法從任務出發,目的在於儘量充分利用資源使得能夠執行的任務越多越好。

  • 兩層調度機制可以同時支持多個框架和多種類型的業務,但是如何保證這些業務運行時不會互相干擾?

當多個業務運行在同一臺機器上,共同使用 CPU、內存,以及系統環境時會存在相互干擾,如果隔離不同的業務資源和環境,就不會存在相互干擾了;

在 Mesos 中,實現這種資源隔離的是容器:(Linux虛擬化機制)
容器的實質是進程,該進程運行於屬於自己的獨立的命名空間,可以擁有自己的 root 文件
系統、自己的網絡配置、自己的進程空間,甚至是自己的用戶 ID 空間;
所以說,Mesos 正是用容器隔離開了不同的業務,使得它們運行時不會互相干擾。

兩層調度的缺點:
由於第二層調度只能獲得部分資源視圖,因此無法實現全局最優調度、也不能保證全局狀態的一致性;
容易導致資源碎片問題

3 共享狀態調度

第二層調度只知道集羣中的部分資源,無法進行全局最優調度,可以通過共享狀態調度解決

概念:

將單體調度器拆分爲多個調度器,每個調度器都有全局的資源狀態信息,實現了最優的任務調度,提供了更好的可擴展性

在這裏插入圖片描述

共享狀態調度架構爲了提供可用性和可擴展性,將集羣狀態之外的功能抽出來作爲獨立的服務:
State Storage 模塊(狀態維護模塊)負責存儲和維護資源及任務狀態,以便 Scheduler查詢資源狀態和調度任務;
Resource Pool 即爲多個節點集羣,接收並執行 Scheduler 調度的任務;
Scheduler 只包含任務調度操作,而不是像單體調度器那樣還需要管理集羣資源等

共享狀態調度也支持多種任務類型,但與兩層調度架構相比,主要有兩個不同之處:
1 存在多個調度器,每個調度器都可以擁有集羣全局的資源狀態信息,可以根據該信息進行任務調度;
2 共享狀態調度是樂觀併發調度:在執行了任務匹配算法後,調度器將其調度結果提交給State Storage,由其決定是否進行本次調度,從而解決競爭同一種資源而引起的衝突問題,實現全局最優調度;
而兩層調度是悲觀併發調度,在執行任務之前避免衝突,無法實現全局最優匹配。

樂觀併發調度:
強調事後檢測,在事務提交時檢查是否避免了衝突:
若避免,則提交;
否則回滾並自動重新執行。也就是說,它是在執行任務匹配調度算法後,待計算出結果後再進行衝突檢測。
悲觀併發調度:強調事前預防,在事務執行時檢查是否會存在衝突:
不存在,則繼續執行;
否則等待或回滾。也就是說,在執行任務匹配調度算法前,通過給不同的 Framework 發送不同的資源,以避免衝突。

4 總結對比

  • 單體調度、兩層調度和共享調度的區別是什麼
    在這裏插入圖片描述
    單體調度:由一箇中央調度器去管理整個集羣的資源信息和任務調度,所有任務只能通過中央調度器進行調度;
    優點:中央調度器擁有整個集羣的節點資源信息,可以實現全局最優調度
    缺點:無調度併發性,且中央服務器存在單點瓶頸問題,導致支持的調度規模和服務類型受限,同時會限制集羣的調度效率;
    場景:小規模集羣

兩層調度:將資源管理和任務調度分爲兩層來調度,第一層調度器負責集羣資源管理,並將可用資源發送給第二層調度;第二層調度接收到第一層調度發送的資源,進行任務調度。
優點:避免了單體調度的單點瓶頸問題,可以支持更大的服務規模和更多的服務類型;
缺點:第二層調度器只對全局資源信息有部分可觀察性,因此任務匹配算法無法實現全局最優;
場景:中等規模集羣

共享狀態調度:多個調度器,每個調度器都可以看到集羣的全局資源信息,並根據這些信息進行任務調度;
優點:每個調度器都可以獲取集羣中的全局資源信息,因此任務匹配算法可以實現全局最優性;
缺點:也因爲每個調度器都可以在全局範圍內進行任務匹配,所以多個調度器同時調度時,很可能會匹配到同一個節點,從而造成資源競爭和衝突;
在工程實踐中,如果沒有很好地處理資源競爭的問題,則很可能會產生資源衝突,從而導致任務調度失敗;
這時,用戶就需要對調度失敗的任務進行處理,比如重新調度、任務調度狀態維護等,從而進一步增加了任務調度操作的複雜度。(分佈式鎖、MVCC樂觀鎖)
場景:集羣規模最大。
在這裏插入圖片描述

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