管理缓存

Alluxio 充当计算应用和持久化存储之间的智能缓存层。有效管理此缓存是实现最大性能、降低存储成本和确保数据新鲜度的关键。

本指南全面概述了 Alluxio 中的缓存生命周期,从数据如何进入系统到如何管理其行为以及最终的移除。

缓存生命周期

Alluxio 中数据的生命周期通常遵循三个主要阶段:

  1. 加载 (Loading):将数据从底层文件系统 (UFS) 带入 Alluxio。

  2. 管理 (Managing):控制缓存数据的策略、配额和过期规则。

  3. 移除 (Removing):驱逐数据以释放空间或满足合规性要求。

1. 加载数据

数据主要通过两种方式进入 Alluxio 缓存:

  • 被动缓存 (Read-Through):最常见的方法。当应用程序读取 Alluxio 中不存在的文件时,Worker 会自动从 UFS 提取并缓存它。

  • 主动预加载 (Active Preloading):你可以使用 job load 命令主动将热门数据集加载到缓存中。这可以“预热”缓存,从而使第一次查询就能获得最佳性能。

了解更多关于加载数据 →

2. 管理数据

一旦数据被缓存,你需要工具来控制其行为。Alluxio 提供了几种机制来微调这一点:

  • 缓存过滤 (Cache Filters):决定什么被缓存。你可以排除临时文件或强制重新验证变化的数据。

  • 配额 (Quotas):限制特定目录或租户可用的存储空间,以防止一个用户独占缓存。

  • 生存时间 (TTL):设置数据过期时间,以确保存不过时。

  • 缓存优先级 (Cache Priority):将关键数据集标记为“高优先级”,以便在缓存已满时最后被移除。

了解更多关于管理数据 →

3. 移除数据

数据不会永远留在缓存中。移除发生的原因有三个:

  • 自动驱逐 (Automatic Eviction):当空间已满时,Alluxio 会移除最无用的数据(如最近最少使用的数据)以为新内容腾出空间。

  • 手动移除 (Manual Removal):你可以使用 job free 命令显式移除数据。

  • 过时清理 (Stale Cleanup):管理工具可以清理因集群拓扑更改而无效的数据。

了解更多关于删除数据 →

策略指南:最佳实践与应用场景

不同的数据集需要不同的缓存策略。使用本指南为你的工作负载选择正确的配置。

不可变或极少更改的数据

示例:维度表、ML 参考数据集、静态资产。

目标:最大化性能(缓存命中率)。 策略

  • 缓存过滤:使用默认的 immutable 策略。

  • 主动预加载:使用 job load 预热缓存。

  • 缓存优先级 (可选):设置为 HIGH 以防止其被驱逐。

  • 配额 (可选):分配充足的配额以确保其始终能够容纳。

周期性更新的数据

示例:每小时 ETL 报告、每日模型再训练数据。

目标:平衡性能与数据新鲜度。 策略

  • 缓存过滤:使用 maxAge(例如 1h1d),以便 Alluxio 在设定时间后自动检查更新。

  • 主动预加载:在上游更新过程完成后立即运行 job load,以确保新版本是热数据。

临时或流式数据

示例:检查点、临时查询文件、构建产物。

目标:防止“缓存污染”(用无用数据填充缓存)。 策略

  • 缓存过滤:对写多读一次的数据使用 skipCache

  • 生存时间 (TTL):设置较短的 TTL(例如 10m),以确保任何缓存数据都能被快速移除。

  • 缓存优先级:设置为 LOW,以便在需要空间时首先将其移除。

合规敏感数据

示例:PII 日志、GDPR 请求。

目标:严格控制数据生命周期。 策略

  • 缓存过滤:考虑对高度敏感的文件使用 skipCache,以防止它们触及缓存磁盘。

  • 生存时间 (TTL):对敏感目录强制执行硬限制(例如 90d)。

  • 手动移除:数据处理完成后立即使用 job free

Last updated