fastdfs
功能
FastDFS主要的功能包括:
- 文件存储,
- 同步和访问,
- 设计基于高可用和负载均衡。
FastDFS非常适用于基于文件服务的站点
组成
FastDFS由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size < 500MB) 为载体的在线服务,例如图片分享和视频分享网站
- 跟踪服务器
tracker提供负载均衡,集群中的每一个tracker都要保存storage集群的所有信息,供client访问并上传文件- 负载均衡:
- 可以看见不同的
group中的对应空间有多少,根据空间大小来选择在哪个group中上传,选择到指定group后就会确定一个storage server给客户端涉及到两个部分的选择group的选择
round robin,所有的group间轮询specified group,指定某一个确定的groupload balance,选择剩余空间最大的
storage server的选择
round robin,在指定group内的所有storage间轮询First server ordered by ip,按ip排序First server ordered by priority,按优先级排序
- 存储服务器
storage可以是集群,所有的group都要上报到tracker集群的每一个tracker中storage集群
- 同一个
group内的storage存储的数据是一样的
- 客户端
- 用于上传文件与下载文件,
fdfs提供了对应源码实现 client访问tracker目的是为了获取哪一个storage可以上传文件
上传文件流程:
client访问tracker,tracker通过负载均衡指定一个group,然后再在这个group中指定一个storage server返回给client,client向这个storage server发送写文件请求,storage server会为文件分配一个数据存储目录
storage server收到client发送的写请求后进行的处理
- 生成
fileid:由ip,创建时间,文件大小,文件crc32和一个随机数拼接而成,然后进行base64编码,转化为了可打印的字符串 - 选择两级目录
- 生成文件名:格式
组名/磁盘/目录/fileid.txt
fastdfs上传一个文件指令
> ls hello.txt > fdfs_upload_file /etc/fdfs/client.conf hello.txt /group1/M00/00/00/wKg4aWRT1ZeAM66YAAAAKYfybsk605.txt
- 解析返回的文件名
- 存储在哪个
gourp:group1 - 在哪个磁盘:
M00 - 在哪个目录:
00/00
ClientTrackerServerStorage定时向tracker上传状态信息上传连接请求获取可用storage节点返回可用storage节点返回可用存储节点(storage的ip和端口)上传文件到可用存储节点(file content和metadata)生成file_id将上传内容写入磁盘返回file_if(路径信息和文件名)存储文件信息ClientTrackerServerStorage
下载文件流程:
client访问tracker,tracker会告诉client从group中的哪一个storage中下载文件fastdfs下载一个文件指令
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKg4aWRTdjKAKYp2AAAHeD18SIc60.conf
ClientTrackerServerStorage定时向tracker上传状态信息下载连接请求获取可用storage节点(检验同步状态)返回可用storage节点返回节点(storage的ip和端口)信息根据组名/目录/文件名查找文件查找文件返回file_contentClientTrackerServerStorage
如何支持高可用
高可用指系统能够在预期的时间内一直处于可用状态
tracker是集群- 同一组的
storage的内容是相同的(一个group建议3个storage) - 强一致性,若一致性
- 如果是强一致性,同一组中上传完毕后需要等待其他
storage同步完毕
- 数据更安全可靠,等待时间长
- 如果是弱一致性,当前的
storage存储完毕就返回
- 数据不太可靠,等待时间短