跳到主要内容

缓存

对于初次接触的使用者来说,你可以把 Curvine 简单理解为:一个可以像本地磁盘一样使用的分布式文件缓存。它不用你关心数据存在集群的哪台机器、哪种存储上,只需通过一个挂载点,就能轻松使用分布式的缓存能力,适配绝大多数日常文件操作场景。

一、什么是 Curvine?

Curvine 是一款分布式文件缓存系统,它能够把集群内的各类存储介质、远端存储资源整合在一起,构建出一个统一的文件目录空间,并且对外提供可直接挂载的文件系统。

和传统分布式文件系统不同,Curvine 最大的亮点是完整兼容 POSIX 语义,使用体验和你电脑上的本地磁盘几乎没有区别。不用额外学习复杂的操作指令,也不用改造原有应用,不管是日常开发、数据缓存、git clone、数据库文件存储、日志写入还是临时文件存放,直接把文件路径指向 Curvine 挂载点即可,完全做到“即挂即用”。

二、核心特性

核心能力通俗说明
统一命名空间只用一个挂载点,就能访问全部文件目录,不用关心数据具体存在哪台 Worker 节点、哪种存储介质上;文件路径、权限设置和本地文件系统完全一致,上手零成本。
高速缓存,重复访问更流畅常用的工作数据会驻留在集群内速度更快的介质中,反复访问这些数据时,能大幅减少对远端存储或低速存储的 I/O 请求,打开、读取文件的速度更快。
智能分层存储支持内存(MEM)、固态硬盘(SSD)、机械硬盘(HDD)多种存储层级,管理员提前配置好各层级路径,使用者可以指定优先写入的介质;当优先层级空间不足时,数据会自动向下一层级溢出,平衡速度、成本和存储容量。
智能空间管理通过 TTL 时间过期和配额 + LRU 淘汰双重机制管控存储空间,避免缓存无限占用集群容量,不用手动清理也能保持空间充足。
完整 POSIX 文件语义全面支持各类标准文件操作,包括随机写、并发写、文件锁、扩展属性、软硬链接、稀疏文件等,能适配日志、数据库、项目构建等真实业务场景,原有本地应用直接迁移即可使用。

三、和本地磁盘一样的使用体验

Curvine 完全贴合本地磁盘使用习惯。

3.1 多进程并发写入

多个客户端、多个进程可以同时写入同一个文件,不需要应用自己做协调管控,只要写入文件的不同偏移位置,就不会出现数据混乱,和本地多进程写文件的语义完全一致。

3.2 自由随机写入

不限制只能顺序写或追加写,支持在文件的任意位置随时写入数据,适配数据库、大文件修改等需要随机读写的场景。

3.3 常用命令全兼容

Linux 系统下所有常规文件操作命令,比如 cp(复制)、mv(移动)、rm(删除)、mkdir(新建文件夹)、ls(查看目录)、find(查找文件)等,在 Curvine 挂载点上都能正常使用,操作习惯完全不用改。

四、POSIX 高级特性详解

Curvine 完整支持各类 POSIX 高级特性,满足各类复杂业务需求,具体能力说明如下:

