Chord实现代码分析(一)
来源:互联网 发布:淘宝到家入驻收费 编辑:程序博客网 时间:2024/05/04 15:51
最近工作需要研究chord代码实现,干脆就把我的理解发到blog上,希望大家能指教错误和不足之处!
本人所用的代码为包含在SFSNet里的部分,目录为SFSNet/chord,里面包括了chord算法的主要实现。当然,如果要完全看懂代码,尤其是关于里面用到的很多refcounted,list等等,那么必须下载另外一份代码----sfslite2,这里面包括了sfsnet要用到的一些常用函数,具体说明见http://www.okws.org/doku.php?id=sfs:libasync
目前我是从sfsnet里面的一个关于location service daemon,简称为lsd程序,在sfsnet的lsd目录下,它初始化Chord和dhash层,并接受其他客户端的请求。这个lsd算是chord实际应用的一个完整流程,顺着它的运行路线,我想可以研究好Chord算法的实现。
Lsd程序启动是在lsd.C文件里的main函数,程序的开始进行的是对命令行参数的解析,具体可以看代码,这部分对于我们的研究不是很主要,可以快速略过。最后在快要结束的时候,程序进入了最关键的地方,代码如下:
chordnode = New refcounted<chord> (my_name,
myport,
modes[mode].producer,
vnodes,
max_loccache);
这里应该是初始化了一个Chord节点,其中的chord是在chord.h文件中定义的chord类,refcounted应该是类似于智能指针一类的东东,具体实现在refcnt.h。chord初始化的参数包括主机名,端口,modes[mode].producer是用的哪种路由算法,这里为chord,vnodes为虚拟节点的数量,max_loccache为最大缓存位置(?这里还有待考证)
接下来就是chord类的初始化函数,在chord_client.c里面。
首先也是对于配置情况的解释,包括最大virtual node,chord的rpc方式(有tcp和udp2种方式)。之后,根据rpc方式,初始化了一个rpc manager。然后分别初始化了一个tcp和udp的套结字,之后这句locations = New refcounted<locationtable> (max_cache);应该是一个满重要的部分,他针对每个chord node新建了一个locationtable类的locations变量,初步认为是用于定位的算法,因为关于insert,lookup等都是在该类实现。
最后,是一个for循环,循环的计数是vnode的数量,应该是创建每个chord node的finger table的项,即vnode。在循环里,首先根据ip和端口生成了hash id。然后,再通过前面locations变量将新建的vnode插入到finger table里面。通过locationtable的pin方法将新的vnode加入到pin list里。最后,在新建一个vnode节点,将其加入到vnodehash表里。
- Chord实现代码分析(一)
- Chord代码分析(一)
- Chord实现代码分析(二)
- 最近分析完了oversim之上的Chord、Gia实现
- 线程池实现代码分析(一)
- Chord算法实现详细
- Chord算法(原理)
- Chord算法(原理)
- Chord算法(原理)
- Chord算法(原理)
- Chord算法(原理)
- Chord算法(原理)
- 摆渡的士兵分析(一)以及代码实现
- FUSE 内核实现代码分析(一) 初始化
- [RK3399] 双屏异显代码实现流程分析(一)
- 转 -- Chord算法(原理)
- 可视化工具--D3--案例分析--Chord Diagram
- lvm代码分析(一)
- (转贴)Visual C#编写3D游戏框架示例
- Eclipse下J2EE开发环境配置
- .net关于企业Excel报表的生成
- ADAPTER(适配器)模式
- 好久没写了~~
- Chord实现代码分析(一)
- 用C语言产生真正的随机数
- eclipse配置JSP
- 利用钩子函数来捕捉键盘响应的windows应用程序
- 数据库设计问题
- linux下的C语言开发要学些什么
- vc++的若干实用小技巧
- VC Studio 使用技巧大全 2.0版本
- 安装 VS2005 SP1 有关问题的解决办法