学会使用数据说话-分布式锁到底能多少并发?

作者 : 开心源码 本文共1692个字,预计阅读时间需要5分钟 发布时间: 2022-05-11 共72人阅读

程序员萌萌在浏览关于分布式锁的文章,忽然下面的话引起了萌萌的注意:

在锁操作的用户端打日志

获取锁:

T13:31:51.230redisname-lock:hsetnx

E13:31:51.230GetConnection10.X.X.X

T13:31:51.231redisname-lock:hsetnx

设置超时时间:

T13:31:51.230redisname-lock:hsetnx

E13:31:51.230GetConnection10.X.X.X

T13:31:51.231redisname-lock:hsetnx

释放锁:

T13:31:51.230redisname-unlock:hsetnx

E13:31:51.230GetConnection10.X.X.X

T13:31:51.231redisname-unlock:hsetnx

从上面数据能看到一个正常分布式锁操作,操作时间在1ms,由于是从用户端获取的,由于粒度只可以是毫秒级。再从服务端看看是什么情况。

上面显示了大于1ms的慢查询情况,能看到每秒几百个的QPS不会造成分布式锁本身的慢查询。耗时超过1ms的都是集群操作,分布式锁的lock和unlock操作时间都是us级。

????假如lock和unlock中间没有任何逻辑的理想情况下,同一个锁能支持每秒:

? ?1000ms/ (1ms的lock+1ms的设置超时+1ms的unlock)=333(个)

结论

分布式锁本身lock和unlock耗时是us级,在理想情况下大概可支持每秒1000个原子操作,300多个从分配到释放流程结束。

举个栗子??:

秒杀场景下,秒杀的产品有1000件。假如用了分布式锁,理想情况下能在1m内解决完所有的秒杀成功请求,其余请求直接返回秒杀结束。

既然秒杀都没有问题,一般情况下,分布式锁不会是性可以瓶颈。假如出现了性可以问题,首先先排查业务逻辑。

目录

1:一个线程里lock成功,unlock失败?

2:有哪些抓手能确定哪些逻辑耗时太多?

3:锁内部要避免的操作有哪些?

4:循环获取锁的时间间隔怎样算正当?

5:获取锁重试次数怎样算正当?

6:屡次获取锁失败起因有哪些?

7:加了分布式锁还出现了并发问题?

1:一个线程里lock成功,unlock失败?

Q: 日志里报了屡次的unlock失败,什么起因?

A: 之前的代码里try finally模式的unlock,能否lock成功都会unlock。

Q:加上了lock成功才unlock,还是有unlock失败?

A:这是锁住的逻辑耗时太多,超过了expire的时间,自动释放锁了。

2:有哪些抓手能确定哪些逻辑耗时太多?

Q: 日志能吗?

A: 目前的日志能找到有问题的traceId,看整个链路都进行了哪些解决,大概几步时间耗费,但是具体sql的耗时分析没有

Q:CAT监控能吗?

A:CAT监控能找到耗时多的几个请求,看到每条sql的耗时情况,超过5秒的sql都是需要注意的

3:锁内部要避免的操作有哪些?

Q:逻辑上的?

A:避免显式的和隐式的循环。如:.stream().

Q:性可以上的?

A:数据查询的条件能否建立了索引

4:循环获取锁的时间间隔怎样算正当?

A:获取锁与服务器通讯时间能忽略不计,在跨机房的情况下理论上也不超过2ms

所以锁能获取到的时间=一段分布式锁中间执行时间平均值

5:获取锁重试次数怎样算正当?

A:获取锁的重试次数理论上假如获取锁时间间隔正当的话,就与允许的同时扩容最大容器数接近,不大于最大容器数20%。

6:屡次获取锁失败起因有哪些?

A:假如不符合可获取到的时间间隔计算,则考虑能否特定场景下有耗时操作。具体可参考 3:锁内部要避免的操作有哪些?

7:加了分布式锁还出现了并发问题?

Q:锁获取失败是怎样解决的?

A:锁获取失败并没有按请求失败解决,而是在无锁状态下继续执行会引发并发问题。

Q:锁获取成功了还是出现并发问题?

A:执行太慢了,超过了expire的时间锁失效了。

简介:

一个有逻辑、有观点、有温度、有调性的技术公众号~

作者是一个有日本东京、美国硅谷工作经验,有百项技术发明专利,十一年程序媛

欢迎一起探究技术~

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 学会使用数据说话-分布式锁到底能多少并发?

发表回复