高楼的性能工程实战课
高楼
盾山科技 CEO,7DGroup 创始人
19172 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 35 讲
特别放送 (1讲)
结课测试 (1讲)
结束语 (1讲)
高楼的性能工程实战课
15
15
1.0x
00:00/00:00
登录|注册

13 | 用户登录:怎么判断线程中的Block原因?

你好,我是高楼。
这节课我们接着来“玩”一下用户登录。在第 10 讲的课程中,我们以登录功能为例做了一些分析,来说明基准场景中的一些要点。但是,我们还没有把它优化完,所以这节课还要接着来折腾它。
用户登录说起来只是一个很普通的功能,不过它的逻辑一点也不简单。因为登录过程要对个人的信息进行对比验证,验证过程中又要调用相应的加密算法,而加密算法是对性能要求很高的一种功能。复杂的加密算法安全性高,但性能就差;不复杂的加密算法性能好,但安全性低,这是一个取舍的问题。
另外,还有 Session 存储和同步。对于个大型的系统来说,不管你在哪个系统访问,在调用其他系统时如果需要验证身份就要同步 Session 信息,并且在做业务时,我们也要把相应的 Session 信息带上,不然就识别不了。
你看,登录功能实际上会涉及到很多的业务,它其实一点也不简单。所以,这节课我会带着你好好分析用户登录功能,并带你了解在压力过程中业务逻辑链路和整体 TPS 之间的关系。同时,也希望你能学会判断线程中的 BLOCKED 原因。

修改加密算法

还记得在第 10 讲中,我们在基准场景中对登录业务的测试结果吗?在 10 个压力线程下,TPS 达到了 100 左右。
同时,在第 10中,我们发现了加密算法 BCrypt 效率低之后,讨论了两种优化方式:一种是用更快的加密方式,另一种是去掉这个加密算法。当时,我选择把加密算法 BCrypt 直接去掉。在这节课中,我们来试试第一种方式,把它改为 MD5,具体有两个动作:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了用户登录功能的性能优化过程,重点关注了加密算法选择和优化、缓存对性能的影响、业务逻辑链路分析以及整体TPS提升。作者通过改变加密算法和将用户加载到Redis中来提高性能,优化了缓存和登录逻辑,进一步提高了TPS。通过分析架构图和拆分时间,作者找出了响应时间消耗的瓶颈点,并进行了全局监控和定向监控。最后,作者从硬件资源和业务逻辑入手,优化了登录逻辑,提高了性能。整个过程展现了作者对性能优化的深入思考和分析方法,为读者提供了一种切实可行的优化思路和方法。文章通过具体案例和技术细节,为读者呈现了性能优化的实际操作过程,对于需要进行类似优化的技术人员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高楼的性能工程实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 继贤
    老师,堆栈分析工具用的是哪个?

    作者回复: 我这里用的是IBM Thread and Monitor Dump Analyzer for Java。你也可以用其他工具,直接用文本看也是一样的。

    2021-04-19
    5
  • 涵涵
    基准测试中将缓存全部直接加载,那容量测试中也会将缓存直接全部加载吗?直接加载缓存不是对测试结果有影响吗?

    作者回复: 这部分在生产环境中也是应该先加载的。这也是预热的一个步骤。

    2021-08-12
    2
  • 浅浅
    我们抓两段栈出来看一下,找一下锁之间的关系: 老师,这个是用什么抓取的呀?

    作者回复: 这个用jstack、jvisualvm、spring boot admin、arthas,都可以抓呀。这个在前面的工具中已经罗列了哇。

    2021-04-25
    2
  • jy
    老师,请问下,压测都是发请求到网关?为啥不是nginx呢?

    作者回复: 都是发送到网关? 并没有说都发请求到网关呀。在k8s的架构中,如果配置了ngins-ingress,这是在每个node之上的。 如果在架构中网关是集群的并且前面也有nginx,就应该发到nginx上。

    2021-07-29
    1
  • 公瑾
    想抓 BLOCKED 状态的线程,并且线程描述是“Waiting on monitor” --老师,是不是有阻塞的时候,先看block的线程是等待哪些锁,然后再去Waiting on monitor里查看是哪些线程持有这些锁(另外runnale的需要查看吗?)

    作者回复: 对,就是查谁locked了锁。

    2021-06-17
    1
  • udsmdd
    老师,服务的消耗时间是怎么算。 

    作者回复: apm里就可以看到,不用算哇。

    2021-06-15
    1
  • 街角的风铃
    有项目源代码地址吗?,我想部署一下

    作者回复: 在第二个专栏和第三个专栏的环境搭建文章中有链接。

    2022-09-14归属地:北京
    3
  • *回眸*·wdlcoke
    老师: 怎么加载缓存?

    作者回复: 啥意思?是说在缓存中如何加载数据?还是说在代码中如何添加读取缓存的代码?

    2021-12-30
  • wfw123
    老师 打印栈的时候,是在脚本运行时候还是运行结束后呢

    作者回复: 运动时。

    2021-07-10
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部