免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2764 | 回复: 0

FastDFS结合FastDHT实现文件去重存储 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之同曦
日期:2017-01-17 18:19:30
发表于 2017-02-08 11:32 |显示全部楼层
存储文件时,为了节省存储空间,需要实现文件去重,即同一份文件只在服务器上存储一份。一种实现是文件上传后先落到应用服务器上,计算MD5并存储到数据库中,然后决定是否上传存储服务器。这样做的缺点是应用服务器端需要做并发控制,实现相对来说比较复杂。
FastDFS结合FastDHT实现文件去重存储1.png
FastDFS本身支持文件的排重处理机制,但需要FastDHT作为文件hash的索引存储。FastDHT是FastDFS同一个作者的开源key-value数据库。其排重原理为:
FastDFS的storage server每次上传均计算文件的hash值,然后从FastDHT服务器上进行查找比对,如果没有返回,则写入hash,并将文件保存;如果有返回,则建立一个新的文件链接(软链),不保存文件。
实验环境搭建:
1、利用vmware player新建虚拟机,安装centos系统。
我用的是东北大学的一个镜像http://mirror.neu.edu.cn/centos/6.8/isos/i386/,取得文件为CentOS-6.8-i386-LiveCD.iso
2、安装fastdfs
网上安装资料挺多,推荐参考https://my.oschina.net/harlanblog/blog/466487?fromerr=cqe6bTu2,我们主要想测试FASTDHT的功能,因此完成到第5步即可。
3、安装fastdht
搭建过程遇到的问题:
1、安装完fastdht后,启动fastdfs的storage报错fdfs_storaged: symbol lookup error: fdfs_storaged: undefined symbol: g_current_time
解决方法:重新安装libfastcommon(参考上面安装fastdfs的第二步)
2、测试程序在虚拟机的宿主机上,也就是需要宿主机的程序访问虚拟机的fastdfs服务,搭建环境后发现虚拟机上可以上网,能ping通宿主机。
但是宿主机的程序访问虚拟机的fastdfs服务时报错connection time out
解决方法:安装telnet服务,关闭防火墙。此时启动fastdfs服务,假设虚拟机IP为192.168.0.1,fastdfs服务端口为22122,则在宿主机(windows系统)的命令窗口
telnet 192.168.0.1 22122 连接成功则说明可以正常访问fastdfs服务了。
测试:
1、同一文件分两次先后上传(串行)
FastDFS结合FastDHT实现文件去重存储2.png
2、同一文件同时上传(并行,三个线程同一文件同时上传)
FastDFS结合FastDHT实现文件去重存储3.png
FastDFS结合FastDHT实现文件去重存储4.png

结论:

经过测试集成FastDHT后,FastDFS可以实现文件去重,这样在fastdfs的客户端就不需要做额外的并发控制,可以减少很大一部分工作量。但是当前FastDFS去重功能是跟FastDHT绑定起来的,暂时不支持其他的K-V库,而且FastDHT网上的资料较少,如果hold不住它的源码(c语言实现),用起来还是存在很大风险的。

更多FastDFS内容参考:FastDFS 分布式文件系统集群与应用

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP