上周自己无意间接触到了fastdfs,看了几篇技术文档后,发现这个东西在电商的环境下挺实用的,而且轻量,所以私下偷偷的搭建了其服务器环境
首先介绍一下什么是fastdfs:
fastdfs是一款开源的分布式文件存储框架,由C语言开发完成,其主要的目的就是存储,管理,以及索引,平台日常大量的但并不是特别重要的的文件,官方的建议是:(文件大小建议范围:4KB < file_size <500MB)。
fastdfs的开发者:(余庆) 淘宝架构师 —-图片来源互联网媒体(一切以实物为准)
举个例子:如果你的平台是一个电商网站或者大量需要上传展示图片的站点,那么使用fastdfs作为你电商平台商品展示图片的存储的框架会是一个不错的选择,一、它方便维护 二、它可以动态扩展并且支持分布式以及负载均衡
与大多数博客一样,我也使用了一下几个最经典的关于fastdfs的介绍图片(图片来源于互联网)
如上图看的出来Client就是我日常使用的浏览器,或者APP对静态资源的引用等等,从中也不难理解,其实Fastdfs集群是由:1、Tracker 2、Storage 组成
那么这两个是什么呢?
Tracker:Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。
Storager:Storager server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。
简单解释的话:其实就是,用户访问图片的时候访问Tracker,然后Tracker告诉用户你要的图片存在哪个Storage下面,然后获取,上传的时候也一样由Tracker告诉你,你的图片保持在哪?如下图
看完结构后是不是觉得这个框架很轻量及?的确如此,而且对于访问图片的时候还能使用Nginx提供的负载均衡,并且通过配置Nginx的conf进行静态资源读取就可以直接访问到目标图片
Nginx配置样例:
user nobody;
worker_processes auto;
events {
worker_connections 1024;
}
http {
upstream myproject{
server xx.xx.xx.xx.8081;
server xx.xx.xx.xx:8081;
}
server {
listen 80;
server_name xx.xx.xx.xx ;
location /group1/M00/{
root /home/yuqing/fastdfs/data;
}
}
server {
listen 86;
server_name xx.xx.xx.xx;
location /{
proxy_pass http://myproject/Friend;
}
}
}
这里不只是引入fastdfs的静态资源访问,同时对tomcat进行了负载均衡(由于我是单机单服务搭建的,所以会比较麻烦)
当然Fastdfs不只可以保存图片,同时也可以保持短视频,保存其它文件等等,不过图片一个是对其最经典的使用之一
图片看的出:路径是按照组,硬盘,逻辑目录,和文件名产生的,其中逻辑目录和文件名是由平台算法提供的
下面是在服务器端文件目录的展示:
从图片中不难看出,目录一共分为两层,每层的命名方式都是十六进制的顺序,目录一个共分一级和二级,其中二级目录底下存放的就是你的目标文件
由于搭建的因素太多,我只是简单介绍每个环境包的作用和意义,具体搭建需要每个人自己具体实现为准,我使用的是Centos 7.3的服务器环境,基于腾讯云
(如果想了解详细的建议搭建看他人的专门针对搭建的教程,这里这是启示文章)
环境主要涉及以下几个:
1、fastdfs 框架自身代码
2、fastdfs-nginx-module
3、libfastcommon
4、nginx
环境介绍:
fastdfs:源码目前是开源在GitHub上面,由C语言开发,目前比较流行的有几个版本:5.05 5.08 5.12,大家可以去百度源码,10分钟内绝对能找到
libfastcommon:这个是比较重要的东西,由于fastdfs是C语言开发,我们在github上面下载的是源码,使用我们将会使用linux 去make进行编译,既然如此我们的linux的环境必须具备C的编译能力,而且最主要的一点是需要安装完整的编译内库(具体每个linux的方式不一样建议百度),这里的libfastcommon提供的就是用来编译fastdfs的内库,如果没有安装完全在编译fastdfs的时候会报出头文件不存在的错误
fastdfs-nginx-module :这个是用来整合nginx的nginx模块,它将会在编译nginx的时候引入,但是老实说,这个东西没有也可以,只是需要你在配置nginx.conf多配置些东西
nginx:这个我就不需要解释太多了,用来提供负载均衡和静态资源访问的服务器
好后面就是搭建的问题:老实说因为搭建过程太过于细节,而且繁琐,我怕我的文章写不到最清晰从而导致误导大家,所以建议详细的搭建过程大家去参考那些以及写的很完美的大牛博客吧,欢迎大家与我讨论有关fastdfs的内容,如果文章有错误也请大家指出来