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 存储后端的抽象层设计,以及各适配器与底层存储系统的交互关系。
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 代理缓存架构图
下图展示了代理缓存的请求处理流程,以及缓存层级之间的数据流转关系。
3.5 认证鉴权机制
Registry 支持多级认证与授权,确保只有合法用户才能拉取或推送镜像。核心组件包括:
- 认证:基于 OAuth2 Bearer ,客户端先向 Auth Service 获取 ,再携带 访问 Registry。
- Basic Auth:通过 HTTP Basic 认证,适用于内部网络或测试环境。
- RBAC 授权:基于角色的访问控制,支持命名空间级别的读写权限隔离。
3.5.1 认证流程
- 客户端向 Registry 发起请求(如
GET /v2/)。 - Registry 返回
401 Unauthorized,并在Www-Authenticate头中指定 Auth Service 地址。 - 客户端向 Auth Service 发送凭证(用户名/密码或 ),获取 Bearer 。
- 客户端携带 重新请求 Registry,Registry 验证 有效性后返回数据。
容量规划注意: Auth Service 是拉取链路上的潜在瓶颈。在并发拉取场景下, 验证请求可能达到数千 QPS。建议为 Auth Service 配置独立资源池,并启用 缓存(TTL 5-10 分钟)以减少验证开销。
3.6 认证鉴权架构图
下图展示了 Registry 的认证鉴权流程,以及各组件之间的交互关系。
3.7 架构选型对比
| 维度 | 本地文件系统 | S3/GCS 对象存储 | 代理缓存 + 对象存储 |
|---|---|---|---|
| 延迟 | 低(1-5 ms) | 中(10-60 ms) | 低(缓存命中时 5-20 ms) |
| 扩展性 | 差(单机瓶颈) | 好(弹性扩展) | 优秀(边缘节点 + 中心存储) |
| 高可用 | 低(单点故障) | 高(多 AZ 冗余) | 高(缓存层可多副本) |
| 成本 | 低(磁盘成本) | 中(存储 + 请求费用) | 中高(缓存节点 + 存储费用) |
| 推荐场景 | 开发测试、小规模 | 生产环境、多区域 | 全球部署、高并发拉取 |
容量规划建议: 对于大规模生产环境(日均拉取量 > 10 万次),推荐采用 代理缓存 + S3/GCS 的组合架构。缓存节点建议部署在靠近计算集群的可用区,并配置至少 500 GB 的 SSD 缓存盘,以容纳热镜像层。