因为刚刚涉足分布式文件存储这个领域,最近看了很多文档,现在感觉有点晕,目前对FastDFS很有兴趣,想引入项目中,请教一下,这个系统和GFS以及NFS对比,有什么区别和优势?这两个可能不是一个范畴的,或许与KFS,Gluster或lustre更接近一些,能不能描述一下这几个的区别,因为这方面的文档很少,这么好的东西要推广,也要有一个比较明确的对比和说明,更容易做方案去说服老板。^_^
比如我自己架apache服务器,然后后端访问GFS或者NFS,与使用FastDFS这样的方法有无区别?优缺点是?看了facebook的方案,似乎是app server后面用nfs提供文件的存储,但是对这些不了解,请斑竹指点一下,说错的地方请见谅。。。
建议你多看看论坛中的帖子。FastDFS是一个专用的文件系统,和MogileFS比较类似,需要使用专门的API来访问,他不是通用的文件系统,不能mount成path的形式使用。
专用文件系统相对于通用文件系统,更简洁高效,适用于一定的场合,比如网站存储图片、视频文件等。
注:NFS和lustre都属于通用文件系统。我对GFS、KFS、Gluster了解不多,就不进行评论了。
欢迎随时交流。
通过看论坛帖子,大概明白了和通用文件系统的区别和用途,请教一下,FastDFS是否适用于大容量小文件(小于2m),高并发系统使用?如果是小文件,每次存取都要查询tracker server,开销会不会太大,另外tracker server这样的形式,高并发压力会不会太大?问题比较初级,对分布式文件不太了解,希望能稍微展开说说,比如对常见的图片服务器这样的应用环境,有什么优势?
=================================================================================
FastDFS的设计目标就是支持大容量和高访问量。对于大量的小文件,可以支持得很好。
tracker server在内存中维护storage server信息,查询性能不存在任何问题,只是多了一次网络传输而已。
FastDFS适合存储用户上传的文件,比如用户照片。如果只是存储网站的静态文件(如装饰图片、css、js等),那没有必要使用FastDFS。
=================================================================================
看了文档,挺全面的,基本上都已经了解了,非常好,感谢作者及时的回复。
目前就一个问题想了解一下,文件名是系统生成的,那么存取文件时,是不是必须使用卷名加上这个系统生成的文件名进行存取?这样我就要去维护文件名的映射,因为我的系统中,文件名都是guid,是不会重复的,有没可能直接通过这个文件名来进行分布式存贮,我只传入一个guid的文件名,就能存取文件?比如进行二次开发后能实现这样的功能?
=================================================================================
>> 目前就一个问题想了解一下,文件名是系统生成的,那么存取文件时,是不是必须使用卷名加上这个系统生成的文件名进行存取?
是的。上传文件成功,FastDFS会返回一个文件标识(包括卷名和文件名)。
>> 这样我就要去维护文件名的映射,因为我的系统中,文件名都是guid,是不会重复的,有没可能直接通过这个文件名来进行分布式存贮,我只传入一个guid的文件名,就能存取文件?比如进行二次开发后能实现这样的功能?
文件标识也是不会重复的,和guid是一一对应的关系。建议将文件标识和guid一起保存。
=================================================================================
我补充问一个问题,happy fish你推荐使用什方式保存文件索引信息?我明白这个问题与应用环境相关,例如我使用fastdfs创建一个多用户图片站,我担心文件数一上去,索引信息的维护和检索反而会成为瓶颈,如果这个索引信息一但丢失,也是一种灾难。
=================================================================================
对于用户图片,可以按用户索引。如果每个用户的图片数不是太多,索引信息可以存放在我写的另外一个开源项目FastDHT(分布式Hash系统)中。
索引这块,我打算写一个分布式索引系统,实现索引的增、删、改、查,可以支持单个对象较大的索引信息。