首页 新闻 会员 周边

如何复现普通jvm锁在分布式环境中失效的问题

0
悬赏园豆:20 [已解决问题] 解决于 2022-12-16 15:51

都知道普通的jvm锁,无法锁住跨jvm的线程,但是如何复现这个现象呢?
我现在用单体zookeeper进行dubbo远程调用,发现三个dubbo消费者(tomcat:8080,8081,8082)发送的请求最终都被dubbo抢走了,进入provider方的线程名都是:ip+dubbo-common-thread-x,所以又变成了单进程多线程,我用的是jmeter同时调用3个端口的请求。
我想学习一下为什么要引入分布式锁,但是一直无法复现jvm锁失效的现象,求各位大佬赐一个demo 😃

没有阑尾的主页 没有阑尾 | 初学一级 | 园豆:190
提问于:2022-12-16 14:31
< >
分享
最佳答案
0

引入负载均衡, tomcat(win):8080,8081部署类似订单的模块集群,tomcat(linux): 8082,8083部署类似库存的模块集群,当负载均衡将多个请求分别通过8080->8082
8080->8083
8081->8082
8081->8083四种路径进行请求时,库存模块中的锁是无法锁住多进程多线程的,所以此时必须把“查库存下订单”这个操作进行加锁,这才是引入分布式锁的原因

没有阑尾 | 初学一级 |园豆:190 | 2022-12-16 15:49

很棒!

快乐的凡人721 | 园豆:3922 (老鸟四级) | 2022-12-16 16:11
其他回答(1)
1

Redis设置一个key,数字。
开两个以上JVM,每个把这个key加1W次1,检查结果:是不是符合预期。
加了分布式锁又会怎样呢。

这里的 redis的一个key,也可以用zookeeper 中的 一个 node 替代吧?

收获园豆:20
快乐的凡人721 | 园豆:3922 (老鸟四级) | 2022-12-16 15:34

我想复现的是怎么让synchronized失效

支持(0) 反对(0) 没有阑尾 | 园豆:190 (初学一级) | 2022-12-16 15:38

感谢回复

支持(0) 反对(0) 没有阑尾 | 园豆:190 (初学一级) | 2022-12-16 15:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册