3、核心概念:代理缓存空间回收策略(Cache Eviction Policy)概述
代理缓存空间回收策略是 Nexus Repository Manager 在代理(Proxy)仓库中,当缓存存储空间达到上限或制品生命周期到期时,决定“驱逐哪些缓存制品”的规则集合。该策略直接决定了缓存命中率、磁盘 I/O 压力以及制品误差预算的消耗速度。
3.1 为什么需要空间回收策略?
Nexus 代理仓库的本地缓存并非无限存储。当缓存空间被填满时,必须通过回收策略释放空间,以容纳新的缓存制品。缺乏合理的回收策略会导致以下问题:
- 缓存污染:低频访问的旧制品长期占用空间,导致高频访问的新制品无法缓存。
- 预算失控:误差预算因频繁回源拉取而快速耗尽,SLO 违约风险上升。
- 磁盘写穿:无策略的随机删除可能引发大量回源请求,造成后端存储压力。
核心原则:回收策略的目标是在有限的缓存空间内,最大化缓存命中率,同时最小化对误差预算的冲击。
3.2 主流回收策略对比
Nexus 支持多种缓存回收策略,每种策略对误差预算的影响不同。下表对比了三种最常用的策略:
| 策略名称 | 驱逐依据 | 误差预算影响 | 适用场景 |
|---|---|---|---|
| LRU(最近最少使用) | 最后一次访问时间 | 低:保留热数据,回源少 | 通用型代理仓库,访问模式稳定 |
| LFU(最不经常使用) | 历史访问频率 | 中:可能保留突发高频但已过时的制品 | 制品访问频率分布极不均匀的场景 |
| TTL(基于时间) | 缓存时间戳 + 过期阈值 | 高:到期即驱逐,可能频繁回源 | 安全合规要求严格,需定期刷新制品 |
3.3 回收策略与误差预算的关联模型
回收策略的选择直接影响误差预算的消耗速率。下图展示了不同策略下缓存空间与回源请求量的关系:
3.4 回收触发条件
Nexus 在以下条件满足时触发缓存回收:
- 空间阈值触发:缓存使用率超过预设百分比(如 85%)。
- 定时任务触发:通过 Nexus 任务调度器周期性执行回收。
- 手动触发:管理员通过 UI 或 REST API 强制回收。
- 制品过期触发:基于 TTL 策略的制品到期自动驱逐。
3.5 回收策略选择建议
最佳实践:对于大多数 DevOps 流水线场景,推荐使用 LRU + 空间阈值 组合策略。该组合在缓存命中率和误差预算保护之间取得了最佳平衡。
不同场景的策略选择参考:
- 高频迭代开发环境:LRU 策略 + 短 TTL(如 24h),避免缓存过时快照。
- 安全合规敏感环境:TTL 策略 + 强制过期,确保制品版本及时刷新。
- 大规模 CI/CD 集群:LFU 策略 + 大缓存空间,减少重复构建时的回源。
3.6 回收策略配置示例
在 Nexus 的 blobstore 配置中,可以通过以下方式设定回收策略参数:
# 示例:Nexus 代理仓库缓存回收配置(YAML 风格)
proxy:
cache:
eviction:
policy: LRU # 回收策略:LRU / LFU / TTL
maxSize: 50GB # 缓存空间上限
thresholdPercent: 85 # 触发回收的空间阈值(%)
ttl: 72h # TTL 策略下的过期时间
cleanupInterval: 1h # 定时清理间隔
注意:配置过低的
thresholdPercent(如 50%)会导致频繁回收,增加回源次数,加速误差预算消耗。建议初始值设为 80%~90%,并根据实际命中率调优。
3.7 回收策略对误差预算台账的影响
误差预算台账需要记录每次回收事件及其对预算的影响。下表展示了台账中与回收策略相关的关键字段:
| 台账字段 | 说明 | 数据来源 |
|---|---|---|
eviction_policy |
本次回收使用的策略名称 | Nexus 配置 |
evicted_artifacts |
被驱逐的制品数量 | 回收日志 |
freed_space_bytes |
释放的缓存空间大小 | Blobstore 统计 |
post_eviction_hit_rate |
回收后的缓存命中率 | Nexus 指标 API |
budget_impact |
因回源增加的预算消耗(百分比) | 误差预算计算器 |
通过台账数据,团队可以量化不同回收策略对误差预算的实际影响,从而做出数据驱动的策略调整。