提升角色分配 API 性能

bp list-role-assignments-performance

从哈瓦那版本开始,keystone 提供了一个 API 用于列出系统中所有现有的角色分配。然而,继承和组分配的扩展在控制器级别以一种低效的方式进行。

问题描述

对返回的角色分配列表进行过滤也在控制器级别进行,在从调用管理器和驱动程序级别获取系统上的所有可用实体之后,这非常低效。这是此变更提案解决的第一个问题。

第二个解决的问题是继承和组角色分配的扩展,这些扩展在控制器级别进行,而应该放在管理器级别,因为管理器是放置额外业务逻辑的级别。

虽然本规范没有明确说明,但如果在管理器级别提供一个考虑过滤和继承的角色分配列表方法,将允许许多现有的管理器方法使用它,而不是像今天这样重复继承和组处理逻辑。

提议的变更

基本上,提出了三个主要变更

  1. 将提供的过滤器从控制器传播到管理器和驱动程序级别;

  2. 使后端驱动程序在执行列出角色分配查询时考虑过滤;

  3. 将继承和组角色分配扩展的代码从控制器移动到管理器级别。

为了对变更后操作流程有一个全局的了解,请考虑以下操作顺序

  1. 控制器验证并传递提供的过滤器到管理器级别;

  2. 管理器检查是否使用了 effective 选项,然后向驱动程序发出高性能的请求;

  3. 驱动程序返回过滤后的角色分配列表;

  4. 如果在 effective 模式下,管理器扩展继承和组角色分配,然后返回结果列表;

  5. 控制器格式化实体列表并返回 API 响应。

备选方案

安全影响

通知影响

其他最终用户影响

性能影响

列出角色分配 API 的性能将受到积极影响。

在内存使用方面,由于只有所需的数据才会从驱动程序传输到管理器级别,因此在提供按属性过滤的情况下,内存使用量将显著减少。

关于计算量,由于管理器只会扩展与提供的过滤器匹配的继承和组角色分配,因此计算量也将显著减少。

其他部署者影响

开发人员影响

分配管理器的角色分配列表方法将成为查询给定用户或组的角色分配的唯一入口点。它将特别用于颁发令牌,而令牌实际上使用替代方法来计算有效的角色分配。

实现

负责人

主要负责人

  • Samuel de Medeiros Queiroz (samueldmq)

其他贡献者

  • Henry Nash (henrynash)

  • Rodrigo Duarte Sousa (rodrigods)

工作项

  • 为了确保当前的 behavior 不会被提议的重构改变

    • 实现并测试过滤器组合的限制;

    • 创建一个一致的测试套件,以断言组合可用过滤器后的结果。

  • 关于重构的实现

    • 将过滤器传递到驱动程序级别并仅返回请求的角色分配;

    • 将继承和组角色分配扩展从控制器迁移到管理器。

依赖项

文档影响

参考资料

实现此规范的补丁正在审查中,可以在以下链接中找到。