Mesos介绍
????Mesos項目可以很容易地實現分布式應用的自動化調度。同時,Mesos自身也很高的結合和主持了Docker等相關容器技術,基于Mesos已有的大量應用框架,可以實現用戶應用的快速上線。
????Mesos可以將整個數據中心的資源(包括CPU、內存、存儲、網絡等)進行抽象和調度,是的多個應用同時運行在集群中分享資源,并無需關心資源的屋里分布情況。
如果把數據中心中的集群資源看做一臺服務器,那么Mesos要做的事情,其實就是今天操作系統內核的職責:抽象資源+調度任務。Mesos項目代碼已經相對成熟。擁有許多引人注目的特性,包括:
Mesos才用了經典的“主-從”架構,其中主節點(管理節點)可以使用Zookeeper來做HA。Mesos master 服務獎運行在主節點上,Mesos slave 服務則需要運行在各個計算任務節點上。負責完成具體任務的應用框架,與Mesos master進行交互,來申請資源。
???????? Mesos有三個基本的組件:管理服務(master)、任務服務(slave)以及應用框架(framework)。
???????? 管理服務(master):跟大部分分布式系統中類似,主節點起到管理作用,將看到全局的信息,負責不同應用框架之間的資源調度和邏輯控制。應用框架需要注冊到管理服務上才能被使用。用戶和應用需要通用主節點提供的API來獲取集群狀態和操作集群資源。
???????? 任務服務(slave):負責匯報本從節點上的資源狀態(空閑資源、運行狀態等等)給主節點,并負責隔離本地資源來執行主節點分配的具體任務。隔離機制目前包括各種容器機制,包括LXC、Docker等。
???????? 應用框架(framework):應用框架是實際干活的,包括連個主要組件:
?????????????????? 調度器:注冊到主機誒單,等待分配資源;
?????????????????? 執行器:在從節點上執行框架指定的任務(框架也可以使用Mesos自帶的執行器,包括shell腳本執行器和Docker執行器)
???????? 應用框架可以分兩種:一種是對資源的需求會擴展(比如Hadoop、Spark等),申請后還可能調整;另一種是對資源的需求將會固定(MPI等),一次申請即可。
調度
????對于一個資源調度框架來說,最核心的就是調度機制,怎么能快速高效地完成對某個應用框架資源的分配,是核心競爭力所在。最理想情況下(大部分時候都無法實現),最好是能猜到應用們的實際需求,實現最大化的資源使用率。
????Mesos為了實現盡量優化的調度,采取了兩層(two-layer)的調度算法
????調度的基本思路很簡單,master先全局調度一大塊資源給某個framework,framework自己在實現內部的細粒度調度,決定那個任務用多少資源。兩層調度簡化了Mesos master自身的調度過程,通過將復雜的細粒度調度交由framework實現,避免了Mesos master成為性能的瓶頸。
調度過程
????調度通過offer發送的方式進行交互。一個offer是一組資源例如<1 CPU ,2GB Mem>>。
基本調度過程如下:
????具體給出一個例子:某從節點想主節點匯報自己有<4 CPU , 8 GB Mem>的空閑資源,同時,主節點看到某個應用框架請求<3 CPU , 6 GB Mem>,就創建一個offer<slave #1, 4 CPU, 8GB> 把滿足的資源發給應用框架。應用框架(的調度器)收到offer后覺得可以接受,就恢復主節點,并告訴主機節點希望運行兩個任務:一個占用<1CPU ,2GB Mem>, 一個占用<2 CPU , 4GB Mem>。主節點收到任務信息后分配任務到從節點上運行(實際上是應用框架的執行器來負責執行任務)。任務執行結束后資源可以被釋放出來。剩余則資源還尅繼續分配給其他應用框架或任務。
????應用框架在收到offer后,如果offer不滿足自己的偏好(例如希望繼續使用上次的slave)則可以選擇拒絕offer,等待master發送新的offer過來。另外可以通過過濾機制加快資源的分配過程。
?
總結
- 上一篇: 【5分钟系列】搭建基于docker环境搭
- 下一篇: ThreadPoolExecutor里面