摘要:由一個來管理在每個集群節點上的運行也稱為在這些上運行。它最優的特點是消息在不同的之間傳遞,它抽象了,消息傳遞其實是一個事件的庫。底層實際上依賴于,為了保證分布式存儲最終一致性。在上運行的由兩部分組成一個是,通過注冊到來獲取集群資源。
Mesos Architecture
上圖顯示了 Mesos 的主要組成部分。 Mesos 由一個 master daemon 來管理 slave daemon 在每個集群節點上的運行, mesos applications ( 也稱為 frameworks )在這些 slaves 上運行 tasks。
Mesos master&slave
首先,Mesos是一個分布式的架構,它分Mesos master和Mesos slave,slave和master分別有不同的職責。從Mesos的源代碼可以看出Mesos實現得比較優雅——它是一個C++代碼。代碼中有大量的關鍵詞叫process,它不是傳統意義上的進程,而是一種抽象的libprocess,libprocess是它最核心的庫。如果大家以前使用過Erlang的語言就知道libprocess實際是對Erlang的IO和通訊模型的一個抽象。
libprocess,在Erlang里面也叫進程,實際上是一個虛擬進程,在運行Erlang的VM上。它最優的特點是消息在不同的process之間傳遞,它抽象了process,消息傳遞其實是一個事件的庫。向process里發一個消息,這個消息不是直接打到process,而是中間有一個buffer的過程。
這樣做的優點是特別適合分布式的系統,以前最常用的做法是監聽網絡端口,有包來了,有一個模塊專門負責解這個包,解開一個協議后把這個協議發到后面一個處理進程,這個處理的進程可能是IO操作,可能去做其它事情,然后里面有很多IO上的Block,最后構造出一個response,通過一個socket傳給客戶端。這是最常用的一個寫網絡程序的辦法,但是這里有一個大的IO上Block的地方——后面處理的邏輯依賴于解包的邏輯。如果處理邏輯很快,但解包邏輯很慢,后面會拖慢,都在等解包。
后來人們想到一種IO處理的方式,讓任何一個東西都是分離的,比如從某一個端口收到一個消息,有一個多帶帶的進程,一個線程或者其它的東西去處理這個唯一的請求。這個線程很重,后來大家又發明了一些其它的東西,比如golang里面去搞一個channel,Erlang里面去搞一個process。libprocess實際上做了IO方面的事情, Mesos大量使用這個模型。
Zookeeper
Mesos底層實際上依賴于Zookeeper,為了保證分布式存儲最終一致性。在Mesos運行過程中產生了一些數據,最終都會落在Zookeeper。因為Mesos是多個master,為了達到HA的需求,只要一個master活的,那么整個服務就能得到保證。
protobuf
Mesos內部在通信里面選擇了protobuf協議。好處是比較流行,各個語言的庫都比較多,結構化的語義也比較強,所以Mesos內部選擇了protobuf。
Master 使用 Resource Offers 實現跨應用細粒度資源共享,如 cpu、內存、磁盤、網絡等。 master 根據指定的策略來決定分配多少資源給 framework ,如公平共享策略,或優先級策略。 為了支持更多樣性的策略,master 采用模塊化結構,這樣就可以方便的通過插件形式來添加新的分配模塊。
在 Mesos 上運行的 framework 由兩部分組成:
一個是 scheduler ,通過注冊到 master 來獲取集群資源。
另一個是在 slave 節點上運行的 executor 進程,它可以執行 framework 的 task 。 Master 決定為每個 framework 提供多少資源, framework 的 scheduler 來選擇其中提供的資源。當 framework 同意了提供的資源,它通過 master 將 task發送到提供資源的slaves 上運行。
資源供給的一個例子下圖描述了一個 Framework 如何通過調度來運行一個 Task
事件流程:
Slave1 向 Master 報告,有4個CPU和4 GB內存可用
Master 發送一個 Resource Offer 給 Framework1 來描述 Slave1 有多少可用資源
FrameWork1 中的 FW Scheduler會答復 Master,我有兩個 Task 需要運行在 Slave1,一個 Task 需要<2個CPU,1 GB內存="">,另外一個Task需要<1個CPU,2 GB內存="">
最后,Master 發送這些 Tasks 給 Slave1。然后,Slave1還有1個CPU和1 GB內存沒有使用,所以分配模塊可以把這些資源提供給 Framework2
當 Tasks 完成和有新的空閑資源時,Resource Offer 會不斷重復這一個過程。、
當 Mesos 提供的瘦接口允許其來擴展和允許 frameworks 相對獨立的參與進來,一個問題將會出現: 一個 framwork 的限制如何被滿足在不被 Mesos 對這些限制所知曉的情況下?
例如, 一個 framework 如何得到數據本地化在不被 Mesos所知曉哪個節點存儲著被該 framwork 所需要的數據?Mesos 通過簡單的寄予 frameworks 能夠拒絕 offers 的能力來回答了這個問題。 一個 framework 將拒絕 不滿足其限制要求的 offers 并接受滿足其限制要求的 offers.
特殊情況下,我們找到一個簡單的策略 delay scheduling, 在該 frameworks 等待 一個限制時間來獲取存儲輸入數據的節點, 并生成接近的優化過得數據點。
本篇主要分享了mesos的組成部分和事件流程。下周會詳細介紹Mesos的概念解析和工作原理。
敬請期待。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26920.html
本文原文是 Deploy a Mesos Cluster with 7 Commands Using Docker 這個教程將給你展示怎樣使用 Docker 容器提供一個單節點的 Mesos 集群(未來的一篇文章將展示怎樣很容易的擴展這個到多個節點或者是見底部更新)。這意味著你可以使用 7 個命令啟動整個集群!不需要安裝任何東西除了一個正在運行的 Docker 服務器。 將啟動 4 個容器:...
摘要:第二部分介紹當當的彈性化中間件。第三部分當當的云化之路。下面部分是為當當運營人員與合作伙伴提供的系統,如商品價格庫存等。下圖是當當的監控系統以及限流系統的。當當采用的作業中間件是自研的,它可以將一個完整的作業拆分為多個相互獨立的任務。 showImg(https://segmentfault.com/img/remote/1460000009999152); 6月24日,雙態運維·烏鎮...
摘要:之前提到的文件即可利用以下模板生成請注意,其中的與就是占位符。如將某一特定部署至生產環境并運行個實例。而另一種方式則是使用等負載均衡器即服務器端發現??芍嘏渲们夷軌蛟谧兏l生后立即將請求路由至新實例。 如今與Mesos相關的文章可謂層出不窮,不過展示能夠直接用于生產的完整基礎設施的資料卻相當少見。在今天的文章中,我將介紹各組件的配置與使用方式,旨在幫助大家利用Mesos構建起持續交付且...
摘要:一概述意為,即使用來監控容器的插件或者模塊,既然有專業的等容器監控方案,為什么還要用傳統的呢在剛出現時,還沒有專業的容器監控方案公司已有的成熟實踐,想直接集成到中雖然不太優雅使用來監控有幾種方案,比如自己寫,利用的獲取信息,暴露接口給采集使 一.概述 Dockbix意為docker+zabbix,即使用zabbix來監控docker容器的插件或者模塊,既然有專業的cadvisor、pr...
閱讀 3106·2021-11-18 10:02
閱讀 2618·2021-10-13 09:47
閱讀 3034·2021-09-22 15:07
閱讀 791·2019-08-30 15:43
閱讀 1810·2019-08-30 10:59
閱讀 1685·2019-08-29 15:34
閱讀 1702·2019-08-29 15:06
閱讀 438·2019-08-29 13:28