Apache Mesos底层基础库

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Apache Mesos底层基础库

Protocal Buffer是google开源的用于数据交换的库,常用于跨语言的数据访问,担任的角色一般为对象的序列化反序列化。另一个与之类似的开源软件是facebook开源的thrift,它们两个最大区别是thrift提供了自动生成RPC的功能而Protocal Buffer需要自己实现,但Protocal Buffer 的一个优势是其序列化反序列化非常高效。

AD:

1.Protocol buffer

Protocal Buffer是google开源的用于数据交换的库,常用于跨语言的数据访问,担任的角色一般为对象的序列化反序列化。另一个与之类似的开源软件是facebook开源的thrift,它们两个最大区别是thrift提供了自动生成RPC的功能而Protocal Buffer需要自己实现,但Protocal Buffer 的一个优势是其序列化反序列化非常高效。

2.Libprocess

libprocess是采用CC++编写的高效消息传递编程模型(基于消息传递的网络通信模型,而不是RPC),由伯克利开源。其整个实现非常简单,包括最基本的消息发送和接收等。

2.1Libprocess模型

在mesos中,主要有四个角色,分别是:mesos-master,mesos-slave,framework(HadoopSpark 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中slaveslave.cpp:

install( Slave::newMasterDetected, NewMasterDetectedMessage::pid);

安装一个处理NewMasterDetectedMessage(ProtocalBuffer对象)的handler,mesos slave一旦接收到该消息,便会调用newMasterDetected函数处理,且该函数的输入参数是NewMasterDetectedMessage消息中的pid属性。

voidinstall(conststd::string name,void(T::*method)(constUPID ,conststd::string ))

安装一个处理字符串的handler,也就是说,当收到字符串name后,调用函数method进行处理。这个API在mesos中的典型应用时高山茶 维持master与slave之间的心跳,以确定彼此活着:

在slaveslave.cpp中:

install( PING , Slave::ping);voidSlave::ping(constUPID from,conststring body){send(from, PONG } 在mastermaster.cpp中:

install( PONG , SlaveObserver::pong);voidpong(constUPID from,conststring body){timeouts=0;pinged=false;}voidtimeout(){if(pinged){Sowehaven'tgotbackapongyet...if(++timeo uts =MAX_SLA VE_TIMEOUTS){deactivate();return;}}send(slave, PING );pinged=true;delay(SLA VE_PONG_TIMEOUT,self(), SlaveObserver::timeout);}

(2) send

voidsend(constprocess::UPID to,constgoogle::protobuf::Message message)

向某个UPID上发送消息,其中UPID代表一个socket,里面含有ip和port信息,而消息message

是ProtocalBuffer定义的对象。

(3) dispatch

voiddispatch(constUPID pid,conststd::tr1::shared_ptr f)

执行进程pid中的函数f,为了提高效率,该函数并不会等到函数f执行完成,而是采用了异步的方法:将函数f放入一个函数队列,由另外一个进程(或者多个)不断从队列中获取函数,依次执行。

(4) delay

Timerdelay(doublesecs,constPID pid,void(T::*method)())

延迟secs秒调度进程pid中的方法method,并返回一个计数器,通过这个计时器,可取消该调度。

在mesos中,巧妙地通过该函数构造了一个无限循环以不断检测空闲资源,并将之分配给各个框架,代码如下:

voidMaster::initialize(){ timerTickTimer=delay(1.0,self(), Master::timerTick);}voidMaster::timerTick(){ 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主页:index.html

(2)Mesos代码:https:reposasfincubatormesostrunk

原文链接:apache-mesosmesos-base-libarary【编辑推荐】Apache Mesos的任务分配过程分析Apache Mesos的Framework与Executor注册过程分析Apache Mesos调度机制Apache Mesos模块间通信架构【责任编辑:chensf TEL:(010)68476606】

程序员教程(第2版)

本书按照人事部、信息产业部全国计算机技术与软件专业技术资格(水平)考试程序员考试大纲编写,是对2004版的修订版,内容包括计

相关文档
最新文档