特性名称详细说明
随机写 & 并发写支持文件任意位置写入,多客户端可同时操作同一文件的不同区域,适配日志、数据库等对写入灵活性要求高的场景。
扩展属性(xattr完整支持文件扩展属性,使用者可以自定义存储文件的专属元数据,方便做文件标记、业务关联等操作。
符号链接(软链接)支持软链接功能,建议链接目标都指向 Curvine 内部路径;如果链接到本机其他目录或其他节点本地路径,分布式环境下其他节点可能无法正常访问。
硬链接支持硬链接,语义和本地文件系统一致,仅适用于 Curvine 内部同一文件系统范围内,跨系统无法创建。
文件锁兼容 POSIX 锁和 BSD 锁,考虑到分布式环境的稳定性,文件锁带有默认 5 分钟超时自动释放机制,避免客户端或节点异常导致锁一直占用,引发死锁问题。
稀疏文件(文件空洞)支持稀疏文件模式,没有实际写入数据的空洞区域不会占用物理存储空间,节省集群存储资源。
空间预分配支持提前为文件分配存储空间,避免大文件写入过程中出现空间不足的问题,保证写入流程稳定。
常规文件属性文件权限位、访问/修改时间戳、文件截断等基础 inode 语义,完全遵循 POSIX 标准,和本地文件操作体验一致。

五、分层存储使用说明

Curvine 支持多层级存储介质,通过简单配置即可指定数据存储优先级,兼顾速度与成本。

5.1 工作原理

Worker 节点配置各存储层级的路径和标签,使用者在客户端指定优先使用的存储类型,数据会优先写入目标层级;当该层级容量不足时,会自动降级到下一层级存储,无需手动干预。

5.2 配置示例

Worker 节点配置:

[worker]
data_dir = [
'[MEM]/mem',
'[SSD]/data/ssd',
'[HDD]/data/hdd'
]

客户端配置:

[client]
storage_type = "mem"

配置效果:新建文件优先存入内存层,内存空间不足时,自动依次存入 SSD、HDD 层。

六、缓存策略

6.1 写入策略

写入策略控制挂载路径上的数据写入方式,通过 cv mount ... --write-type <类型> 配置,CLI 默认值为 fs_mode

策略CLI 取值行为适用场景
CacheModecache_mode直接写到底层 UFS,Curvine 主要承担统一访问与缓存读取层。数据主存仍在 UFS 的场景。
FsModefs_mode优先写入 Curvine 命名空间;首次挂载时可能触发元数据 resync由 Curvine 管理缓存命名空间的场景。

6.2 读取校验

当前面向用户的读侧校验开关是挂载参数 --read-verify-ufs

策略行为
关闭信任缓存与统一文件系统默认回退逻辑。
开启读前按 UFS 元数据(mtime 与文件长度)校验缓存。

当校验失败或缓存未命中时,会直接从 UFS 读取;若该挂载启用了自动缓存,可同时异步将数据加载到 Curvine。

七、数据过期管理(TTL)

为了合理管控缓存空间,Curvine 支持为文件、目录配置过期时间和过期策略,自主控制数据生命周期。

7.1 基础配置示例

[client]
ttl_ms = "1d"
ttl_action = "delete"

配置效果:文件从最后一次修改时间(mtime)开始计算,1 天后自动过期,执行删除操作。

7.2 按挂载配置 TTL

使用 cv mount 挂载 UFS 时,可为该挂载设置 TTL:

选项类型默认值说明示例
--ttl-msduration7d(挂载默认)缓存数据过期时间24h7d30d

挂载点的 TTL 动作由 write_type 推导:

  • cache_mode 挂载默认对应 delete
  • fs_mode 挂载默认对应 free

7.3 过期策略说明

策略取值具体含义
none关闭时间过期功能,数据会一直保留,直到手动删除或其他策略清理。
delete过期后彻底删除文件数据和元数据,是最常用的“到期清理”策略,时间从文件最后修改时间算起。
free过期后只释放文件占用的数据块,保留目录和元数据,适合需要保留目录结构、清理缓存数据的场景。

7.4 使用注意:mtime 与数据拷贝

使用 rclone 等工具往 Curvine 拷贝文件时,工具会保留源文件的原始修改时间(mtime)。如果源文件本身已经存放很久,拷贝后可能会立刻触发 TTL 过期,导致文件被删除或释放。

建议大批量导入数据前,先确认 TTL 配置,或导入后手动调整文件 mtime、临时关闭 TTL,避免数据误清理。

7.5 Master 节点(TTL 检查器)

在集群配置的 [master] 段中,使用以下 TOML 键:

参数类型默认值说明
ttl_checker_intervalduration1hTTL 检查器运行间隔
ttl_checker_retry_attemptsu323TTL 操作失败时的最大重试次数
ttl_bucket_intervalduration1h批量处理过期 inode 的桶时间间隔
ttl_max_retry_durationduration10m失败 TTL 操作的最大重试时长
ttl_retry_intervalduration1s重试间隔

7.6 执行流程

八、数据淘汰机制(配额与 LRU)

除了按时间过期,Curvine 还支持基于存储配额的自动淘汰,防止集群存储空间被写满,保障系统稳定运行。

8.1 工作原理

开启配额淘汰后,当集群存储用量达到设定的高水位线时,系统会自动按照 LRU(最近最少使用)规则,清理长时间没有访问过的数据,直到存储空间回落至安全范围。

8.2 配置示例

[master]
enable_quota_eviction = true
quota_eviction_high_rate = 0.8

8.3 与 TTL 的关联

如果设置 ttl_action = "none",关闭了时间过期策略,那么数据也不会被配额 LRU 机制淘汰删除,适合需要长期保留的重要数据。

九、缓存方式

9.1 自动缓存

当某挂载配置了非零 TTL(例如 cv mount s3://bucket/prefix /path --ttl-ms 7d)时,即启用该挂载的自动缓存。在该挂载下首次读取某个 UFS 文件(缓存未命中)时,Curvine 会提交一个异步加载任务,将数据拉取到 Curvine;本次读取由 UFS 直接返回,任务在后台执行。

在日志中可看到类似输出:

Submit async cache successfully for s3://bucket/cache/test.log, job res CacheJobResult { job_id: 7c00853f-13c8-43c1-8b3f-44740750b5a0, target_path: /s3/cache/test.log }

可用 job_id 查询缓存任务状态:

bin/cv load-status 7c00853f-13c8-43c1-8b3f-44740750b5a0

9.2 主动缓存

可以使用 load 命令主动加载 UFS 数据到 Curvine,示例如下:

bin/cv load s3://bucket/cache/test.log

自动缓存与主动缓存可同时使用;主动缓存可缩短该文件首次读取的等待时间。

提示

加载数据前,须先将 UFS 挂载到 Curvine(cv mount)。 自动缓存与主动缓存均使用固定缓存路径,与 UFS 目录结构一致。

十、快速小结

核心维度Curvine 核心要点
产品定位分布式文件缓存,支持 POSIX 挂载,使用体验等同于本地磁盘
核心优势统一命名空间、分层智能存储、TTL + LRU 双重空间管控、完整 POSIX 语义
写入能力支持随机写、多客户端并发写同一文件,适配复杂业务
高级特性支持扩展属性、软硬链接、带超时的文件锁、稀疏文件、空间预分配
存储管理多介质分层存储,客户端可指定优先级,空间不足自动降级
空间管控基于 mtime 的 TTL 过期 + 可选配额 LRU 自动淘汰,灵活管控存储容量