相差 170 倍,我都怀疑这个基准性能测试 demo 对不对了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
tomsun28
V2EX    程序员

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

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

    之前开发了一个面向 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
    zm8m93Q1e5otOC69
        1
    zm8m93Q1e5otOC69  
       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     Solana     5733 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 03:10 PVG 11:10 LAX 19:10 JFK 22:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86