Tao & Zen

Soli Deo Gloria!

导航

Glusterfs 源码分析后随笔

Glusterfs是一个存储空间和访问效率都可以线性增加的一个分布式文件系统,网上资料除了gluster.org以外,几乎没有什么有关的介绍了。

通过对源码的审阅,个人感觉,比较主要的是把程序的整体结构理清,扩展方式弄明白在向下看具体的实现是比较好的。

该系统扩充的方式是使用了translator的模式,具体我还参考了《现代操作系统》中分布式文件系统章节和GNU/HURD 中解释translator的部分,后者主要是在gnu的网站上。

数据结构上讲,整个文件系统中节点构成了一棵树,而且每个节点的操作是通过某个translator来工作的,一个节点可以附着很多的translator。所有的translator都要实现xlator结构体和相关的xlator_fops、xlator_mops两个“成员函数的结构体”,

从xlator“继承”下来的操作如果不自己定义,那么就会使用默认的设置,这个在default.c里面定义。当然自己定义的操作并赋值,这个过程有些象子类覆盖父类的操作,平行来看也就是多态。当然这是从面向对象角度来看的,该系统很多地方都使用了面向对象的思想来设计的,这个和linux 2.6以后的内核模块设计是异曲同工的。

那么一般可以这样识别一个用c实现的Class关键字的类:

例(对源文件有些修改):

struct A {

 char *name;

 char *type;                   //成员

 struct A *this;                 //this 指针

 struct xlator_fops *fops;     //成员操作结构体1

 struct xlator_mops *mops;        //成员操作结构体 2

 void (*fini) (struct A *this);   // 析构函数,垃圾清理

 int32_t (*init) (struct A *this);//构造函数,初始化

 event_notify_fn_t notify;     //成员。。

 dict_t *options;

 glusterfs_ctx_t *ctx;

 inode_table_t *itable;

 char ready;

 void *private;

};

    1.一个struct 定义里面包含一个指针 该指针的类型是该struct定义的类型。2.上面的struct内部成员中含有其他结构体的指针,象xlator_fops就是这里提到的其他结构体的指针,该结构体里面全部都是指向函数的指针,也就是成员函数 了。

当然此处也可以把xlator_fops里面的成员都释放到struct A里面, 但是这样这个struct就显得有些臃肿了,,毕竟成员函数还是不少的。上面这个例子还有两个只有类才具备的析构函数,和构造函数。

glusterfs_ctx 控制了全局的信息,很多地方传输都是使用它来传递的,一个典型的环境类。初始化些东西也是针对它来做的。

Redhat GFS和Glusterfs的目的类似,都是以全局在一个命名空间下而通过访问其他节点获取数据的。此处没有性能比较。

Lustre也是一个开源基于GNU lisence的集群文件系统,网站资源比较丰富,开发者的资源也比较多,中文资料也不少,sun公司收购了clusterfs公司,拥有了此技术。

下面地址显示的是lustre 与glusterfs做相当命令所需时间的比较:

http://www.gluster.org/docs/index.php/GlusterFS_1.3.pre2-VERGACION_vs_Lustre-1.4.9.1_Various_Benchmarks

下面的地址是NFS与glusterfs性能的测试对比:

http://www.gluster.org/docs/index.php/GlusterFS_1.2.1-BENKI_Aggregated_I/O_vs_NFSv4_Benchmark

posted on 2007-11-20 21:33  康国庆--thinkinlove  阅读(4645)  评论(2编辑  收藏  举报