管理缓存
Alluxio 充当计算应用和持久化存储之间的智能缓存层。有效管理此缓存是实现最大性能、降低存储成本和确保数据新鲜度的关键。
本指南全面概述了 Alluxio 中的缓存生命周期,从数据如何进入系统到如何管理其行为以及最终的移除。
缓存生命周期
Alluxio 中数据的生命周期通常遵循三个主要阶段:
加载 (Loading):将数据从底层文件系统 (UFS) 带入 Alluxio。
管理 (Managing):控制缓存数据的策略、配额和过期规则。
移除 (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(例如1h或1d),以便 Alluxio 在设定时间后自动检查更新。主动预加载:在上游更新过程完成后立即运行
job load,以确保新版本是热数据。
临时或流式数据
示例:检查点、临时查询文件、构建产物。
目标:防止“缓存污染”(用无用数据填充缓存)。 策略:
缓存过滤:对写多读一次的数据使用
skipCache。生存时间 (TTL):设置较短的 TTL(例如
10m),以确保任何缓存数据都能被快速移除。缓存优先级:设置为
LOW,以便在需要空间时首先将其移除。
合规敏感数据
示例:PII 日志、GDPR 请求。
目标:严格控制数据生命周期。 策略:
缓存过滤:考虑对高度敏感的文件使用
skipCache,以防止它们触及缓存磁盘。生存时间 (TTL):对敏感目录强制执行硬限制(例如
90d)。手动移除:数据处理完成后立即使用
job free。
Last updated