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

Posted Huazie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高性能大容量分布式目录服务FastDIR简介相关的知识,希望对你有一定的参考价值。

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

本篇文章转载于 FastCFS 作者 余庆 大佬的 FastDFS分享与交流 公众号。

作为通用分布式文件系统 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

以上是关于高性能大容量分布式目录服务FastDIR简介的主要内容,如果未能解决你的问题,请参考以下文章

FasterDFS基础配置

FastDFS集群-安装说明

linux性能监控工具介绍

Centos 7.X部署分布式文件系统:FastDFS+Nginx

RocketMQ简介及实践

FastDFS与Nginx的配置说明