27 | 解决一个互斥问题,系统并发用户数提升了10倍!
尉刚强
你好,我是尉刚强。
互斥锁是实现并发场景下业务操作原子性、解决互斥访问问题的有效手段之一,由于它的使用方式相对比较简单和安全,所以不论是在互联网的分布式系统中,还是在嵌入式并发场景下,应用都比较广泛。
但是,如果互斥锁的选择和使用不当,就很可能成为系统的性能瓶颈之一,所以合理优化互斥锁,就成为了系统性能优化的一个重要手段。
那么在今天的课程中,我就会给你分享一个互联网场景下使用互斥锁优化的案例,按照优化前的软件实现、性能瓶颈分析、优化解决方案的思路,带你剖析我是通过什么样的方法优化业务中的互斥锁,以及是如何提升业务 RPS(Requests per second,请求吞吐量)性能指标 10 倍以上的,从而帮助你全面地了解分析与优化互斥锁的详细过程。
这样,通过学习这个性能优化案例,你在业务中就可以准确识别出哪些场景下的互斥锁可以优化掉,而哪些场景下不可以。并且你还会掌握一种手动实现事务的机制(支持业务操作回滚机制),来替代业务中互斥锁的手段,进一步来帮助优化提升软件的性能。
那接下来我们就先看看,在该案例中,业务优化前的实现是怎么样的,以及它都存在什么性能问题。
优化前的业务实现为什么会有性能问题?
这个性能优化案例的业务场景是这样的:用户给在线表单提交一条记录,在这条记录中会包含很多个字段内容,其中有些字段在插入时有一个规则要求,即不能与已有的字段值重复。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了在互联网场景下的互斥锁优化案例,重点讨论了互斥锁对最大请求吞吐量的影响以及优化方案。原业务系统中使用Redis锁来实现字段插入值不重复规则的检测,但随着系统规模增大,出现了并发请求吞吐量暴增的情况,导致性能问题。文章通过公式计算出,加锁的计算逻辑执行开销为30ms左右时,最大请求吞吐量仅为30RPS左右。因此,提升系统性能成为关键问题。文章提出了手动实现事务机制来优化掉业务代码中的互斥锁,从而提升请求吞吐量的性能。通过绑定操作组合的原子性和使用Redis的Pipeline机制,成功实现了性能提升超过10倍的目标,将最大请求吞吐量从30RPS提升到了300RPS左右。文章强调了分析同步互斥对性能的影响以及优化同步互斥的实现来提升性能的方法,为读者提供了实用的性能优化思路。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能优化高手课》,新⼈⾸单¥59
《性能优化高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(4)
- 最新
- 精选
- 杨统还有一个悲观锁2021-08-191
- 公号-技术夜未眠原来的 Redis 互斥锁主要是为了实现“字段不重复检测”和“字段的插入操作”的原子性,而在手动实现事务机制之后,我们就可以把这两步操作放到开始处执行,然后使用 Redis 的 Pipeline 机制保证这两步操作组合的原子性,从而不会被其他 Redis 操作干扰到。 请问,老师这块怎么理解? 如何基于Pipeline 机制保证实现数据库的查询和插入两个操作组合的原子性了?2021-08-05
- Frank“我们就可以把这两步操作放到开始处执行,然后使用 Redis 的 Pipeline 机制保证这两步操作组合的原子性,从而不会被其他 Redis 操作干扰到”。这句话的意思是“字段不重复检测”和“字段的插入操作”都使用pipe机制发送到Redis操作吗,原文写的是数据库操作,这如何理解呢?2021-08-04
- tongzh类似于乐观锁?2021-07-21
收起评论