编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

图片服务器:回忆一下那些年用过的FastDFS,还有多少人记得

wxchong 2024-08-19 23:54:12 开源技术 5 ℃ 0 评论

由于项目中用到很多图片,不过现在图片还是由type=file的按钮上传到服务器上,由nginx做静态服务器来访问这些图片,没有用到图片服务器来上传下载,这样做的缺点就是,服务部署在哪里,图片就上传到哪台服务器,没有一个集中的图片服务器,最进在考虑是否项目中引入一个图片服务来供上传下载,说到这里,思绪就回到了N年前开发用到的FastDFS,当时用的不亦说乎,今天重新搭建一下,回忆一下那个美好的屌丝生活!

附上大神写的FastDFS的Github:

FastDFS简要介绍:

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

下图就是他的架构图:

1、Tracker cluster中各个tracker server相互独立,不进行相互通信。

2、Storage cluster中各个storage组相互独立,不进行相互通信,也就是说各个组之间保存的数据是不相同的。但是各个组中的storage server之间是属于互相备份的关系,也就是说storage server之间保存相同的数据。

3、每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息。

文件上传的流程图如下:

请求上传说明:

1、Client通过Tracker server将文件上传到Storage server。

2、Tracker server向Client返回一台可用的Storage server的IP地址和端口号。

3、Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件上传。

4、上传完成,Storage server返回Client一个文件ID,文件上传结束。

上传完成后,会返回下面的文件索引信息:

文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

~组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。

~虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。

~数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。

~文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

然后就是文件下载的过程如下:

请求下载说明:

1、Client通过Tracker server下载指定Storage组中某个Storage server上的某个文件(文件名包括Storage组名称)。

2、Tracker server向Client返回一台可用的Storage server的IP地址和端口号。

3、Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件下载。

FastDFS提供简单易用的上传下载,是不是感觉手痒痒,那就动手搭建一下吧!

由于我身穷但是志坚,没钱买服务器,我就用虚拟机来搭建一下,一个storage的服务器,一个tracker的服务器。

1、创建一个目录,来存放FastDFS相关依赖:

[zjl@zheng ~]# mkdir -p /home/zheng/tools
[zjl@zheng ~]# cd /home/zheng/tools/

2、下载并安装FastDFS依赖包libfastcommon

[zjl@zheng tools]# wget https://codeload.github.com/happyfish100/libfastcommon/zip/master
[zjl@zheng tools]# unzip master
[zjl@zheng tools]# cd libfastcommon-master/
[zjl@zheng libfastcommon-master]# ls
HISTORY INSTALL libfastcommon.spec make.sh php-fastcommon README src
[zjl@zheng libfastcommon-master]# ./make.sh
[zjl@zheng libfastcommon-master]# ./make.sh install

3、下载并安装FastDFS

[zjl@zheng tools]# wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Server%20Source%20Code/FastDFS%20Server%20with%20PHP%20Extension%20Source%20Code%20V5.08/FastDFS_v5.08.tar.gz
[zjl@zheng tools]# tar xf FastDFS_v5.08.tar.gz
[zjl@zheng tools]# cd FastDFS
[zjl@zheng FastDFS]# ./make.sh && ./make.sh install

4、目录如下:

5、服务脚本和样例配置文件如下:

6、命令行工具如下:

7、配置跟踪服务器(tracker server),虽然FastDFS区分tracker和storage服务器,但是安装的软件及步骤均相同,只是不同的配置文件而已,以上安装适用tracker server和storage server,把样例文件复制出来一份:

8、编辑tracker server配置文件tracker.conf,修改内容如下:

9、编辑client端的配置文件client.conf,修改内容如下:

10、测试启动tracker server:

11、配置存储服务器(storage server),和配置tracker差不多,只是配置文件中的配置不一样,就是storage.conf的配置:

12、测试启动storage server:

到现在为止,FastDFS的跟踪和存储服务器我们已经搭建完毕了,我们可以通过命令行工具来测试一下:

[zjl@zheng ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/zheng/imgs/pythonNB.jpg
group1/M00/00/00/uHYT6VcaP0aARXXvAAHrUgJEviQ626.jpg

返回文件ID即说明文件已经上传成功!对于这些图片,通常当做静态资源来处理,也就是要配置诸如Nginx这样的静态资源服务器来实现浏览器访问,这个配置就不多说了,FastDFS和Nginx的配合也是非常完美的!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表