为图像提供即时缓存

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/glance/+spec/instant_caching

为特定 Glance 节点上的给定图像提供即时缓存。

问题描述

在 Yoga 中,我们已经添加了对 V2 API 下缓存相关操作的支持,但仍然需要依赖现有的周期性任务来缓存实际的图像。这意味着用户/部署者/管理员需要等待下一个周期性任务运行才能缓存实际的图像。即使周期性任务的默认时间为 300 秒(5 分钟),它也可能因部署而异,并且用户必须等待实际图像被缓存。

提议的变更

我们建议从 glance-api 中删除现有的周期性任务,并修改现有的 PUT /v2/cache/{image_id} API,使其将图像排队进行缓存并立即开始缓存。如果任何现有的即时缓存操作正在进行中,则最新的图像将被添加到队列中,以便在之前的操作完成后进行缓存。用户可以使用 GET /v2/cache API 调用来查看队列的大小。

备选方案

与其修改现有的 API,我们可以添加一个新的 POST API,它将启动指定图像的即时缓存。我们可以使用现有的策略 cache_image,以便具有适当权限的用户可以执行此操作。为了使策略与安全的 RBAC 兼容,我们需要传递所需的参数,例如 ImageTarget,同时执行策略。建议将 cache_image 操作限制为仅供管理员使用。

另一种替代方案是,与其删除旧的周期性任务,新的 API 应该立即触发周期性任务来缓存所有图像,而不是一次只缓存一个指定的图像。此解决方案需要是线程安全的,因为可能存在现有的周期性任务已经在运行或新的周期性任务将在我们通过 API 触发时开始运行的情况。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

缓存将始终是本地化的到每个 Glance 节点,并且由于此命令将在远程执行,操作员需要知道负载均衡器后面的每个 Glance 节点的直接 URL。操作员需要将此直接 URL 提供给 glanceclient,以便客户端应该命中特定的节点以在该节点上触发即时缓存。

开发人员影响

实现

负责人

主要负责人

dansmith 或 abhishekk

其他贡献者

评审人

cyril-roelandt/rosmaita/jokke/pdeore/mrjoshi

工作项

  • 修改现有 API (PUT /v2/cache/{image_id})

  • 删除 ‘cache_prefetcher_interval’ 配置选项和相关的测试。

  • 修改文档,更新 API 参考

  • 缓存操作的 Tempest 覆盖

依赖项

测试

  • 所有新的缓存 API 都应使用 tempest 测试进行测试

文档影响

  • 需要更新 API 文档

  • 需要使用新信息更新缓存文档

参考资料