溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

什么是Mesos Framework開發(fā)

發(fā)布時間:2021-10-12 14:20:14 來源:億速云 閱讀:162 作者:柒染 欄目:云計算

今天就跟大家聊聊有關(guān)什么是Mesos Framework開發(fā),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Mesos 介紹

Mesos 官網(wǎng)是這樣介紹自己的:

Program against your datacenter like it’s a single pool of resources

Apache Mesos abstracts CPU, memory, storage, and other compute resources away from machines (physical or virtual), enabling fault-tolerant and elastic distributed systems to easily be built and run effectively.

翻譯過來就是:

Mesos 使你的數(shù)據(jù)中心看起來像一個資源池。

Apache Mesos 將CPU、內(nèi)存、存儲和其他計算資源從機器(物理機或虛擬機)中抽象出來,從而使容錯和彈性的分布式系統(tǒng)易于構(gòu)建和有效運行。

通俗來講就是:

Mesos 作為主機上各種資源的管理者,使你可以在Mesos之上更方便地維護和使用這些資源,進行程序的分布式運行和管理。

更詳細的介紹可以去官網(wǎng)查看文檔。

Mesos Framework 介紹

Mesos Framework 由兩部分組成:

  • Scheduler 框架器

  • Executor 執(zhí)行器

既然Mesos是主機資源的管理者,那么Framework中的Scheduler就是主機資源的調(diào)度者,它負責決定使用哪些資源下發(fā)哪些任務(wù),而Executor就是下發(fā)任務(wù)工作的執(zhí)行者,它真正地負責執(zhí)行任務(wù)的運行工作。

Mesos 會將主機上的資源抽象成一片片的資源邀約(resources offer),不斷的發(fā)給以特定角色(role)注冊在Mesos上的Scheduler,然后Scheduler拿到這些offer后,根據(jù)是否是任務(wù)所需的將這些offer進行拒絕(decline)或接受(accept),如果可以接受這個offer,就要告訴Mesos Master我要用多少資源,以及下發(fā)什么樣的任務(wù),之后Mesos Master將這些信息經(jīng)過一系列的流轉(zhuǎn),最終通知給每臺主機上運行的Executor,實現(xiàn)任務(wù)在主機上的運行工作。

Framework Scheduler 開發(fā)

在了解了Mesos Framework的大致原理后,就可以嘗試開發(fā)Framework了,本文主要介紹Scheduler的開發(fā)。

Mesos官網(wǎng)文檔中有對于Framework開發(fā)的指導(dǎo) Framework Development Guide,我提取了其中比較關(guān)鍵的地方:

框架開發(fā)指南

對于Scheduler開發(fā),有兩種方式:

  • 通過實現(xiàn)SchedulerDriver C++ 接口,建議Mesos 0.28.0 or 更老的版本

  • 通過HTTP API ,建議Mesos 1.0 or 更新的版本

對于第一種方式,Scheduler開發(fā)人員通過注冊事件回調(diào)方法,來實現(xiàn)自定義的調(diào)度邏輯。因為SchedulerDriver 接口是用C++編寫的,這要求Scheduler開發(fā)人員使用C++語言,其他語言使用C++編譯而來的本地庫。

NameLanguage
Scheduler LibraryC++
Scheduler Adapter (depends on native libmesos)Java

第二種方式,是新版本Mesos推薦的用法,各種語言現(xiàn)成的的庫也有很多,詳情查看: HTTP API client libraries

隨后會通過示例程序,來介紹這兩種方式的環(huán)境搭建。

