FastDFS:02---fastdfs架构分析(tracker、storage、client)
分类:
文章
•
2025-03-06 20:40:04
一、总体架构
-
我们以FastDFS上传文件功能为例,了解其基本架构:
- ①首先客户端 client 发起对 FastDFS 的文件传输动作,是通过连接到某一台 Tracker Server 的指定端口来实现的
- ②Tracker Server 根据目前已掌握的信息,来决定选择哪一台 Storage Server ,然后将这个 Storage Server 的地址等信息返回给 client;
- ③然后 client 再通过这些信息连接到这台 Storage Server,将要上传的文件传 送到给 Storage Server 上

二、详细剖析
-
FastDFS 服务有三个角色:
- 客户端(client)
- 跟踪服务器(tracker server)
- 存储服务器(storage server)
client
- 访问FastDFS的客户端,没什么好介绍的
-
备注:client第一次先访问tracker获取对应数据的storage,之后便于storage之间进行通信
tracker server(跟踪服务器)
- 主要做调度工作,起到均衡的作用,负责管理所有的storage server和 group
-
每个storage在启动后会连接Tracker,告知自己所属group等信息,并保持周期性心跳, Tracker根据storage心跳信息,建立 group--->[storage server list]的映射表
- tracker管理的元数据很少,会直接存放在内存;tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,tracker之间是对等关系,因此扩展tracker服务非常容易,之间增加tracker服务器即可,所有 tracker 都接受 stroage 心跳信息,生成元数据信息来提供读写服务
-
相比于普通MS( Master-Slave) 模式的优势:
- 普通的Master-Slave架构只有一台Master,可能会出现单点故障问题,而且client与master之间可能会出现性能瓶颈
- 但FastDFS架构中可以提供多台tracker server,多台Tracker Server之间保证了Tracker的分布式,Tracker Server之间是对等的,防止了单点故障。最终数据是与一个可用的Storage Server 进行传输的
- 因此tracker可以在访问上起到“负载均衡”的作用
storage server(存储服务器)
- 主要提供容量和备份服务
- 以group为单位,每个 group 内可以包含多台 storage server
-
相互备份:
- 每个组内的storage server数据互为备份,存储容量空间以group内容量最小的 storage 为准
- 假设如果Group1有 Storage1、Storage2、Storage3,其容量分别是 100GB、 200GB、300GB,那么 Group1 的存储能力是 100GB,而不是 300GB,这就是互相备份的意思
-
进一步说,整个Group的存储能力由该组中该储能力最小的Storage决定;建议同一group内的storage server配置相同
-
以group存储的优缺点:
-
优点:以group为单位组织存储能够方便的进行应用隔离、负载均衡和副本数定制
-
缺点:group的容量受单机存储容量的限制,同时 group内机器坏掉,数据恢复只能依赖group内其他机器重新同步(坏盘替换,重新挂载重启 fdfs_storaged 即可)

三、storage存储解析
-
client对文件进行操作时,多个group之间的存储方式有3种策略:
- round robin(对所有的组进行轮询使用)
- load balance(选择最大剩余空间的组上传文件)
- specify group(指定group上传)
-
group中storage存储依赖本地文件系统,storage可配置多个数据存储目录,磁盘不做raid, 直接分别挂载到多个目录,将这些目录配置为storage的数据目录即可
目录结构
- storage接受写请求时,会根据配置好的规则,选择其中一个存储目录来存储文件
-
为避免单个目录下的文件过多,每个storage第一次启动时,会创建256个目录(编号为0~255),然后每个目录下再创建256个目录(编号为0~255),因此总共有65536个目录(256*256)
-
备注:因为第一次启动storage时需要创建65536个目录,因此在启动storage时会等到几十秒才可以真正使用
-
新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中
四、总结
-
简单总结一下,FastDFS 的特点包括:
- 高可靠性:无单点故障
- 高吞吐量:只要 Group 足够多,数据流量是足够分散的