4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
Chord代码分析(一)_hudaiqian的专栏-CSDN博客
来自 : CSDN技术社区 发布时间:2021-03-24

最近在研究Chord算法 需要看看其具体实现 所以就把自己看代码的见解写在这里 一来便于查阅 二来可以得到大家的指正 欢迎讨论

mail hudaiqian gmail.com yahoo:hudaiqian yahoo.com.cn

这是今天完成的第一部分代码的阅读小结 欢迎多指教。

本人所用的代码为包含在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节点 将其加入到vnode hash表里。

本文链接: http://chordip.immuno-online.com/view-694061.html

发布于 : 2021-03-24 阅读(0)