For the complete documentation index, see llms.txt. This page is also available as Markdown.

缓存驱逐

数据通过三种方式离开 Alluxio 缓存:

  1. 自动驱逐 — Worker 在缓存空间不足时驱逐数据,顺序由配置的策略决定(默认 LRU)

  2. TTL 过期 — 后台扫描移除生命周期已到期的数据,与访问频率或优先级无关

  3. 手动驱逐job free 按需显式清除某个路径的缓存

自动驱逐

当 Worker 需要为新数据腾出空间时,会运行驱逐器来选择并移除缓存中的页。提供三种策略:

策略
驱逐对象

LRU(默认)

最长时间未被访问的数据

LFU

访问次数最少的数据

FIFO

最早写入的数据

要更改驱逐策略,在所有 Worker 的 alluxio-site.properties 中设置:

# 使用 LFU 替代默认的 LRU
alluxio.worker.page.store.evictor.type=LFU

异步驱逐

默认情况下,驱逐在写入期间同步执行,可能增加延迟。异步驱逐在后台运行,在缓存填满之前提前保持余量:

alluxio.worker.page.store.async.eviction.enabled=true
# 缓存使用率超过此阈值时开始驱逐(默认:0.9)
alluxio.worker.page.store.async.eviction.high.watermark=0.85
# 缓存使用率降至此阈值时停止驱逐(默认:0.8)
alluxio.worker.page.store.async.eviction.low.watermark=0.75
# 检查缓存使用情况的间隔(默认:1min)
alluxio.worker.page.store.async.eviction.check.interval=30s

基于 TTL 的驱逐和 Cache Priority 也会影响被驱逐的内容和时机。详见缓存策略

手动驱逐:free 作业

使用 job free 显式清除某个路径的缓存数据——不会影响底层 UFS 的数据。常见使用场景:

  • 模型版本更新:在加载新版本前(或后)释放旧版本

  • 作业完成后清理:批处理作业完成后释放空间

  • 强制重新缓存:释放后重新加载,以拾取对 immutable 策略路径的 UFS 变更

提交与监控

进度输出示例:

停止正在运行的 Free 作业

停止操作会将部分已释放的数据残留在缓存中。作业可通过再次使用 --submit 提交来恢复。

版本更新模式

将已固定的数据集替换为新版本:

有关 job free 标志的完整列表,请参阅 job free CLI 参考

您也可以通过 REST API 以编程方式触发和管理 free 作业。

过时缓存清理

集群拓扑变更可能导致数据缓存在 Worker 上,但根据一致性哈希环,该 Worker 已不再"拥有"这些数据。这些过时数据占用空间但不会被提供给客户端。

发生时机:

  • 添加或移除 Worker(归属权重新分配)

  • 文件的副本因子降低

  • Worker 暂时下线后其数据迁移,该 Worker 重新加入后

触发过时清理

这将向每个 Worker 提交一个异步作业。Worker 扫描本地存储,根据当前哈希环验证归属权,并删除不再属于自己的数据。可通过 alluxio_cleared_stale_cached_data Prometheus 指标或 Worker 日志监控进度。

更多详情请参阅 REST API 参考

Last updated