成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Apache Mesos底層基礎庫

開發 前端
Protocal Buffer是google開源的用于數據交換的庫,常用于跨語言的數據訪問,擔任的角色一般為對象的序列化/反序列化。 另一個與之類似的開源軟件是facebook開源的thrift,它們兩個最大區別是thrift提供了自動生成RPC的功能而Protocal Buffer需要自己實現,但Protocal Buffer的一個優勢是其序列化/反序列化非常高效。

1. Protocol buffer

Protocal Buffer是google開源的用于數據交換的庫,常用于跨語言的數據訪問,擔任的角色一般為對象的序列化/反序列化。 另一個與之類似的開源軟件是facebook開源的thrift,它們兩個最大區別是thrift提供了自動生成RPC的功能而Protocal Buffer需要自己實現,但Protocal Buffer的一個優勢是其序列化/反序列化非常高效。

2. Libprocess

libprocess是采用C/C++編寫的高效消息傳遞編程模型(基于消息傳遞的網絡通信模型,而不是RPC),由伯克利開源。 其整個實現非常簡單,包括最基本的消息發送和接收等。

2.1 Libprocess模型

在mesos中,主要有四個角色,分別是:mesos-master,mesos-slave,framework(Hadoop/Spark /MPI等) scheduler,executor(在mesos-slave上執行framework task的組件),每種角色均是一個Process,在實現時會繼承libprocess中的ProtobufProcess類(它又繼承了 Process類),這樣,它們均會編成一個后臺運行且不斷監聽protocal buffer消息的socket server,如下圖所示:

2.2 各種常用函數

Libprocess+protocol buffer組合是mesos最底層最重要的消息傳遞基礎庫(沒有采用RPC機制),由于該庫采用了基于Protocal Buffer消息傳遞的通信機制),因而非常高效。Mesos常用的兩個頭文件是libprocess\include\process下的 process.hpp和protobuf.hpp,這兩個提供了用于消息傳遞的API,其中process.hpp是最核心的文件,提供了原始的接口, 而protobuf.hpp是在process.hpp基礎上,加入了ProtocalBuffer對象參數,使ProtocalBuffer使用起來更 加容易。

(1) install

void install(void (T::*method)(P1C),P1 (M::*param1)() const);

安裝一個處理ProtocalBuffer消息的handler,其中,消息類型是M,該消息對應的處理函數是method,函數參數為M::*param1。舉例:mesos中slave/slave.cpp:

  1. install( 
  2.       &Slave::newMasterDetected, 
  3.       &NewMasterDetectedMessage::pid); 

安裝一個處理NewMasterDetectedMessage(ProtocalBuffer對象)的handler,mesos slave一旦接收到該消息,便會調用newMasterDetected函數處理, 且該函數的輸入參數是NewMasterDetectedMessage消息中的pid屬性。

  1. void install(const std::string& name,void (T::*method)(const UPID&, const std::string&)) 

安裝一個處理字符串的handler,也就是說,當收到字符串name后,調用函數method進行處理。這個API在mesos中的典型應用時維持master與slave之間的心跳,以確定彼此活著:

在slave/slave.cpp中:

  1. install("PING", &Slave::ping); 
  2.   
  3. void Slave::ping(const UPID& from, const string& body) 
  4.   send(from, "PONG"); 

在master/master.cpp中:

  1. install("PONG", &SlaveObserver::pong); 
  2.   void pong(const UPID& from, const string& body) 
  3.   { 
  4.     timeouts = 0; 
  5.     pinged = false
  6.   } 
  7.   void timeout() 
  8.   { 
  9.     if (pinged) { // So we haven't got back a pong yet ... 
  10.       if (++timeouts >= MAX_SLAVE_TIMEOUTS) { 
  11.         deactivate(); 
  12.         return
  13.       } 
  14.     } 
  15.     send(slave, "PING"); 
  16.     pinged = true
  17.     delay(SLAVE_PONG_TIMEOUT, self(), &SlaveObserver::timeout); 
  18.   } 

(2) send

  1. void send(const process::UPID& to, const google::protobuf::Message& message) 

向某個UPID上發送消息,其中UPID代表一個socket,里面含有ip和port信息,而消息message是ProtocalBuffer定義的對象。

(3) dispatch

  1. void dispatch(const UPID& pid, 
  2.   const std::tr1::shared_ptr >& f) 

執行進程pid中的函數f,為了提高效率,該函數并不會等到函數f執行完成,而是采用了異步的方法:將函數f放入一個函數隊列,由另外一個進程(或者多個)不斷從隊列中獲取函數,依次執行。

