fastDFS架构

####FastDFS是什么

FastDFS是开源的轻量级分布式文件系统,解决海量存储的问题,适合中小文件存储.由三部分组成

  • tracker server (跟踪服务器)
  • storage server (存储服务器)
  • client (客户端)

####storage server

storage 以组为单位组织,一个group内可以包含多台storage机器,数据互为备份.

group内每台storage依赖本地文件服务器.storage可配置多个数据存储目录.

storgae写文件时会根据配置好的规则选择一个目录来存储.为避免单个目录文件数太多.storage第一次启动时,会创建2级子目录.每级256个共65536个目录.

新添加文件会以hash的方式被路由到一个子目录,然后文件数据直接作为本地文件存储到改目录.

####Tracker server

Trancker是负责管理所有的storage 和group,每个storage在启动后会连接tracker,将自己所属的group等信息告知tracker.并保持心跳.

tracker根据storage心跳建立group->storage list的映射表.

tracker需要管理的元信息很少,全部都放在内存中.

tracker元信息都是由storage汇报的信息生产,所以tracker非常容易扩展,直接增加tracker机器即可.集群中的tracker都是对等的,所有的tracker都接受stroage心跳信息.

###client

FastDFS提供基本的文件访问接口,以客户端库的方式提供.比如php ,java,.net等.

上传文件

  1. client 向Tracker发起上传请求
  2. Tracker 查询可用的storage,并返回storage的ip和端口
  3. client根据返回的storage上传文件.
  4. storage生成file_id,并将文件写入磁盘.
  5. storage返回file_id(路径信息和文件名)给client.
  6. client存储文件信息到数据库等

####选择tracker
当集群中有多个tracker,客户端可任意选择一个.

####选择group

tracker接收上传请求,会分配一个group,group支持如下规则:

  1. Round robin,所有的group间轮询
  2. Specified group,指定某一个确定的group
  3. Load balance,剩余存储空间多多group优先

####选择storage

选择group后,tracker会在group内选择一个storage,支持如下规则

  1. Round robin,在group内的所有storage间轮询
  2. First server ordered by ip,按ip排序
  3. First server ordered by priority,按优先级排序(优先级在storage上配置)

生成的文件名

当文件存储到某个子目录后,会为文件生成一个文件名,文件名有group,存储目录,两级子目录,fileid,文件后缀拼接而成

1
2
3
4
[组名]  [磁盘] [目录]    [文件名]
group1/ M00 /00/0d/ wKgKC1SQBbeABu7vAAAAEGqzRP4043.txt


###download file

客户端上传完成后,会到达file_id信息.

  1. client请求Tracke,tracke返回storage的ip和端口
  2. client请求根据返回的storage请求file_id.
  3. storage返回file_content

####HTTP访问支持

FastDFS的tracker和storage都内置了http协议的支持,客户端可以通过http协议来下载文件,tracker在接收到请求 时,通过http的redirect机制将请求重定向至文件所在的storage上;新版本已经移除了内置的HTTP协议,FastDFS提供了通过apache或nginx扩展模块下载文件的支持.

作者

张巍

发布于

2014-12-26

更新于

2014-12-26

许可协议

评论