為了保證多Scheduler的可擴展性,Mesos給了以下建議:

  • 使用 Suppress:調(diào)用Suppress后,Mesos就不再給Scheduler發(fā)送資源Offer。在沒有任務(wù)要下發(fā)或沒有其他對offer的操作時,Scheduler必須保持suppressed 狀態(tài),以確保Mesos更有效地為其他Scheduler提供offer。

  • 不要長時間持有Offers: 如果某些Offers不是Scheduler所需的,請立馬拒絕(decline)掉它。否則,這些資源Offers就無法提供給其他的Scheduler,并且本身收到的資源offers也會減少。

  • 使用一個較大超時時間拒絕Decline 資源Offers: 當拒絕一個offer時,設(shè)置一個較大的 Filters.refuse_seconds 超時 (例如 1 hour)。這可以確保Mesos有時間去嘗試向其他的Scheduler提供資源offers(作者認為,這個時間需要具體情況具體分析,比如需要任務(wù)重試時,這個超時就不能太大) 。但是,如果Scheduler最終無法進入SUPPRESSED狀態(tài),并且在拒絕后有新的任務(wù)要下發(fā)時,則在一段時間內(nèi),如果沒有接收到足夠的資源Offers,則應(yīng)考慮使用REVIVE進行恢復(fù)。

  • 不要頻繁地調(diào)用REVIVE: 調(diào)用REVIVE會清除掉所有的filters,并且,如果頻繁地調(diào)用REVIVE ,就相當于使用很短的超時時間去拒絕offer。

  • 設(shè)置 FrameworkInfo.offer_filters: 在Scheduler的配置中設(shè)置這個參數(shù),可以指定全局的filters。目前支持的參數(shù)為OfferFilters.min_allocatable_resources,在集群層面也有這個配置(使用--min_allocatable_resources進行指定),可以前者對每個角色進行配置,去覆蓋掉后者的配置。使用一個想要收到的最小Offer的大小來設(shè)置FrameworkInfo.offer_filters,能夠確保Scheduler能夠更好的收到足夠合適大小的Offer。

在操作上,當有不同的Scheduler共存時,可以做以下事情來確保Scheduler能夠獲取它們所需的資源:

  • 不在Schedulers之間共享同一個Role

  • 使用quota給角色分配資源

  • 設(shè)置最小分配資源量

  • 考慮啟用隨機排序

Scheduler 開發(fā)示例

我在github上放了兩個示例程序,分別使用上面提到的兩種方式。

通過實現(xiàn)SchedulerDriver接口

github地址:mesos-framework-demo

語言:Java

由于使用了C++本地庫,所以在運行jar包時,要在/usr/local/lib放入mesoslib.so文件,也可以通過設(shè)置環(huán)境變量來改變這個路徑:

MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/mesoslib.so

查看clone下來的代碼,完成的工作有:

1.設(shè)置FrameworkInfo,主要包括:

  • user 指定executor或task的運行用戶

  • name 指定Framework的名字

  • id 指定Framework的唯一標識

  • failoverTimeout 指定等待故障排除的時間,超過這個時間未重新注冊,框架及其下運行的任務(wù)將會被移除

  • role 角色名

2.實現(xiàn)org.apache.mesos.Scheduler接口的方法,主要包括:

  • registered() 注冊成功時回調(diào)

  • resourceOffers() 資源Offers到達時回調(diào)

  • statusUpdate() 任務(wù)狀態(tài)有更新時回調(diào)

  • reregistered() 重新注冊時回調(diào)

3.配置Zk地址,用于發(fā)現(xiàn)Mesos Master

完成以上配置及實現(xiàn),即可實現(xiàn)了一個簡單的Framework Scheduler,當注冊成功后,在Mesos的/frameworks頁面,可以看到你啟動的Framework。

示例項目中,mesos.proto是數(shù)據(jù)的結(jié)構(gòu)定義,里面有各種數(shù)據(jù)的類型與結(jié)構(gòu)關(guān)系。

通過HTTP API

github地址:mesos-framework-go-example

語言:golang

為了方便,使用了現(xiàn)成的第三方工具 mesos-go

要做的工作相比第一種方式,第三步不再是配置Zk地址,而是配置Mesos的scheduler接口地址:

Url: "http://localhost:5050/api/v1/scheduler",
開發(fā)建議
  • 選擇合適的數(shù)據(jù)存儲中間件,例如:Zookeeper、Etcd、Mysql

  • 使用多實例,保證高可用

  • 如果在resourceOffers()回調(diào)方法中存在Http請求或數(shù)據(jù)訪問,在使用Filters.refuse_seconds 控制resourceOffers()回調(diào)頻率的同時,建議增加緩存機制。

看完上述內(nèi)容,你們對什么是Mesos Framework開發(fā)有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI