Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27882
  • 博文数量: 7
  • 博客积分: 912
  • 博客等级: 准尉
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-11 19:26
文章分类
文章存档

2010年(4)

2009年(3)

最近访客

分类:

2010-05-18 10:37:35

没有元数据, 似乎比较难, 比较好的结果是,尽量避免源数据对整个系统的影响。

如何避免呢?  一个假设是: 在分布式文件系统中,一个客户端,通常只需要访问有限的数据,
或者,如果这个客户端需要访问大量数据,其本身应该有足够高的性能。 但是,客户端需要有
对他所属数据的整体访问能力。

这里的客户端,有两种,一种是终端用户, 一种是文件系统对外的接口。一个接口,可能被很多终
端用户访问。也就是,有很多小的命名空间。文件系统对外接口这层,不接受命名空间的请求,而
只接受fileid 的请求。 但是,接口还负责将命名空间传递给,终端客户。.用户每次创建文件的时候,
都会load 当前文件所在目录的命名空间。
                     
文件名的唯一表示:
/user/lvm/path/name

整个命名空间, 有/user 分割。 整个集群,可能被用户使用, 这里的用户,不是终端用户,
可能是一些公司用户。 lvm 为这个客户的卷管理。 只提供一层卷管理。卷管理,主要在/lvm
这一层, /user这一层。 /user1 /user2 之间的数据是隔离的。 lvm之间的数据,是可删除重复的。(暂时不做) /user/lvm/

 fileid_t 唯一表示:
方法1: /user/lvm/path/name;
        USER_LVM_MD5(path)_NAME_TIME;
方法2 : /user/lvm/path/name;
        /USER_LVM_MD5(PATH_NAME)_TIME:

第一种方法的特点是: 一个目录的所有文件,都会存储到一个group上。 这样的好处是?
另外,这里冒了一个险,冲突。 加上_NAME_TIME; 也是为了减小冲突。当用户读文件的时候,
如果发生冲突,那么用户将读到冲突的文件。 当创建文件的时候,如果发生冲突,则提示无法创建。

采用第二种方式的话,
 USER     LVM  PATH     time   other
 uint16_uint16_char[32]_uint32_pad

 
当用户load 一个path的时候,就可以 形成这个fileid, 然后访问通过hash,访问文件系统的一个group.

文件系统的机器,被划分了一组group. 这组group 是可以动态分裂,或者聚合的。文件系统最多256个
group. 当文件系统只有一个group的时候, 为group 256,
当这个group增长到一定程度,分裂成 group 128 group 256.
如果一个group继续增长,比如 group 128, 则 会 分裂成 group 64, group 128, group 256
.如果客户端不知道分裂的存在, group = char[32] / 256;
如果group不存在, 则哈西到 离它最近的一个组。
这样,当组扩展的时候, 如果一个系统不知道他的group已经分裂, 则会向一个更大的组发消息。
当组收缩的时候, 如果一个系统查询文件失败,则会向上层组查询。

如果一个组内的单节点挂掉,组内完成冗余。 如果整个组当掉, 相关文件则无法访问。

可以通过去掉一个组,来完成迁移,



 
 
 
 



阅读(1104) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~