文件服务器图片索引,利用FastDFS搭建图片服务器(一)

上回我们说到,可以通过程序将图片存放到某个盘符下,然后通过配置Nginx,达到高并发访问的目的,但现在我提一个问题:

如果你把图片存入到某个盘符,这个盘满了怎么办?

怎么可能满呢?好几百G呢?在互联网项目中好几百G的图片算个啥?还不是过段时间就满的事儿?

咱不说访问,就说说存储:满了怎么办?加盘?再满了呢?你加了盘怎么访问之前的数据?

所以:没招了,那今天我们提供一种解决方案:通过FastDFS(分布式文件存储系统),听名字就老高大上了。

首先它好在哪儿?---分布式

分布式就意味着:节点是可以随意添加和减少的,是可以有容错容灾功能滴(比如盘符坏了几个,某个机房着火了,机器没了),天灾人祸的,谁也说不好。

那什么是文件系统呢?你的电脑就用了文件系统,不信你看!

算了,图片粘了好几遍都上传不了,就不让你们看了,你可以打开我的电脑,然后右键某个盘符,你看是不是有个文件系统:NTFS

一、什么是FastDFSFastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

二、FastDFS架构

bfef3bae22d2

这个图大家一看,貌似也不明白,其实我们每个访问的客户端都是Client,后台FastDFS由两部分组成,第一部分叫做Tracker,另一部分叫做Storager,根据名字基本也明白他们的作用了,举个栗子!

bfef3bae22d2

你去一个古老的图书馆借书,这个图书馆有很多的藏书,都是几层楼那么高的那种。

bfef3bae22d2

那你要找一本你想要的书估计的猴年马月了,怎么办呢?图书馆一般的做法是:

先去查找你要的书属于哪个分类,大分类下有小分类,再分,再分。。。。。最后就可以找到你要的那本书了,像这么一个查询系统,就是Tracker,然后让Tracker去找你要的内容。

图中是一个Tracker集群,一旦有很多人过来还书或者借书,需要使用很多Tracker来完成。

Storager就好比是图中的一个个书架,书太多了就再追加一组,每一组都有一主一备(主备里面的内容是相同的,一台挂了,另一台赶紧顶上),不同的组之间内容是不同的,如果相同那还要那么多机器作甚啊。

知道这些以后就可以看看书面的内容了,本来不想粘贴的:FastDFS架构包括Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。

Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。

Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。

三、文件上传流程

bfef3bae22d2

客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

group1/M00/00/00/wKgZgVl2Lx6AJGGNAAHY4S_5XfM096_big.jpg

组名:

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

虚拟磁盘路径:

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

数据两级目录:

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

文件名:

与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。其实说白一下:group1/M00/00/00/  这些不就是我们图书馆的大小分类吗?

wKgZgVl2Lx6AJGGNAAHY4S_5XfM096_big.jpg 不就是我们的上传的文件名字吗?

有那么多分组是考虑到数据多了好区分,好管理,图片名字搞那么长无非是不想让名字有重复。

老师?我们上传一个图片还需要做这么多工作?No!

这些内容都是FastDFS自动生成的,无需我们管理,文件上传成功后,会返回一个链接,该链接如下:

bfef3bae22d2

四、文件下载流程

bfef3bae22d2

tracker根据请求的文件路径即文件ID来快速定义文件。

group1/M00/00/00/wKgZgVl2Lx6AJGGNAAHY4S_5XfM096_big.jpg

1.通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。

2.存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。

理论部分到此为止,本来是要讲如何如何搭建的,啰嗦这就到这个点儿了,如果你发现自己被骗了,请给我点个赞,这样我就知道了,想看如何搭建的朋友,请看下一篇文章,保证不罗嗦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值