基于FastDFS实现类OSS以及扩展

首先,FastDFS肯定没有OSS功能强大以及齐全,碍于成本问题,只能寻找一个类似OSS功能的替代品,所以需要考虑到以后的一些问题。

一、未来考虑

1.FastDFS能否实现OSS的部分功能

基本能实现,以下是FastDFS,hdfs,OSS的区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FastDFS:
是一个开源的分布式文件系统,它对文件进行管理
功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题
特别适合以文件为载体的在线服务, 如相册网站,视频网站等等

HDFS:
默认的最基本的存储单位是64M的数据块。
和普通的块文件系统相同的是,HDFS中的文件是被分成64M一块的数据块存储的。
不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,会占用整个存储块的空间。

OSS:
阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务;
可以使用阿里云提供的 API、SDK 接口或者 OSS 迁移工具轻松地将海量数据移入或移出阿里云 OSS。
数据存储到阿里云 OSS 以后,您可以选择标准类型(Standard)的阿里云 OSS 服务作为移动应用、大型网站、图片分享或热点音视频的主要存储方式
也可以选择成本更低、存储期限更长的低频访问类型(Infrequent Access)和归档类型(Archive)的阿里云 OSS 服务作为不经常访问数据的备份和归档。

HDFS和FastDFS的上传,下载效率对比测试结果:
https://blog.csdn.net/a519781181/article/details/79125379/

使用OSS有什么优势,又有什么缺点,什么情况下我们会使用OSS来代替HDFS,到底使用什么存储方案:
https://yq.aliyun.com/articles/371984

oss上传方式,以及对应的大小限制:
http://www.360doc.com/content/18/0823/22/49604565_780716594.shtml


2.FastDFS文件上传后文件名如何保存

上传文件的流程

1
2
3
4
5
6
7
客户端上传文件后存储服务器将文件ID返回给客户端,次文件ID用于以后访问改文件的索引信息。文件索引信息包括:
组名,虚拟磁盘路径,数据两级目录,文件名。
比如:group/M00/02/44/wKqDrE348waaaaaaaaGkEIYJK42378.sh
组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

上传步骤

1
2
3
4
5
6
7
8
加载配置文件,配置文件中的内容就是tracker服务的地址。
配置文件内容:tracker_server=192.168.25.121:22122
创建一个TrackerClient对象。直接new一个。
使用TrackerClient对象创建连接,获得一个TrackerServer对象。
创建一个StorageServer的引用,值为null
创建一个StorageClient对象,需要两个参数TrackerServer对象、StorageServer的引用
使用StorageClient对象上传图片。
返回数组。包含组名和图片的路径。

3.Hadoop生态体系能否像使用OSS一样使用FastDFS

可能有点悬,原因如下

1
2
3
oss是阿里收费的服务,而且是专门提供云对象的服务,设计之初就是提供给hadoop生态体系的;而fastdfs是开源的分布式文件系统;fastdfs存储方式等本身就跟hdfs有所区别;

fastDFS和oss以个体上面来看,都API、SDK对其存储的文件进行使用,看业务情况,如果需要牵涉很多大数据组件的,建议使用oss,毕竟花了钱,对应的服务也很方便;如果只是简单存储,访问,涉及到的其他数据分析比较少,就可以使用fastDFS,毕竟是个开源项目

4.FastDFS数据能否迁移到OSS上

如何迁移

1
2
找一台中转服务器,最好是带宽高的阿里云ECS,然后将fastDFS映射到一个目录,OSS也可以挂载一个目录,接下来通过cp命令进行拷贝即可
如果这两个都用的不同的挂载服务器,也可以通过RSync工具来进行目录同步,支持端点续传多线程