1. 程式人生 > >第3章 分散式作業系統的程序和處理機

第3章 分散式作業系統的程序和處理機

前兩章我們講的是分散式作業系統的通訊和同步;下面我們要進一步理解程序。這裡講的程序跟單機計算機的程序本質是一樣的,但在分散式作業系統中程序管理有自己特殊的部分,特別是在多處理機環境下,如何管理程序就變得格外重要。在分散式系統中一個程序可能有多個執行緒,這種執行緒併發的能力帶來了很大的好處,但也讓分散式作業系統變得更加複雜。我們先研究下執行緒的概念、然後學習如何管理處理機和程序,然後介紹分散式中處理機的分配和排程,最後研究兩種特殊的分散式系統

3.1 執行緒

統一程序中的不同執行緒並不像不同的程序之間完全是相互獨立的,所有執行緒有同一地址空間,也就是它們共享全域性變數; 因為執行緒被髮明出來就是用來共享資源、協同工作、更加有效的完成任務的,所以執行緒之前需要相互共享資源、相互通訊,也就是執行緒的同步。

3.2 系統模型

程序在處理機上執行,在傳統系統中僅有一個處理機,因此不會出現怎樣利用處理機的問題;但在有多個處理機的分散式系統中,這就成為了一個主要的設計問題。分散式系統中的處理機可以用多種方式組織:工作站模型和處理機池模型,還有兩者的混合模型。
  • 工作站模型:分散式系統是由分佈在建築物(公司辦公網)中或者校園中並由告訴區域網連線起來的工作站構成。 ----> 校園、公司辦公網等據魚丸
  • 處理機池模型:  在機櫃裡面放滿CPU,它們可以根據需要動態地分配給使用者;這種莫可行不是未使用者提供個人工作站,而是給他們提供高效能的圖形終端來接收使用者的指令和任務,所有的任務都是在後面的分散式作業系統來完成。  -----> 各大網際網路公司的資料中心

3.3  處理機分配

在分散式系統中無論處理機用什麼模型來工作,是工作站模型、處理機池模型,還是二者的混合模型,都需要決定在哪些處理機上分配哪些程序(task) 來完成一個大的任務;這個怎麼分配就必須有一個演算法來分配,達到所有處理機的負載均衡。    分配策略有2種:一種是可遷移的,一種是不可遷移的
  • 可遷移的:分配給處理機的任務後,如果處理機負載比較高,可以把任務遷移到負載低的處理機;現在分散式作業系統肯定是可以遷移的
  • 不可遷移的:分配給處理機後,不管這臺機器的負載多高,都不會遷移,只能死等;但如果這臺處理機器出現問題,那是可以遷移的

3.4 分散式系統的排程

一個分散式系統的排程模組主要會有2個角色:資源管理者 和 任務排程
  • 資源管理就是:給任務或者服務分配計算機資源cpu、儲存資源mem +disk,網路資源traffic和I/O 資源;一般是基於cgroup 的機制來實現設定cpu和mem
  • 任務排程:類似於hadoop 處理的task;先把大的task 分解成許多個小的task 【分解多少個需要根據任務的大小和叢集大小來決定】,然後給每個task 分配一個處理機,並監控每個小task 完成(如果處理機負載高或者故障,需要把這個task 遷移其他的處理機器),在所有的task 完成後進行資料的merge,最後獲取這個task 的輸出結果

3.5 分散式系統的容錯

作為一個分散式系統,容錯可以說是一個標配;因為分散式作業系統是多處理機(規模可大可小,如果大可以有幾百萬臺處理機);物理是處理機的硬體還是分散式作業系統的軟體系統都有可能出錯;當出現錯誤時需要分散式作業系統能容錯,讓程式繼續跑,而且能得到正確的結果。

出錯分類:

  • 物理硬體錯誤:每臺處理機都有CPU、mem、磁碟、網絡卡等等硬體,這些硬體都有出錯的概率
  • 系統失效(中介軟體):分散式作業系統裡面有很多中介軟體,這些中介軟體異常的概率也是有的,那任何一箇中間件失效,分散式作業系統都需要具備容錯的功能
  • 同步系統和非同步系統:比如傳送給中介軟體一個請求,在指定的時間內返回結果就任務是正常,如果不能返回就認為是異常

容錯的方案---冗餘

  • 位資訊冗餘:程式碼層,在程式碼中加上一個位資訊,用來表示出錯時的解決之道
  • 時間冗餘:如果時間不要求,可以重新執行一遍
  • 物理冗餘:物理硬體的冗餘,比如現在有很多冗餘的處理機器,一臺如果壞了可以用空閒的直接替換;故障的機器只需要打一個標籤即可

3.6 實時分散式系統

跟單機作業系統一樣,很多場景也需要我們的作業系統是實時返回的,不能類似hadoop  一個task 可以跑一天後才出現結果;這樣的作業系統就叫實時分散式作業系統;實時分散式作業系統涉及到下面幾個問題:
  • 時鐘同步
  • 實時通訊
  • 實時排程