为存储驱动程序添加能力

https://blueprints.launchpad.net/glance/+spec/store-capabilities

此特性将根据其实现以及配置,启用存储驱动程序实例的静态和动态能力。后端存储的运行时状态也会影响容量。

此后,glance_store 库可以根据上层(例如 Glance)的请求,对存储执行适当的操作。例如,可以根据当前实现启用或禁用 Glance 的镜像添加功能。存储还会识别驱动程序是否可以重用于其处理的所有请求,或者因为它不是无状态的而必须为每个请求重新创建。

问题描述

存储驱动程序的能力会受到以下因素的影响

  1. 已连接后端存储的状态。

  2. 部署配置。

  3. 驱动程序代码的状态。

  4. 从技术上讲,其中一种能力是静态的,而另一种是动态的。

目前 glance_store 和 glance 还不使用这些能力。驱动程序没有一种方法来暴露其能力。另一方面,在存储的后端处理程序或客户端(例如 glance-{api,registry})中,没有通用的方法来检查存储驱动程序的这些通用操作。

目前我们观察到至少存在两种问题

  • 缺少与存储访问相关的操作的必要适用性检查,这会抑制 Glance 服务和 glance_store 库的可用性。

  • 很难以整洁的方式实现这种检查逻辑,包括对存储驱动程序的这些通用操作的通用检查例程以及对特定功能的检查。

提议的变更

  1. 需要更新现有驱动程序以暴露适当的能力。

    当前需要的存储能力列表。

    能力名称

    描述

    READ_ACCESS

    通用读取访问权限

    WRITE_ACCESS

    通用写入访问权限

    RW_ACCESS

    READ_ACCESS 和 WRITE_ACCESS

    READ_OFFSET

    从偏移量读取所有位(包含 READ_ACCESS)

    WRITE_OFFSET

    将所有位写入偏移量(包含 WRITE_ACCESS)

    RW_OFFSET

    READ_OFFSET 和 WRITE_OFFSET

    READ_CHUNK

    读取所需长度的位(包含 READ_ACCESS)

    WRITE_CHUNK

    写入所需长度的位(包含 WRITE_ACCESS)

    RW_CHUNK

    READ_CHUNK 和 WRITE_CHUNK

    READ_RANDOM

    READ_OFFSET 和 READ_CHUNK

    WRITE_RANDOM

    WRITE_OFFSET 和 WRITE_CHUNK

    RW_RANDOM

    RW_OFFSET 和 RW_CHUNK

    DRIVER_REUSABLE

    驱动程序是无状态的,并且可以安全地重用其实例

  2. 为存储驱动程序添加对这些通用操作的通用检查例程。

  3. 重构现有驱动程序以利用这些能力。

  4. 如果存储或驱动程序不是无状态的,则添加逻辑以重新创建驱动程序实例。

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

预计不会出现明显的性能下降。

原因是,对于每个存储操作(当前包括“get”、“delete”、“add”操作),都会触发一个简单的检查器函数,以钩子的形式出现。

其他部署者影响

无。

开发人员影响

实施 glance_store 库新驱动程序的开发人员需要了解这个概念。存储后端的静态和动态能力会影响他们的设计和实现。

所有更改均保持向后兼容性。

实现

负责人

主要负责人

zhiyan (lzy-dev)

评审人员

核心评审人

Nikhil Komawar (nikhil-komawar) Stuart McLaren (stuart-mcLaren)

工作项

依赖项

测试

必要的单元和功能测试用例,将添加到 glance_store 以及 Glance 中。

文档影响

参考资料

相应的变更