第2-1-1章 FastDFS分布式文件服务背景及系统架构介绍( 二 )

  • 存储服务器上可以保存文件属性(meta-data)V2.0网络通信采用libevent,支持大并发访问,整体性能更好
  • 开源地址: https://github.com/happyfish100/fastdfs
    2 系统架构FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client) 。
    • tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用 。在内存中记录集群中所有存储组和存储服务器的状态信息 , 是客户端和数据服务器交互的枢纽 。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少 。
      Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息 , 建立group==>[storage server list]的映射表 。
      Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的 , 本身不需要持久化任何数据 , 这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息 , 生成元数据信息来提供读写服务 。
    • storage server:存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上 。Storage server直接利用OS的文件系统调用管理文件 。
      Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准 , 所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费 。
      以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很长 。
      group内每个storage的存储依赖于本地文件系统 , storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10 , 则可将这10个目录都配置为storage的数据存储目录 。
      storage接受到写文件请求时,会根据配置好的规则(后面会介绍),选择其中一个存储目录来存储文件 。为了避免单个目录下的文件数太多,在storage第一次启动时 , 会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件 , 新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中 。
    • client:客户端,作为业务请求的发起方 , 通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互 。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等 , 以客户端库的方式提供给用户使用 。
    • group :组, 也可称为卷 。同组内服务器上的文件是完全相同的,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行。
    • meta data :文件相关属性,键值对( Key Value Pair) 方式,如:width=1024,heigth=768。

    第2-1-1章 FastDFS分布式文件服务背景及系统架构介绍

    文章插图
    2.1 Tracker集群FastDFS集群中的Tracker server可以有多台 , Trackerserver之间是相互平等关系同时提供服务,Trackerserver不存在单点故障 。客户端请求Trackerserver采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker 。
    2.2 Storage集群为了支持大容量 , 存储节点(服务器)采用了分卷(或分组)的组织方式 。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量 。一个卷由一台或多台存储服务器组成 , 卷内的Storage server之间是平等关系,不同卷的Storageserver之间不会相互通信 , 同卷内的Storageserver之间会相互连接进行文件同步 , 从而保证同组内每个storage上的文件完全一致的 。一个卷的存储容量为该组内存储服务器容量最小的那个 , 由此可见组内存储服务器的软硬件配置最好是一致的 。卷中的多台存储服务器起到了冗余备份和负载均衡的作用

    推荐阅读