目录
什么是FastDfs【Distributed File System】?
首先你要知道文件上传的三要素,不满足三要素就无法进行文件上传。
1.表单提交方式:post (get方式提交有大小限制,post没有)
2.表单的enctype属性:必须设置为multipart/form-data【复杂表单项】.
3.表单必须有文件上传项:file【type=file】
Fastdfs是用C语言编写的一款轻量级开源的分布式文件系统。它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等
简单理解:就是可以用来对文件进行存储(上传和下载)的分布式文件系统
FastDFS服务端有两个角色:跟踪器(trackerserver)和存储节点(storageserver)。
跟踪器作用是做调度工作,在访问上起负载均衡的作用【用来分配存储到那个storage服务器中】。
存储节点作用是做文件存储,客户端上传的文件最终存储在storage服务器上。
访问效率高,支持高并发【就是多个线程可以同时访问】
支持集群【主服务器上的数据可以同步所有从服务器,并且所有的从服务器可以关联其他的主服务器】--避免一个服务器崩了,全崩了
1 storage服务器会定时的向tracker传递自己的状态信息(心跳机制-告诉自己是可以使用的)
2 当客户端client发送上传连接请求时,
3 tracker就会进行调度一个可用的storage
4 并且将storage的ip地址和端口号信息返回给客户端client
5 客户端根据端口号和ip地址上传内容到storage中进行存储
6 storage接收到上传文件生成file_id(上传文件的路径和文件名)
7 将上传的内容写入磁盘,
8 并返回file_id(上传文件的路径和文件名)给客户端client
1 storage服务器会定时的向tracker传递自己的状态信息(心跳机制-告诉自己是可以使用的)
2 当客户端client发送下载连接请求时,
3 tracker就会进行调度一个可用的storage
4 客户端client将文件的file_id(组名,路径,文件名)发送给storage,storage进行查找
8 将查找到的文件内容返回给客户端client
1因为访问效率高,支持高并发【多个用户同时进行访问。】
2支持集群【多个服务器运行相同的业务。】
部署问题:以前部署:将所有的服务部署到一个服务器中,会导致服务器压力过大,挂掉。
分布式方法改进:还有将每个服务都分别部署到一个服务器上。但是也不支持高并发,不能解决单点故障【就是一台服务器崩了,无法进行挽救,存储的数据就没有了。】
storage返回的只有卷名和文件名,如果想要查看图片就需要加上原本服务器的前缀
http://127.0.0.1/group1/M00/00/00/wKgZhVkMP4KAZEy-AAA-tCf93Fo973.jpg
客户端上传文件后存储服务器将文件 ID 返回给客户端,此文件 ID 用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。如:
组名/卷:文件上传后所在的Storage组名称,在文件上传成功后有Storage服务器返回,需要客户端自行保存
虚拟磁盘路径:Storage配置的虚拟路径,与磁盘选项 store_path*对应。如果配置了store_path0 则是 M00,如果配置了 store_path1 则是 M01,以此类推
数据两级目录:Storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息