mesos技術架構簡圖算法
如下內容參考了別的內容:docker
四個組件組成,分別是Mesos-master,mesos-slave,framework和executor架構
master主要負責管理各個framework和slave,並將slave上的資源分配給各個framework,框架
slave進程則負責運行計算框架的計算任務,向master彙報集羣節點的資源和計算框架的任務運行狀態。oop
framework和節點主要信息都存在zookeeper中spa
Framework:計算框架,如:Hadoop,Spark,marathon等,經過MesosSchedulerDiver接入Mesoscode
Executor:執行器,安裝到mesos-slave上,用於啓動計算框架中的task。orm
Scheduler:作資源的調度,這裏master和框架都有調度器,也就是雙層調度進程
Master scheduler :整個集羣的資源管理和調度內存
FrameworkScheduler:單個應用程序的管理和資源二次調度,基本操做均包括註冊、資源申請/獲取、資源分配(給內部的任務)等
第一層調度:調度器將master統計的這部分資源,發送給應用程序框架,供應用程序框架進行選擇,框架須要資源時,就會給master 發送有關資源申請(至關於接受master資源邀約)的信息,一旦master收到了來自框架的接受資源邀約或者申請的消息,就會自動更新slave資源使用狀況
第二層:框架本身的調度器將申請來的資源分配給本身內部的任務。
Master主要任務:
1.管理維護框架應用程序,框架程序中記錄正在運行的任務、已經完成的任務,發送給應用程序框架但尚未收到回覆的resource offer、框架的已分配資源、在slave上運行的執行器信息
2.管理維護存活的slave。slave中須要記錄在slave上運行的應用程序框架的執行器、在slave上運行的全部任務,屬於slave上的已經發送給應用程序框架但沒有收到迴應的offer,slave上全部offer佔用的資源,(全部分配的)已被任務和執行器使用的資源,負責slave心跳保活的process。
注:
Slave 和 framework須要向master註冊,註冊的主要信息存儲在zookeeper中。Master的元數據信息沒有持久化,而是在內存中維護,爲了方便交互。
Slave持久化的數據分紅五個部分,分別是slave的信息framework的信息、executor的信息、任務的信息,和任務的狀態變化
調度算法:Resource Allocation
Mesos 提供兩種資源分配的算法, 第一種是max-min fairness 調度算法, 另外一種是嚴格的資源限制。默認使用後者
Mesos 提供兩種刪除資源的方法, 好比這個framework長時間的佔用資源, 這個時候怎麼辦, 好比想MapReduce 這樣的任務, 那麼就直接殺死, 由於對MapReduce這種架構而言, 單個任務的影響是不大的. 可是對MPI這種任務就不行, 由於MPI裏面任務都不獨立. 因此對於想MPI這種任務, allocation module提供了guaranteed allocation 的保證. 如今Mesos的作法比較簡單, 若是一個framework在它保證的資源一下, 都不殺死, 若是超過了 所有殺死
調度的侷限性 :
因爲不一樣framework須要的資源不同, 這種Two level 調度, 不能把多種類型打包起來, 分配資源不夠合理
由於在運行各類不一樣類型的framework的時候, 容易把全部的資源碎片化, 致使有一些framework須要大任務運行不起來. 若是是中心化調度的話, 由於他知道全部的須要調度的請求, 由於不存在這個問題
task刪除
刪除任務則較爲簡單,刪除任務是由framework發起的,killTaskMessage沿着framework、master、slave、執行器這一條鏈路上進行傳遞,但在處理killTaskMessage信令時,正常狀況下都不會直接刪除task,而是在後續處理StatusUpdateMessage時,檢測到task狀態爲failed、killed和finished纔會真正刪除task。
對於docker容器任務執行完,狀態爲exited,slave上不會馬上刪除,而是在必定的時間後纔會刪除