RAMCloud源码分析
Posted ystu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
由于作者水平有限,欢迎指正。
以上是关于RAMCloud源码分析的主要内容,如果未能解决你的问题,请参考以下文章