V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tomsun28
V2EX  ›  程序员

相差 170 倍,我都怀疑这个基准性能测试 demo 对不对了

  •  1
     
  •   tomsun28 ·
    tomsun28 · 2021-02-03 00:28:26 +08:00 · 3222 次点击
    这是一个创建于 1401 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前开发了一个面向 restful api 的认证鉴权框架 - sureness ,因为他在匹配链这块和 shiro,spring security 不一样没有用 ant 匹配,而是自己改进的一个字典匹配树,之前宣传的时候就说它性能不错但别人问一直没有真正性能测试过。

    然后这两天测试了,每个框架一个 demo,都是 springboot 底座提供些 api,再加上对应权限框架的保护,shiro 还好,和原生没有保护的情况性能差 2 倍,但是 spring security 就有点过分了,之前知道它慢,也看过一些大佬文章说它慢,但实际测下来,也太慢了吧,有点怀疑是我写的 demo 问题,按道理慢都是卡在了 ant 过滤链匹配这块,确实我加了 200 个 api ant 匹配链,但为啥 shiro 都不那么慢哎

    环境:2 cores, 8 GB xps

    下面是测试结果,tps 看 sureness 居然性能高 spring security 170 倍,搞得有点怀疑不敢宣传出去了

    benchmark

    benchmark 测试 demo 代码和步骤 - https://github.com/tomsun28/sureness-shiro-spring-security

    第 1 条附言  ·  2021-02-03 16:15:53 +08:00

    找到spring security的瓶颈了,这里感谢@tamer的思路, 是默认的密码加密解密器BCryptPasswordEncoder的锅,当我们将其换成md5后,性能大幅提高了,但由于其是security的默认加密器,且官方demo也是这样写 所以 sureness的速度性能是spring security的170倍是成立的😅😅

    BCryptPasswordEncoder 慢可见 https://stackoverflow.com/questions/51777464/why-is-spring-boot-security-basic-authentication-slow/51800271

    有怀疑之前是推广,那开始真正的推广🤣🤣。

    sureness是一个面向restful api,低配置,高性能,易扩展,无耦合的认证鉴权框架,很方便的使用,见之前发的文章 https://segmentfault.com/a/1190000039075245

    我们通过 基准性能测试 可以看出
    在使用框架默认配置的情况下,sureness的性能是shiro的160%,且shiro无法原生支持restful api,sureness的性能是spring security的17000%
    在将spring security的密码加密解密器更换为md5后,sureness的性能是spring security的 200%

    性能差距会随着匹配链的增加而进一步加大。

    仓库地址: https://github.com/tomsun28/sureness 欢迎大佬们使用star 弯腰超级感谢 🤑🤑🤑🤑🤑🤑

    8 条回复    2021-02-03 21:35:19 +08:00
    uselessVisitor
        1
    uselessVisitor  
       2021-02-03 08:16:02 +08:00
    有理由怀疑你在推广
    xuanbg
        2
    xuanbg  
       2021-02-03 08:50:22 +08:00
    spring security 本身性能虽然差,但也没这么差。FilterInvocationSecurityMetadataSource 的实现很关键,如果 getAttributes 方法每次都是读数据库的话,性能自然和 shiro 相比就没法看了。

    说实在的,我个人认为使用 spring security 没啥实质性的好处。不就一个鉴权吗,绕来绕去的不知道在干啥,还不如自己造个简单的轮子好使。
    encro
        3
    encro  
       2021-02-03 09:04:40 +08:00
    慢在哪里没分析不出来啊。

    所以你还是来做宣传的。

    就好比有的框架默认开通 file cache,有的开通 memory cache,
    你拿一个 file cache 和一个 memory cache 比,
    然后得出性能差一百倍的结论,
    其实两个框架可能只需要改一项配置,就能都支持 memory cache 。
    cheng6563
        4
    cheng6563  
       2021-02-03 09:26:40 +08:00
    @xuanbg 我也觉得 Spring Security 太复杂了,搞大半天配好,过了一个月就完全看不懂配了些啥。想加点功能也无从下手。
    tamer
        5
    tamer  
       2021-02-03 09:37:25 +08:00
    > 按道理慢都是卡在了 ant 过滤链匹配这块

    既然有这个思路, 搓 2 行代码, 就可以知道瓶颈是不是这块儿了吧

    记得 security 推荐使用的几个 encoder 的密码比对时间是固定的
    tomsun28
        6
    tomsun28  
    OP
       2021-02-03 10:32:29 +08:00
    @beichenhpy 😅😅可能写着写着有点像推广了

    @xuanbg 我也感觉不应该这么差 用户信息数据源那块我都是写的代码没有走文件或者数据库,同感 spring security 确实复杂了

    @encro 昨晚太晚没有仔细排查,因为这个 spring security demo 就是用的它的 starter 官方配置了 ant 链和账户,都走的内存,非常简单,所以会有疑惑为啥性能会这样

    @cheng6563 同感

    @tamer 嗯嗯今晚上搓点代码排查下,因为都走的用户和权限配置信息都走的内存,目前能考虑慢的点就是 ant 匹配链和您说的 encoder demo 使用的是 BCryptPasswordEncoder
    comcom
        7
    comcom  
       2021-02-03 18:22:15 +08:00 via Android
    一直在关注,加油 gogogo
    tomsun28
        8
    tomsun28  
    OP
       2021-02-03 21:35:19 +08:00
    @comcom 感谢 欢迎使用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5761 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:06 · PVG 11:06 · LAX 19:06 · JFK 22:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.