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等.
上传文件
- client 向Tracker发起上传请求
- Tracker 查询可用的storage,并返回storage的ip和端口
- client根据返回的storage上传文件.
- storage生成file_id,并将文件写入磁盘.
- storage返回file_id(路径信息和文件名)给client.
- client存储文件信息到数据库等
####选择tracker
当集群中有多个tracker,客户端可任意选择一个.
####选择group
tracker接收上传请求,会分配一个group,group支持如下规则:
- Round robin,所有的group间轮询
- Specified group,指定某一个确定的group
- Load balance,剩余存储空间多多group优先
####选择storage
选择group后,tracker会在group内选择一个storage,支持如下规则
- Round robin,在group内的所有storage间轮询
- First server ordered by ip,按ip排序
- First server ordered by priority,按优先级排序(优先级在storage上配置)
生成的文件名
当文件存储到某个子目录后,会为文件生成一个文件名,文件名有group,存储目录,两级子目录,fileid,文件后缀拼接而成
1 | [组名] [磁盘] [目录] [文件名] |
###download file
客户端上传完成后,会到达file_id信息.
- client请求Tracke,tracke返回storage的ip和端口
- client请求根据返回的storage请求file_id.
- storage返回file_content
####HTTP访问支持
FastDFS的tracker和storage都内置了http协议的支持,客户端可以通过http协议来下载文件,tracker在接收到请求 时,通过http的redirect机制将请求重定向至文件所在的storage上;新版本已经移除了内置的HTTP协议,FastDFS提供了通过apache或nginx扩展模块下载文件的支持.
fastDFS架构