协商版本客户端缓存¶
https://bugs.launchpad.net/ironic/+bug/1526411
此规范增加了 ironicclient 与 ironic 服务器之间缓存协商版本的支持。这补充了 Kilo 版本中批准的 ‘api 微版本’ 规范[0]。
问题描述¶
当 ironicclient 与 ironic 服务器通信时,可能存在支持的 API 版本不匹配的情况。客户端和服务器协商一个用于通信的版本,但由于 ironicclient 可以用作用户交互式客户端,因此每次命令行调用都会重复此协商过程。
对于 ironicclient 通信的每个 ironic 服务器,缓存协商的通信版本将很有用,这样客户端和服务器之间的每次对话都不需要重新协商。
此版本缓存需要是针对每个用户的,针对每个 ironic 服务器(主机、网络端口对特定),并且需要有时间限制(例如 5 分钟),以便客户端或服务器的任何未来升级都可以受益于支持更新的可用版本。
提议的变更¶
建议的实现是在 ironicclient 和 ironic 服务器之间,在本地文件存储中缓存协商的版本信息,供未来 ironicclient 调用使用。
此信息将在特定时间段后缓存,之后将失效并被忽略。
具体来说,我们建议
使用 dogpile.cache[1] 缓存系统,这是一个预先存在的库,已经包含在全局需求中[2]。它目前由 os-client-config[3] 使用,而 os-client-config 又被 openstackclient[4] 使用。
使用 appdirs[5] 提供正确的位置,将缓存信息存储在本地文件存储中
使用 ironic-server:network-port 对(例如 ‘example.com:1234’)索引版本信息,以便在同一 IP 地址上运行的多个 ironic 服务器将为调用 python-ironicclient 的每个用户独立缓存。
为每个 ironic 服务器设置 5 分钟的默认缓存版本信息时间段
将版本信息存储在已知、标准化、本地文件存储位置意味着,如果用户愿意,他们可以手动删除缓存的版本信息,从而触发重新协商客户端和服务器之间使用的版本。
备选方案¶
提出了一种替代的文件解决方案[6],但为了使用 dogpile.cache 而被拒绝。
在代码审查[9]中提出了转向 dogpile.cache 的建议,并在 IRC 中进行了讨论[8]。
使用 dogpile.cache 的理由包括:与其他在 OpenStack 中使用的文件缓存库的通用性,以及使用经过测试的通用库通常意味着更少的错误。
数据模型影响¶
无
状态机影响¶
无
REST API 影响¶
无
客户端 (CLI) 影响¶
此规范仅影响 python-ironicclient,不影响 ironic 服务器。
RPC API 影响¶
无
驱动程序 API 影响¶
无
Nova 驱动程序影响¶
无
Ramdisk 影响¶
N/A
安全影响¶
无
其他最终用户影响¶
无
可扩展性影响¶
此更改可能会减少客户端和服务器之间的网络流量,从而有助于可扩展性。
性能影响¶
此更改可能会减少客户端和服务器之间的网络流量,从而改善从向 ironic 发出请求到接收响应之间的延迟。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
mrda - Michael Davies <michael@the-davies.net>
工作项¶
此规范的实现已经开始 - 参见 [7]
依赖项¶
无
测试¶
将提供单元测试来验证此解决方案
升级和向后兼容性¶
无
文档影响¶
无
参考资料¶
[0] API 微版本规范:https://specs.openstack.org/openstack/ironic-specs/specs/kilo/api-microversions.html
[1] dogpile.cache 的文档可以在这里找到:https://dogpilecache.readthedocs.org/en/latest/
[2] dogpile.cache 已经在 https://github.com/openstack/requirements/blob/master/global-requirements.txt 中指定
[5] appdirs 的文档可以在这里找到:https://pypi.ac.cn/project/appdirs
[6] 原始自定义文件缓存解决方案:https://review.opendev.org/#/c/173674/1/
[7] 此规范提出时的实现状态:https://review.opendev.org/#/c/173674/19