happy_fish100 发表于 2022-01-20 16:33

高性能大容量分布式目录服务FastDIR简介

    作为通用分布式文件系统FastCFS核心组件之一,FastDIR是一款高性能、大容量分布式目录服务,除了支持文件系统基本特性外,还实现了如下特性:
   * 支持全部类型:如socket、字符设备、符号链接等,还支持硬链接;
   * 文件锁:完全支持POSIX文件锁,支持按范围加/解锁;
   * 文件扩展属性(x-attribute):V2.0开始支持,用于保存存储池相关属性。


    FastDIR支持命名空间,一个命名空间对应一套目录结构,多个命名空间的目录结构相互独立,可以通过命名空间隔离不同应用。FastCFS V2.0开始支持存储池,一个存储池对应FastDIR的一个命名空间。


    如果采用传统的加锁方式实现目录结构的修改和访问,因锁的粒度较大,会存在性能瓶颈。FastDIR引入了数据线程,一个数据线程管理多个命名空间(目录结构),数据线程以无锁方式存取其管辖的目录结构。为了充分发挥多核CPU的能力,数据线程可以配置多个。FastDIR按命名空间路由到数据线程,一个命名空间下的目录结构只由一个数据线程处理,因此不需要锁。


    FastDIR在内存中使用跳表(skiplist)存储目录结构,简单高效。跳表由基础库libfastcommon提供,跳表及其结点的内存分配均使用对象池。通过实测一个inode占用内存大约270字节,由此推算64GB内存可以存放2亿个inode(注:内存使用量按80%计算)。


    FastDIR采用binlog用于集群内数据复制,binglog也是数据持久化的一种实现方式,程序启动时通过binlog重放把数据全部加载到内存中。V3.0通过存储插件实现数据持久化,按需加载数据,配合LRU淘汰算法,单机以有限内存(如64GB)支持百亿级海量文件。


    存储插件采用inode持久化数据和原有binlog配合的做法,对修改后的inode数据异步落盘,简单高效。数据落盘需满足如下两个条件之一:
    * 修改的inode数目达到阈值,比如102400个;
    * 超过时间间隔,比如60秒。


    FastDIR存储插件的LRU淘汰算法具有如下两大特点:
    * 按目录结构淘汰:先淘汰子结点,然后淘汰父结点;
    * 按数据线程淘汰:每个数据线程作为一个独立的数据单元,数据存取和淘汰均在其数据线程中以无锁方式完成。


   友情提示:
      * FastDIR是通用分布式目录服务,可以单独部署,用来存储其他场景下的目录结构;
      * 如果文件数只有千万级,不需要启用存储插件;
      * 在生产环境启用存储插件,建议使用SSD,推荐使用NVMe SSD。


    FastDIR存储插件可以随时开启和关闭,请大家在FastCFS项目官网下载使用最新版本V3.1,有任何疑问和建议,欢迎随时反馈和交流。


    附FastCFS项目地址:https://gitee.com/fastdfs100/FastCFS

页: [1]
查看完整版本: 高性能大容量分布式目录服务FastDIR简介