FastDFS具备两个角色,tracker和storage。tracker是负责文件获取中的调度和均衡。storage则存储文件,以及包括文件存储、文件同步和文件获取接口相关的文件管理。同样能够管理文件中表示key-value对的元数据。比如width=1024,key就是width,value就是1024。
tracker和storage可以包括一个或多个服务器。tracker和storage的服务器集群可以在影响在线服务功能超时时自动增加或删除。tracker集群的服务器是端到端的。storage服务器被组织成文件卷/文件组以获取高可用性。storage系统包含一个或多个文件可以独立存在其中的卷。整个storage系统的存储容量等于所有的卷容量之和。一个文件卷包含一个或多个storage服务器,里面的文件是相同的。这些属于同一个卷相互备份的服务器,还可以不断的进行负荷均衡。当增加一个storage服务器到一个卷,文件自动从已经存在的服务器迁移复制到新的服务器上。当复制完成后,系统将切换该服务器上线,使之提供在线存储服务。当整个storage能力不足时,你可以增加一个或多个卷扩展存储容量。为了达到这个目的,必需增加一个或多个storage服务器。
区分一个文件的标识符分为两部分,卷名和文件名。
上传文件交互过程:
1. client询问tracker上传到的storage,不需要附加参数;
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件上传。
下载文件交互过程:
1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件下载。
以上为翻译相关文档,简评一下。该设计思路与Glusterfs有些类似,虽然Glusterfs号称无元数据管理,其实也是有集中管理的元数据。fastDFS这些基本功能在Glusterfs中均有体现,但没有采用Glusterfs中复杂的translator设计各个模块。本人估计,按GOOGLE的一贯思路,必然是对Glusterfs设计作了相应的简化,并对自己可能的应用进行有针对性的优化。下面会继续看看代码实现细节。
补充:该实现并非GOOGLE出品,而是标准的国产——淘宝出品,比较吃惊,原来国内也能看到这样的开源产品。本人也从事IT十年,却没有写出类似的产品,十分惭愧。余庆为我们这些IT人树立了榜样。
参考文档:
http://bbs.chinaunix.net/thread-1920470-1-1.html
http://www.programmer.com.cn/4380/