RAMCloud源码分析(一)

作者:tuyunshan
RAMCloud技术交流QQ群:295905581


RAMCloud源码分析(一)


1. Coordinator流程分析

在RAMCloud集群中,Coordinator是一个重要的服务器,管理集群中所有的server服务器(master+backup)。主要有以下几方面功能:

  • 管理RAMCloud集群中所有活着服务器列表;
  • 管理所有元数据信息(如,每个server包含哪些tablets);以至于client可以检索这些信息,管理自己的配置缓存;
  • 负责判断哪一个server宕机,并初始化server宕机恢复;

Coordinator的主函数,位于/src/CoordinatorMain.cc中。代码执行流程,如图1所示。

  • 第一步: 设置信号处理函数;
  • 第二步: 解析命令行参数;
  • 第三步: Pin住所有当前和将来内存中的内存页,以至于OS不把他们交换到磁盘上;
  • 第四步: 初始化Transport以及设置PortTimeout和开始portTimer;
  • 第五步: 连接外部存储系统,并一直等待,知道成功变为Coordinator in charge;
  • 第六步: 创建一个MemoryMonitor对象,定期检查物理内存量(驻留集大小)的使用,发生变化时,打印日志消息;
  • 第七步: 创建一个CoordinatorService对象,为coordinator提供RPC服务;
  • 第八步: 创建一个PingService对象,仅用于ping请求。将这些请求放置在单独的服务中,允许他们有自己的线程,以至于ping相关的请求不被阻塞,即使在server的其他部分过载;
  • 第九步: 轮询是否有需要处理的事件;

这里写图片描述

2. Server流程分析

Server是一台实现RAMCloud存储系统的机器。RAMCloud系统拥有许多台Server,他们通常只执行可信RAMCloud代码。Server上执行来自client的RPC请求,以及server之间的相互沟通来管理RAMCloud系统。通常,每个server都作为一个master和一个backup。

在RAMCloud系统中,每个server扮演着两种角色,一个是master(在DRAM中存储object,并处理对这些object的读写请求),另一个是backup(在disk中存储object副本,用于宕机恢复)。master存储介质为DRAM,存储着primary object,所有的读写操作都必须直接访问master获取object。在RAMCloud系统中,每一个server都有一个存储许多不同object的master。master负责把primary object的副本存储到不同backup上,并在宕机恢复中,从disk中检索该信息。

Server的主函数,位于/src/ServerMain.cc中。代码执行流程,如图2所示。


  • 第一步: 设置信号处理函数;
  • 第二步: 解析命令行参数;
  • 第三步: 判断server类型,设置不同的配置参数;
  • 第四步: 初始化Transport;
  • 第五步: Transports可能增大local locator,确保server意识到这种改变;
  • 第六步: 如果不是backupOnly,设置master.logBytes和master.hashTableBytes;
  • 第七步: 设置PortTimeout和开始portTimer;
  • 第八步: 创建一个MemoryMonitor对象,定期检查物理内存量(驻留集大小)的使用,发生变化时,打印日志消息;
  • 第九步: 创建一个Server对象,并运行server.run();

这里写图片描述

由于作者水平有限,欢迎指正。

猜你喜欢

转载自blog.csdn.net/u011459120/article/details/53258101