开源的相关记录

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

AD:51CTO首届中国APP创新评选大赛正在招募>>

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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android行车记录仪是一种应用程序,用于记录和保存手机或平板电脑在车辆行驶过程中所获取的各种数据。这些数据包括车辆的位置、行驶速度、行驶里程等信息。 关于Android行车记录仪的开源性质,我们可以从两个方面来考虑。首先,对于开源社区来说,有许多开源项目可以作为Android行车记录仪的基础。开源意味着这些项目的源代码可以被公开访问和修改,任何人都可以自由地使用、学习和改进。这为开发者提供了很大的灵活性和自由度,使得他们可以根据自己的需求来定制和优化Android行车记录仪的功能和性能。 其次,针对Android行车记录仪本身的开源性,目前市面上已有一些开源的行车记录仪应用程序。这些应用程序的源代码可以被公开访问和获取,开发者可以在此基础上进行二次开发。开源行车记录仪能够带来更多的创新和发展机会,开发者可以根据用户的需求进行定制和改进,这让Android行车记录仪具备了更强大的功能和更好的用户体验。 总结来说,Android行车记录仪在开源社区中拥有广阔的发展空间。开源的行车记录仪应用程序为开发者提供了更多的选择和灵活性,同时也为用户带来了更好的功能和体验。通过开源,Android行车记录仪能够迅速响应市场需求,不断提升性能和功能,为用户提供更加精准和可靠的行车记录服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值