3、核心概念:代理缓存空间回收策略(Cache Eviction Policy)概述

代理缓存空间回收策略是 Nexus Repository Manager 在代理(Proxy)仓库中,当缓存存储空间达到上限或制品生命周期到期时,决定“驱逐哪些缓存制品”的规则集合。该策略直接决定了缓存命中率、磁盘 I/O 压力以及制品误差预算的消耗速度。

3.1 为什么需要空间回收策略?

Nexus 代理仓库的本地缓存并非无限存储。当缓存空间被填满时,必须通过回收策略释放空间,以容纳新的缓存制品。缺乏合理的回收策略会导致以下问题:

  • 缓存污染:低频访问的旧制品长期占用空间,导致高频访问的新制品无法缓存。
  • 预算失控:误差预算因频繁回源拉取而快速耗尽,SLO 违约风险上升。
  • 磁盘写穿:无策略的随机删除可能引发大量回源请求,造成后端存储压力。
核心原则:回收策略的目标是在有限的缓存空间内,最大化缓存命中率,同时最小化对误差预算的冲击。

3.2 主流回收策略对比

Nexus 支持多种缓存回收策略,每种策略对误差预算的影响不同。下表对比了三种最常用的策略:

策略名称 驱逐依据 误差预算影响 适用场景
LRU(最近最少使用) 最后一次访问时间 低:保留热数据,回源少 通用型代理仓库,访问模式稳定
LFU(最不经常使用) 历史访问频率 中:可能保留突发高频但已过时的制品 制品访问频率分布极不均匀的场景
TTL(基于时间) 缓存时间戳 + 过期阈值 高:到期即驱逐,可能频繁回源 安全合规要求严格,需定期刷新制品

3.3 回收策略与误差预算的关联模型

回收策略的选择直接影响误差预算的消耗速率。下图展示了不同策略下缓存空间与回源请求量的关系:

回收策略与误差预算关联模型 回收策略 → 缓存空间 → 回源请求 → 误差预算消耗 LRU 策略 LFU 策略 TTL 策略 缓存空间(有限容量) 热数据保留 | 冷数据驱逐 | 空间释放 回源请求(Back-to-Source) 命中失败 → 远程拉取 → 网络延迟 + 预算消耗 误差预算消耗 ↑ 策略选择 决定回源频率

3.4 回收触发条件

Nexus 在以下条件满足时触发缓存回收:

  1. 空间阈值触发:缓存使用率超过预设百分比(如 85%)。
  2. 定时任务触发:通过 Nexus 任务调度器周期性执行回收。
  3. 手动触发:管理员通过 UI 或 REST API 强制回收。
  4. 制品过期触发:基于 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 因回源增加的预算消耗(百分比) 误差预算计算器

通过台账数据,团队可以量化不同回收策略对误差预算的实际影响,从而做出数据驱动的策略调整。