TFS和FastDFS对比
转自:http://duoyun.org/topic/5456503ad9abb4454c31d4fa
各种资料已经很多了,各自也都有一些用户群。架构设计的什么的就不提了。主要从用户体验上来对比一下:
- 安装配置
TFS体验不如FastDFS
TFS稍显复杂,尤其是在稍微高版本gcc下就编译通不过,如centos 6下(需要稍微修改下源码)。对于一个大公司的产品实在是丢人。TFS nginx模块代码快2年没有更新,在稍微高点的nginx版本下编译报错(如nginx1.6),同样,丢人。
FastDFS在新版本编译没有任何问题,包括gcc 4.8.2下,已在centos 7.0测试正常。 - 客户端API
二者基本相当。都提供了比较多的客户端。
TFS nginx模块提供REST API使用更方便。
而FastDFS nginx模块写的比较简单,只支持http下载(get),上传需要用相应客户端。 - 资源消耗
TFS比FastDFS多。
TFS nameserver启动后,CPU使用率在35%左右(1core),居高不下,且启动时需要很多数百M内存,否则启动不起来;启动后内存占用降低,但CPU占用太高。
FastDFS tracker需要资源很少,storage启动时候需要分配64M内存(内存占用大小可以设置max_connections*buff_size),启动后保持。 - 空间分配
TFS采用了块,需要预先分配所以存储空间,不能动态的增加(不能参考数据库表空间文件动态增长?)。这个太占用磁盘。
FastDFS没有块的概念,不存在一开始空间占用高问题。 - fileId
FastDFS 的fileID:组名(可选)+磁盘+二级目录+文件名
如xxx.com/M00/00/00/aIOW-1RWQyuAfSjjAAvWFkcZHjA219_big.jpg
TFS的fileID: v1/tfs/文件名。
如xxx.com/v1/tfs/T11yDTByJT1RCvBVdK.PNG
TFS的更简洁。
总结:
从功能讲TFS功能更多,角色更多,也更复杂,但在体验上还有不少进步空间。FastDFS则是轻巧。
另外从开源推广及支持、社区活跃度方面,之前TFS不太活跃,最近好转不少,有研发人员(如HUST张友东) 支持解答遇到的一些问题,开源远远不仅仅是开放源码,要投入很大精力去与用户及社区交互。
=========================================================
根据最近调查再补充几点:
1.备份
fastDFS: group内备份,group的容量大小,以最小的ds为准,所以组内加storage,不会增加 group的容量,只会多一份备份
tfs:Block存储多份,主辅集群备份,主写,辅可读(可跨IDC);
2.动态扩容
fastDFS:增加group;增加后新增storeage的剩余空间一定会多,不会自动均衡;
tfs:新增data server后,在负载轻的时候,会自动复制和均衡存储空间;
3.fastDFS使用技巧
1.因为扩容是依赖增加group来扩容的,所以group的设计很重要;
比如想用groupA存头像、groupB存储证件,会遇到无法增加容量问题;解决这个问题可能需要通过自己hash,制定的特定的group,或者部署多个trackered集群来解决
2.下载时返回可读文件名.因为fastDFS不会保持原始名字,最好应用做好原始名字和fid的保存;
3.主从文件使用(图片缩略图)
http://www.ttlsa.com/fastdfs/fastdfs-experience-sharing/
4.metadata
FastDFS的metadata以文件方式进行存储,它用来存储文件的相关属性,如图片宽度、高度等 等。
如果有meta data,metadata文件名为实体文件名后面加上-m。
4.监控后台
fastDFS有2个:
1.fastdfs-zyc
https://fastdfs-zyc.googlecode.com/files/fastdfs-zyc-v1.1%2Cfastdfs4.0%E4%BB%A5%E4%B8%8A%E7%89%88%E6%9C%AC%E4%BD%BF%E7%94%A8.zip
2.viva-fdfs
fastdfs 环境搭建使用及最佳实践
http://ixirong.com/2015/03/16/something-about-fastdfs/
fastdfs调研
http://wlwang41.github.io/content/ops/fastdfs%E8%B0%83%E7%A0%94.html