Alluxio
ProductsLanguageHome
AI-3.5 (stable)
AI-3.5 (stable)
  • 概览
  • 部署Alluxio
    • 资源需求和兼容性
    • 在Kubernetes上安装Alluxio
    • 监控和指标
    • Alluxio 集群操作
    • 系统健康检查和快速恢复
    • 采集集群信息
  • 架构
    • Alluxio 命名空间和底层文件系统命名空间
    • I/O弹性
    • worker管理与一致性哈希
  • 底层存储系统
    • Amazon AWS S3
    • HDFS
    • 阿里云 OSS
    • 腾讯 COS
    • 火山引擎 TOS
    • 谷歌云 GCS
  • Client APIs
    • 基于 FSSpec 的Alluxio Python Filesystem API
    • 基于 FUSE 的 POSIX API
      • Client 写回
    • S3 API
  • 缓存操作
    • 缓存预加载
    • 缓存过滤
    • 缓存驱逐
      • TTL (有效时间)规则
      • 优先级规则
      • 通过命令行释放缓存空间
  • 资源管理
    • 基于目录的集群配额
    • UFS 带宽限制
  • 性能优化
    • 通过副本提高读取吞吐量
    • 读取大文件
    • 元数据列表
    • 数据预拉取
    • 写入临时文件
  • 安全
    • TLS 支持
  • 性能基准测试
    • Fio 测试概览
    • MLPerf Storage 基准测试
    • COSBench 性能基准测试
  • 参考
    • 用户命令行接口
    • 指标
    • S3 API 的使用
    • 第三方授权
  • 版本发布说明
Powered by GitBook
On this page
  • 缓存驱逐概述
  • 写入时驱逐
  • 缓存驱逐器
  • 后台异步驱逐
  • 基于缓存容量的异步驱逐
  • 基于Page数量上限的异步驱逐
  • 动态更新配置的REST API
  1. 缓存操作

缓存驱逐

缓存驱逐概述

由于Alluxio使用的存储空间是有限的,缓存驱逐功能通过多种策略驱逐旧数据,以确保有足够的存储空间缓存新数据。

Alluxio将通过两种不同的方式驱逐其缓存:

  • 写入时驱逐

  • 后台异步驱逐

写入时驱逐

写入时驱逐是在Alluxio中写入page时同步检查并清除缓存的数据。 当Alluxio即将写入一个page且总缓存将超过存储容量时,将触发驱逐。

缓存驱逐器

Alluxio提供以下五种缓存驱逐器来驱逐缓存数据:

  • LRUCacheEvictor(默认):LRU缓存驱逐策略

  • FIFOCacheEvictor:FIFO缓存驱逐策略

  • LFUCacheEvictor:LFU缓存驱逐策略。page根据对数计数按桶顺序排序。桶内的page按LRU顺序排序。

  • NondeterministicLRUCacheEvictor:具有不确定性缓存驱逐策略的LRU。均匀驱逐LRU尾部的元素。

  • TwoChoiceRandomEvictor:两选随机客户端缓存驱逐策略。它选择两个随机page ID并驱逐使用最少的一个。

worker缓存和client缓存有不同的属性来定义它们各自的驱逐器。 例如,以下在alluxio-site.properties中的配置为worker缓存和client缓存设置LRUCacheEvictor。

alluxio.worker.page.store.evictor.class=alluxio.client.file.cache.evictor.LRUCacheEvictor
alluxio.user.client.cache.evictor.class=alluxio.client.file.cache.evictor.LRUCacheEvictor

后台异步驱逐

Alluxio 支持针对缓存空间设置不同的约束条件,这些约束条件将触发驱逐操作:

  • 设置page可以占用的总大小的限制,即page缓存的容量;

  • 设置缓存中page总数的限制。

在每次写入page操作时,Alluxio 会检查是否达到了其中的约束条件。如果违反了约束条件,则会进行同步驱逐,为新page的写入腾出空间。 然而,在写入时进行同步驱逐会显著降低性能。后台的异步驱逐旨在预先异步驱逐缓存数据,以避免在写入操作期间驱逐缓存数据。

基于缓存容量的异步驱逐

要启用后台异步驱逐功能,请在alluxio-site.properties中添加以下配置:

alluxio.user.client.cache.async.eviction.enabled=true
alluxio.user.client.cache.async.eviction.check.interval=1min
alluxio.user.client.cache.async.eviction.high.water.mark=0.9
alluxio.user.client.cache.async.eviction.low.water.mark=0.8

通过设置上述配置,Alluxio将创建一个后台线程,检查page缓存空间是否达到高水位线阈值。 一旦触发此条件,它将驱逐缓存的page直到达到低水位线阈值。 后台线程将周期性进行检查。

基于Page数量上限的异步驱逐

Alluxio 会在后台线程中异步驱逐超过数量限制的page,该线程会定期扫描、检查过多的page。当page总数超过highWatermark * maxPageNumberLimit时, 会触发驱逐操作,直到page总数降到lowWatermark * maxPageNumberLimit以下。

要启用基于page数量限制的异步驱逐功能,将alluxio.worker.page.store.max.page.number.limit.enabled设置为true。 最大page数量的限制可以通过alluxio.worker.page.store.max.page.number来指定。

alluxio.user.client.cache.async.eviction.enabled=true
alluxio.user.client.cache.async.eviction.check.interval=1min
alluxio.user.client.cache.async.eviction.low.water.mark=0.6
alluxio.user.client.cache.async.eviction.high.water.mark=0.8

alluxio.worker.page.store.max.page.number.limit.enabled=true
alluxio.worker.page.store.max.page.number=100000

动态更新配置的REST API

Alluxio提供以下REST API,用户可以动态设置和获取异步驱逐配置:

  • 启用异步驱逐并更新相关参数

curl --location --request POST 'localhost:28080/v1/cache?cmd=enableCacheAsyncEviction&chacheEvictionCheckInterval=30&highWaterMark=0.8&lowWaterMark=0.5'
  • 禁用异步驱逐

curl --location --request POST 'localhost:28080/v1/cache?cmd=disableCacheAsyncEviction'
  • 获取当前异步驱逐参数

curl --location 'localhost:28080/v1/cache?cmd=getPageCacheAsyncEvictionManagerInfo'

Last updated 3 months ago