缓存驱逐
缓存驱逐概述
由于Alluxio使用的存储空间是有限的,缓存驱逐功能通过多种策略驱逐旧数据,以确保有足够的存储空间缓存新数据。
Alluxio将通过两种不同的方式驱逐其缓存:
写入时驱逐
后台异步驱逐
写入时驱逐
写入时驱逐是在Alluxio中写入page时同步检查并清除缓存的数据。 当Alluxio即将写入一个page且总缓存将超过存储容量时,将触发驱逐。
缓存驱逐器
Alluxio提供以下五种缓存驱逐算法来驱逐缓存数据:
LRU(默认):LRU缓存驱逐策略
FIFO:FIFO缓存驱逐策略
LFU:LFU缓存驱逐策略。page根据对数计数按桶顺序排序。桶内的page按LRU顺序排序。
Nondeterministic LRU:具有不确定性缓存驱逐策略的LRU。均匀驱逐LRU尾部的元素。
Two Choice Random:两选随机客户端缓存驱逐策略。它选择两个随机page ID并驱逐使用最少的一个。
以下配置在 alluxio-site.properties
中为worker缓存设置 LRU 驱逐策略。
alluxio.worker.page.store.evictor.type=LRU
可选的配置值为 LRU
、LFU
、FIFO
和 RANDOM
。如需启用 Nondeterministic LRU,请按如下方式设置:
alluxio.worker.page.store.evictor.type=LRU
alluxio.worker.page.store.evictor.nondeterministic.enabled=true
后台异步驱逐
Alluxio 支持针对缓存空间设置不同的约束条件,这些约束条件将触发驱逐操作:
设置page可以占用的总大小的限制,即page缓存的容量;
设置缓存中page总数的限制。
在每次写入page操作时,Alluxio 会检查是否达到了其中的约束条件。如果违反了约束条件,则会进行同步驱逐,为新page的写入腾出空间。 然而,在写入时进行同步驱逐会显著降低性能。后台的异步驱逐旨在预先异步驱逐缓存数据,以避免在写入操作期间驱逐缓存数据。
基于缓存容量的异步驱逐
要启用后台异步驱逐功能,请在alluxio-site.properties
中添加以下配置:
alluxio.worker.page.store.async.eviction.enabled=true
alluxio.worker.page.store.async.eviction.check.interval=1min
alluxio.worker.page.store.async.eviction.high.watermark=0.9
alluxio.worker.page.store.async.eviction.low.watermark=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.worker.page.store.async.eviction.enabled=true
alluxio.worker.page.store.async.eviction.check.interval=1min
alluxio.worker.page.store.async.eviction.high.watermark=0.9
alluxio.worker.page.store.async.eviction.low.watermark=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