3. Registry 架构解析:存储后端、代理缓存与认证鉴权

Registry 是镜像拉取链路中的核心中间件,其架构设计直接影响拉取延迟、并发吞吐与故障域。本章从存储后端、代理缓存、认证鉴权三个维度拆解 Registry 的内部结构,为后续容量规划提供架构依据。

3.1 存储后端:分层抽象与适配器模式

Registry 采用 存储后端抽象层(Storage Driver Interface),将镜像 Blob 与 Manifest 的物理存储与业务逻辑解耦。所有存储操作均通过 Driver 接口完成,支持多种后端实现。

存储后端 协议/接口 典型延迟(P50) 并发上限 适用场景
本地文件系统 POSIX 1-5 ms 受磁盘 IOPS 限制 单机测试、小规模部署
S3 S3 REST API 10-50 ms 数千 QPS(桶级别) 生产环境、跨 AZ 高可用
GCS GCS JSON API 10-60 ms 数千 QPS(桶级别) GCP 原生集成、全球多区域
Azure Blob Azure Blob REST 10-50 ms 数千 QPS(账户级别) Azure 云原生部署
NFS/GlusterFS NFS v3/v4 2-20 ms 受网络与锁机制限制 传统 IDC、共享存储
容量规划要点: S3/GCS 的延迟主要受 请求签名计算 和 网络往返 影响。在并发拉取场景下,建议为每个 Registry 实例预留至少 200 Mbps 的出口带宽,并启用 连接复用(HTTP Keep-Alive)以减少 TLS 握手开销。

3.2 存储后端架构图

下图展示了 Registry 存储后端的抽象层设计,以及各适配器与底层存储系统的交互关系。

Registry 存储后端架构 Registry 存储后端架构 Registry 业务逻辑层 Storage Driver Interface 本地文件系统 S3 适配器 GCS 适配器 Azure Blob 本地磁盘 S3 对象存储 GCS 对象存储 Azure Blob 说明: 存储后端通过适配器模式实现,新增后端只需实现 Driver 接口。 S3/GCS 支持分块上传(Multipart Upload),适合大 Blob 并发写入。

3.3 代理缓存:减少跨区域拉取延迟

当 Registry 部署在多个地理区域时,跨区域拉取 Blob 会产生显著的延迟与带宽开销。代理缓存(Proxy Cache)通过在边缘节点缓存热镜像层,降低回源频率。

3.3.1 缓存层级与策略

  • L1 内存缓存:存储最近访问的 Manifest 和小 Blob(< 1 MB),TTL 通常为 5-15 分钟。
  • L2 本地磁盘缓存:存储完整 Blob 文件,使用 LRU 淘汰策略,容量根据磁盘配额设定。
  • L3 远端存储:S3/GCS 作为最终数据源,仅在 L1/L2 未命中时回源。
性能指标参考: 在典型场景下,L1 缓存命中率约为 20-30%,L2 缓存命中率可达 60-80%。启用代理缓存后,跨区域拉取延迟可从 500-1000 ms 降低至 50-150 ms。

3.4 代理缓存架构图

下图展示了代理缓存的请求处理流程,以及缓存层级之间的数据流转关系。

Registry 代理缓存架构 Registry 代理缓存架构 客户端 代理缓存 (L1 内存 + L2 磁盘) 后端 Registry S3 / GCS 缓存命中(L1/L2) 缓存策略说明: 1. 客户端请求先到达代理缓存,检查 L1 内存缓存。 2. L1 未命中则查 L2 磁盘缓存;L2 命中直接返回,并异步更新 L1。 3. L2 未命中则回源后端 Registry,从 S3/GCS 拉取并写入 L2 与 L1。

3.5 认证鉴权机制

Registry 支持多级认证与授权,确保只有合法用户才能拉取或推送镜像。核心组件包括:

  • 认证:基于 OAuth2 Bearer ,客户端先向 Auth Service 获取 ,再携带 访问 Registry。
  • Basic Auth:通过 HTTP Basic 认证,适用于内部网络或测试环境。
  • RBAC 授权:基于角色的访问控制,支持命名空间级别的读写权限隔离。

3.5.1 认证流程

  1. 客户端向 Registry 发起请求(如 GET /v2/)。
  2. Registry 返回 401 Unauthorized,并在 Www-Authenticate 头中指定 Auth Service 地址。
  3. 客户端向 Auth Service 发送凭证(用户名/密码或 ),获取 Bearer 。
  4. 客户端携带 重新请求 Registry,Registry 验证 有效性后返回数据。
容量规划注意: Auth Service 是拉取链路上的潜在瓶颈。在并发拉取场景下, 验证请求可能达到数千 QPS。建议为 Auth Service 配置独立资源池,并启用 缓存(TTL 5-10 分钟)以减少验证开销。

3.6 认证鉴权架构图

下图展示了 Registry 的认证鉴权流程,以及各组件之间的交互关系。

Registry 认证鉴权流程 Registry 认证鉴权流程 客户端 Registry Auth Service S3 / GCS ① GET /v2/ ② 401 + Auth URL ③ 凭证 → ④ ⑤ → GET ⑥ 验证 ⑦ 返回数据 认证鉴权要点: • 有效期通常为 5-30 分钟,过期后需重新获取。 • Registry 支持 X-Forwarded-For 头传递客户端 IP,用于审计与限流。 • 生产环境建议启用 HTTPS 与 加密,防止凭证泄露。

3.7 架构选型对比

维度 本地文件系统 S3/GCS 对象存储 代理缓存 + 对象存储
延迟 低(1-5 ms) 中(10-60 ms) 低(缓存命中时 5-20 ms)
扩展性 差(单机瓶颈) 好(弹性扩展) 优秀(边缘节点 + 中心存储)
高可用 低(单点故障) 高(多 AZ 冗余) 高(缓存层可多副本)
成本 低(磁盘成本) 中(存储 + 请求费用) 中高(缓存节点 + 存储费用)
推荐场景 开发测试、小规模 生产环境、多区域 全球部署、高并发拉取
容量规划建议: 对于大规模生产环境(日均拉取量 > 10 万次),推荐采用 代理缓存 + S3/GCS 的组合架构。缓存节点建议部署在靠近计算集群的可用区,并配置至少 500 GB 的 SSD 缓存盘,以容纳热镜像层。