FastDFS:02---fastdfs架构分析(tracker、storage、client)

一、总体架构

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

FastDFS:02---fastdfs架构分析(tracker、storage、client)

二、详细剖析

  • 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 即可)

FastDFS:02---fastdfs架构分析(tracker、storage、client)

三、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 足够多,数据流量是足够分散的