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做相当命令所需时间的比较:
下面的地址是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) 编辑 收藏 举报