我的Google Summer of Code程序的任务是提高角色策略插件的性能。角色策略插件的性能问题已在Jenkins JIRA上多次报告。由于有大量的角色和复杂的正则表达式,在Web UI上可以看到很大的速度减慢。甚至在GSoC启动之前,就有很多补丁试图提高插件的性能(通过必威国际有限公司迪潘什纳加利亚和其他人)。
当时,没有可靠的方法来衡量性能的改进框架用于在Jenkins插件上运行微基准测试。使用该框架的基准测试被必威国际有限公司添加到角色策略插件查找插件的性能关键部分,并测量更改的改进。这篇博文总结了所做的更改和衡量的性能改进。
缓存匹配角色
对角色策略插件进行了几项重大更改以提高其性能。首先,我们开始收集匹配给定项目名称的角色。版本2.12之前的角色策略插件用于为其收到的每个权限检查请求中的每个角色运行正则表达式。将生成的角色集存储在内存中可以大大提高性能,并避免项目名称与正则表达式的重复匹配。为了使插件安全地工作,每当对角色进行任何更新时,我们都会使缓存失效。
在这一变化之后,我们能够观察到高达3300%的性能改进。这些改进是使用JMH可视化仪.

GitHub上的pull请求提供了更多信息:https://github.com/必威国际有限公司jenkinsci/role-strategy-plugin/pull/81
加载插件时计算隐含权限
必威国际有限公司Jenkins的权限模型允许一个权限暗示其他权限。在进行权限检查时,我们需要检查用户是否具有暗示此权限的任何权限。对于角色策略中包含的每个权限检查请求,它都用来计算所有暗示权限。为了避免这种情况,我们现在计算和当插件加载时,存储对Jenkins系统中每个权限的暗示权限。
在这两项更改之后,我们能够体验到高达10000%的改进。基准测试结果显示它更好:

有关此更改的更多信息,请访问GitHub pull请求:https://github.com/必威国际有限公司jenkinsci/role-strategy-plugin/pull/83
这两个更改都集成到了角色策略插件中,可以从版本开始体验改进2.13.
链接和反馈
我很乐意听取您的意见和建议。请随时通过以下两种方式与我联系:角色策略插件Gitter聊天或者通过必威国际有限公司詹金斯开发者邮件列表.