(4) delay

  1. Timer delay(double secs,const PID& pid,void (T::*method)()) 

延遲secs秒調度進程pid中的方法method,并返回一個計數器,通過這個計時器,可取消該調度。

在mesos中,巧妙地通過該函數構造了一個無限循環以不斷檢測空閑資源,并將之分配給各個框架,代碼如下:

  1. void Master::initialize() { 
  2. …… 
  3.   timerTickTimer = delay(1.0, self(), &Master::timerTick); 
  4. void Master::timerTick() { 
  5.   …… 
  6.   timerTickTimer = delay(1.0, self(), &Master::timerTick); 

上面函數代碼段可完成每1s調用一次timerTick函數的功能。

3. Boost

非常有名的開源C++基礎庫,里面的STL非常高效方便,已被很多著名軟件采用。

4. Zookeeper

是一個針對大型分布式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、分布式同步、組服務等。 Mesos采用zookeeper解決master單點故障問題,使用zookeeper搭建一個master集群,當master出現故障時,選擇一個 standby master 變為master。

5. glog

Google開源的C++日志庫,主用于C++程序中打印日志,打印格式如下:

I0411 17:26:54.150193 20653 main.cpp:111] Creating “process” isolation module

I0411 17:26:54.150400 20653 main.cpp:119] Build: 2012-04-11 16:50:21 by root

I0411 17:26:54.150658 20653 main.cpp:120] Starting Mesos slave

I0411 17:26:54.152981 20669 slave.cpp:191] Slave started on 123.145.2.2:34694

I0411 17:26:54.153024 20669 slave.cpp:192] Slave resources: cpus=2; mem=490

6. gmock

開源 C++ 單元測試框架

7. 參考資料

(1)Mesos主頁:http://www.mesosproject.org/index.html

(2)Mesos代碼:https://svn.apache.org/repos/asf/incubator/mesos/trunk/

原文鏈接:http://dongxicheng.org/apache-mesos/mesos-base-libarary/

責任編輯:陳四芳 來源: dongxicheng.org
相關推薦

2014-02-14 15:12:41

ApacheMesos架構

2014-01-06 17:30:50

ApacheMesos架構

2014-01-06 17:09:10

ApacheMesos

2014-01-06 17:13:59

ApacheMesos

2021-04-08 13:51:48

Apache Meso開發者項目

2014-01-06 16:38:29

MesosApache

2014-01-06 11:26:38

ApacheMesos

2014-01-06 17:41:44

ApacheMesos

2015-01-19 13:33:44

KubernetesMesos計算集群

2017-04-12 11:02:50

Apache Meso資源利用容器

2021-04-19 08:17:42

MesosKubernetesLinux

2017-02-27 09:03:37

Mesos架構源碼

2011-03-11 08:58:26

Apache Couc

2015-10-15 11:05:21

OpenStackKubernetesMesos

2019-05-07 16:15:06

iOS系統系統通知庫通知消息

2012-08-24 09:01:02

IBMdW

2016-01-07 10:29:36

MesosDocker持續交付

2014-01-06 11:23:54

Mesos設計架構

2017-03-20 14:51:33

2021-03-23 08:40:47

集群管理系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 电影在线 | 久草在线在线精品观看 | 国产午夜在线 | 在线一区 | 日韩黄色免费 | 精品一区二区三区在线观看国产 | 国产高清毛片 | 亚洲欧美在线观看 | 成年免费视频 | 亚洲欧美日韩电影 | 国产精品日韩高清伦字幕搜索 | 一区二区三区四区在线视频 | 日韩免费在线视频 | 亚洲精品成人网 | 国产精品视频一区二区三区 | 日韩视频中文字幕 | 黄色大片视频 | 欧美久久久网站 | 国产在线不卡 | 51ⅴ精品国产91久久久久久 | 一区二区三区在线观看免费视频 | 毛片一级黄色 | 色资源在线 | av网站推荐| 色888www视频在线观看 | 新超碰97 | 日韩视频精品在线 | 女同av亚洲女人天堂 | 韩国主播午夜大尺度福利 | 国产精品久久久久久久久久久免费看 | 古典武侠第一页久久777 | 色啪网 | 久久久国产一区二区三区四区小说 | 中文字幕在线一区 | 国产在线精品一区二区三区 | 久久久久久免费毛片精品 | 国产又色又爽又黄又免费 | 亚洲综合在线网 | 蜜桃精品在线 | 欧美一级黄色片在线观看 | 黄色一级特级片 |