文章目錄
- 一、操作系統的資源調度:從單核到多核
- 二、 分布式系統的資源調度:從單臺服務器到集群
- 三、 固定資源映射
- 四、 動態資源分配:靈活的任務-資源匹配
- 五、 資源調度過程:從申請到執行
本文主要討論主題:
- 從操作系統到分布式系統,資源調度的復雜性隨著計算需求的增長而不斷增加。操作系統的進程調度關注單臺機器的任務執行,而分布式系統的資源調度則需要考慮多臺機器、多種計算任務以及任務與資源之間的靈活匹配。
- 通過引入資源調度器,分布式系統可以實現更高效、更靈活的資源管理與任務調度,使得計算任務能夠在更大規模的集群中平穩運行。而動態資源分配,不僅提高了資源的利用率,還為系統的擴展性、彈性和可維護性提供了保障。
?
一、操作系統的資源調度:從單核到多核
在操作系統中,資源調度的基本單位是進程。當計算任務較少,且只有一個CPU時,操作系統只能一次處理一個任務。在這種情況下,操作系統依賴進程調度算法來控制計算任務的順序。最初的調度方式是 時間片輪轉,即將CPU的使用時間劃分為小片段,多個計算任務交替執行,從而使得每個任務都有機會“看起來”像是獨占CPU。
隨著計算需求的增加,單核CPU無法滿足大量計算任務的需求,于是多核CPU應運而生。與單核不同,多核CPU可以同時執行多個任務,操作系統需要更為復雜的調度算法來協調這些核之間的工作。
?
二、 分布式系統的資源調度:從單臺服務器到集群
分布式系統則是對傳統操作系統調度的“擴展”。通過水平擴展,多個服務器通過網絡連接起來,共同處理更高并發的計算任務。這就引出了如何在多個服務器之間有效地調度資源的問題。在傳統的操作系統中,調度的是單臺機器上的資源(如CPU、內存),而在分布式系統中,需要調度的資源包括了多個節點上的 CPU、內存、硬盤、網絡等資源。
?
三、 固定資源映射
在分布式系統中,靜態資源分配是最簡單的資源管理方式。靜態分配將計算任務與資源節點綁定,即每個計算任務都有固定的資源節點執行。例如,在一個資源集群中,我們可以把Spark、MapReduce、Storm等計算任務分別分配到3個不同的資源節點上,每個任務都只有自己專屬的節點。這樣,資源節點1至3就專門用來運行Spark任務,資源節點4至6專門處理MapReduce任務。
然而,這種方式也有它的缺點。比如,當某些資源節點出現故障或者不可用時,其他任務可能無法獲得足夠的資源。即使有其他資源節點空閑,這些空閑節點也無法被其他計算任務使用。靜態資源分配的這一局限性使得資源利用率降低,并且無法應對集群規模的動態變化。
?
四、 動態資源分配:靈活的任務-資源匹配
相比靜態資源分配,動態資源分配更加靈活,它不再要求計算任務和資源節點一一綁定,而是通過一個資源調度器動態地將任務和資源進行匹配。在動態分配中,計算任務向資源調度器提出請求,調度器根據各資源節點的使用情況,決定將任務分配給哪些節點。
動態資源分配的優勢在于:
- 資源利用率提高:空閑的資源也可以被分配給其他任務。
- 彈性擴展性:如果集群規模需要擴展,只需增加新的資源節點,資源調度器會自動將新節點納入管理,實現資源的平滑擴展。
- 解耦計算任務與資源:動態資源分配解耦了計算任務與資源之間的綁定關系,允許多個計算框架(如Spark、MapReduce、Storm等)共享相同的資源。這種方式能夠適應各種不同的計算需求,提升了系統的靈活性和可維護性。
?
五、 資源調度過程:從申請到執行
調度策略包含所需的任務調度策略,也就是對資源和計算任務進行匹配的算法。資源池是對收集起來的硬件資源進行存儲和管理的地方。資源收集器,顧名思義就是對資源節點上報的資源進行收集和匯總。
資源調度器在動態資源分配中起到了核心作用。具體來說,資源調度的過程可以分為以下幾個步驟:
-
資源的組織與管理:分布在不同網絡節點上的資源(如CPU、內存等)由節點管理器管理。節點管理器定期向資源收集器匯報每個節點的資源使用情況。這些信息進入資源池,用于后續的任務調度。
-
計算任務的組織與管理:當有計算任務需要調度時,任務被放入任務隊列。資源調度器根據隊列中的任務和資源池中的資源,利用調度策略(如FIFO、公平調度、能力調度等)來決定資源分配的優先級和方式。
-
資源調度策略:資源調度策略決定了任務和資源的匹配方式。根據不同的策略,可以選擇FIFO策略(先進先出)、能力策略(按任務需求分配資源)等。
-
任務執行與資源回收:當資源被分配給任務后,計算任務在資源節點上執行。任務執行完畢后,資源調度器回收資源,空閑資源會重新進入資源池等待下一次分配。
?
《分布式架構原理與實踐 - 崔皓》