用户登录功能:说简单也困难
摘要:用户登录说起来只是一个很普通的功能,不过它的逻辑一点也不简单。
本文分享自华为云社区《性能分析之用户登录TPS低以及CPU被打满问题分析》,作者:zuozewei 。
用户登录说起来只是一个很普通的功能,不过它的逻辑一点也不简单。因为登录过程要对个人的信息进行对比验证,验证过程中又要调用相应的加密算法,而加密算法是对性能要求很高的一种功能。复杂的加密算法安全性高,但性能就差;不复杂的加密算法性能好,但安全性高,这是一个取舍的问题。
按照测试方案的基准场景的设计步骤,先压测这个接口的基准场景。
● 问题现象
如上图所示,这现象老明显了。
压测结果中的 TPS 平均才 25平均响应时间达到了 993 ms。
● 分析过程
从性能分析逻辑上来说,针对响应时间长的问题,首先要做的就是拆分时间。由于这个系统已经部署了 SkyWalking,用它看看时间主要消耗在了哪里。
看图中,Tomcat 的 SelfDuration 是最多的,也就是说时间几乎消耗在服务本身。
● 全局监控
首先查看下应用服务器的资源水位情况:
可以看到4C的CPU资源已经被耗光。
这里部署的是容器,先看下各容器资源使用情况:
可以看到资源主要被服务容器消耗了。
● 服务定向分析
首先进入服务容器查看下资源消耗情况:
在 SkyWaking 中又看不到完整的调用栈,考虑直接连到服务 Java 进程中看方法的时间消耗。这里用 Arthas 来跟踪一下。
查看当前最忙的前N个线程并打印堆栈:
这里为程序的业务代码。
于是 trace attemptAuthentication 这个方法。
接着trace authenticate 这个方法。
一层层跟踪下去,最终来到了这里:
既然这个 crypt_raw 方法耗时比较长,那就反编译源代码看看这一段是什么东西。
可以看到这里是一个加密算法 BCrypt,那么结论就很明显了 BCrypt 加密算法虽然安全性高,但性能差。
● demo验证
这里使用 SpringBoot 实现 MD5 加密和 BCrypt 加密的实例。
JMeter 并发20 MD5 加密结果:
JMeter 并发20 BCrypt 加密结果:
● 建议优化方向
这里解释一下,Bcrypt在加密时,每一次HASH出来的值是不同的,所以特别慢!
具体什么是 Bcrypt 算法,可以参考这篇文章:https://www.jianshu.com/p/2b131bfc2f10
分析到这里,优化方案其实比较明确了,那就是用更快的加密方式,或者去掉这个加密算法。
相关文章
- 一张图系列——为什么在DllMain里面创建了线程并Wait会卡死
- 华为云物联网高级攻城狮的4年配置中心实践分享
- 组合式应用新利器?SaaS新时代事件网格如何解决集成标准化问题
- 梳理数仓FI manager节点健康检查逻辑
- 一次简单易懂的多态重构实践,让你理解条件逻辑
- 三问三答,解传统企业敏捷转型担忧
- 云图说丨叮咚,您有一份短信通关攻略待查收
- 教你用ab命令进行并发与压力测试
- STM32+华为云IoTDA,带你设计一个属于自己的动态密码锁
- 独家下载!突破开源Redis,华为云十年自研内核修炼之路《企业级Redis技术与应用解读》重磅发布
- CVE-2022-22965 漏洞分析,安全问题早发现
- 解构华为云HE2E项目中的容器技术应用
- 华为云NFT云宝限量开抢,区块链技术为你的数字资产保驾护航
- SimpleDateFormat类的安全问题,这6个方案总有一个适合你
- 上海理工大学:巧用数字技术打响智慧抗疫信息战
- 要想推荐系统做的好,图技术少不了
- 坐实大数据资源调度框架之王,Yarn为何这么牛
- 云图说丨不同区块链之间如何跨链交互?
- 如何使用参数化查询提高Cypher查询的性能
- 从趋势到必选项,探讨企业数字化转型方式方法