用户登录功能:说简单也困难
摘要:用户登录说起来只是一个很普通的功能,不过它的逻辑一点也不简单。
本文分享自华为云社区《性能分析之用户登录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
分析到这里,优化方案其实比较明确了,那就是用更快的加密方式,或者去掉这个加密算法。
点击关注,第一时间了解华为云新鲜技术~
用户登录功能:说简单也困难相关推荐
- php mysql用户登录_php mysql实现用户登录功能的代码示例
接着上次的php mysql添加用户的功能代码,今天来学习下php实现用户登录与注销的功能,通过跟踪session会话来保存用户的登陆状态. 1,登录页面 login.php 用户登录_www.# 用 ...
- PHP用户登录功能实现
PHP用户登录功能实现 设计数据库连接,简单查询,表单提交,直接上代码,大家很容易明白. 我建了一个很简单的数据库,表单包括用户名,ID,密码. 用户登录界面 <html><head ...
- 如何设计安全的用户登录功能
用户登录功能是Web应用系统具备的最基本的功能,关系到用户数据和应用系统数据的安全,设计一个安全的用户登录功能,涉及到以下几个方面的内容. (一) 老生常谈--口令 1. 口令长度与复杂度限制 限制用 ...
- mysql flask-login_Flask框架通过Flask_login实现用户登录功能示例
本文实例讲述了Flask框架通过Flask_login实现用户登录功能.分享给大家供大家参考,具体如下: 通过Flask_Login实现用户验证登录,并通过login_required装饰器来判断用户 ...
- [转]你会做Web上的用户登录功能吗?
Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...
- java 记录用户_JavaWeb学习记录(六)——用户登录功能
使用JDBC.spring框架.servlet实现一个简单的用户登录功能. 一.mySql数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------- ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)--创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)--使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- 【软件测试】:“用户登录”功能测试用例设计方法
谈谈登录测试 可能你会说,"用户登录"这个测试对象也有点太简单了吧,我只要找一个用户,让他在界面上输入用户名和密码,然后点击"确 认"按钮,验证一下是否登录成功 ...
- 【笑小枫的SpringBoot系列】【九】SpringBoot用户登录功能实现
关于本文 其实用户登录拦截的这块不想这么早写,加个登录后面好多东西就要考虑登录状态了,我其实想把这个系列写成非必要关系,解耦性比较强的系列.但是,写完redis,总是感觉登录是对它最简单的实践,那就加 ...
- 实现Web上的用户登录功能
https://coolshell.cn/articles/5353.html Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做 ...
最新文章
- Linux企业运维人员最常用192个命令汇总
- Dizzy Cows(拓扑)
- 2019ICPC(南京) - Holy Grail(最短路)
- 1936年发表理想计算机的论文,科学网—图灵1936年论文解读(1):可计算性 - 柳渝的博文...
- python中while。。。。else的用法
- Sony MZ-RH1 Hi-MD
- 计算机网络——计算机网络知识脑图
- 笔记本计算机bios设置,笔记本怎么进入bios设置【方法步骤】
- c语言键盘连续双击程序,“到处乱跑”的光标!简单的C语言程序: 在室友的计算机上尝试!...
- c语言逻辑运算符两侧运算对象,逻辑运算符两侧运算对象的数据类型是什么?...
- iphone数据线连不上Mac
- 【单目3D目标检测】MonoFlex论文精读与代码解析
- TPC-H系列---2---TPC-H表结构及表之间的关系
- 扑克牌游戏(Java实现)
- 关于使用深度学习进行三维点云几何压缩
- 程序员是呆在一个公司等涨工资好,还是跳槽涨工资好?
- amd超频软件LINUX,AMD官方超频工具下载_AMD OverDrive 超频工具-PChome下载中心
- 九章算法高频算法题 题解
- 设置div table 等元素高度宽度百分之一百 100% 无效解决办法...
- 优优聚电商:电商运营的日常工作
热门文章
- :继续教育学习助手_我们自己做:教育的开放组织
- CSS两栏布局之右栏布局
- es6 next()、throw()、return() 的共同点
- CAN笔记(3) 错误状态
- dll domodal运行时异常_软件运行异常时的多种排查思路与方法
- iptables oracle策略,利用iptables防火墙保护Oracle数据库
- 线段树区改区查标记永久化板子
- Python_目录的简单操作(新建/查看/删除)
- 【重要】ionic和Angular的安装步骤
- 微信坐标转换百度坐标