项目中什么场景需要用到分布式锁

2020-12-22 10:25:49 +08:00
 SkyLine7

开发了 1 年多,一直做的是管理系统的 curd,没有用到过锁,没有接触过电商项目,想请教各位 v 友,锁是什么场景需要用到的?怎么判断一个方法要不要加锁?是加 jvm 锁还是分布式锁?

5344 次点击
所在节点    Java
43 条回复
ahsjs
2020-12-22 10:29:43 +08:00
有竞争的时候
SkyLine7
2020-12-22 10:33:30 +08:00
@ahsjs 能说的明白些吗
RedBeanIce
2020-12-22 10:35:39 +08:00
多台服务器做同一件事情。要抢着用,
那么用分布式锁,
前面的人用完了你才可以进去,或者是前面的人用完了你就可以走了。

简单的来说,你可以写一个项目,项目写一个定时任务,每天 10 点 34 分跑一次发一次右键,

用两台服务器部署,不用分布式锁,那么你的定时任务可能会跑两次,但是实际上你只需要跑一次。用分布式锁锁上以后,你的代码只会跑一次。(简单应用)
MinQ
2020-12-22 10:37:24 +08:00
一般来说分布式锁跟负载均衡是一起出现的,如果有多个机器在同一时间会去做一样的事情,就需要锁
例如负载均衡的情况下给用户发短信,用户短时间内请求了多次,第一次如果没有锁的话可能数据库里的标识没有被修改为已发送就被第二次读取了,这样用户就会收到 N 条短信
SkyLine7
2020-12-22 10:39:37 +08:00
@RedBeanIce 谢谢
SkyLine7
2020-12-22 10:39:48 +08:00
@MinQ 谢谢
carlclone
2020-12-22 10:53:57 +08:00
多台机器争抢一个任务的执行权
redtea
2020-12-22 11:11:25 +08:00
能用的都该用上,比如注册功能,需要先校验用户名是否存在才能插入数据库,单机用 synchronized 就能解决并发,但是有一天领导说要上负载均衡了,怎么办,等你再改代码加上分布式锁吗,这样子开发测试部署不知道要花多久的时间,本来复制拷贝一下就能部署的。
SkyLine7
2020-12-22 11:18:21 +08:00
@redtea 老哥,意思是写操作都加上锁吗
redtea
2020-12-22 11:28:42 +08:00
@SkyLine7 如果并发调用一个接口有问题,就该考虑加上分布式锁。
yisheyuanzhang
2020-12-22 11:30:14 +08:00
集群环境用
JVM 锁 synchronized 、Lockd 这些只对单个 jvm 环境内有效。
只部署 1 台服务,jvm 锁能保证两个请求不并发处理
如果同时部署多台服务,如果两个请求分别被发送到两个服务上,这时候 jvm 锁就不能限制了
kiracyan
2020-12-22 11:40:10 +08:00
分布式锁 = 锁 + 分布式应用可访问
freebird1994
2020-12-22 11:54:06 +08:00
最简单的幂等问题就可以用分布式所
tesguest123
2020-12-22 11:58:15 +08:00
面试的时候
hwdef
2020-12-22 12:35:45 +08:00
可以了解一些分布式项目中的锁,,,比如 etcd,比如 k8s,都在什么情况下加锁。
wudaye
2020-12-22 13:01:39 +08:00
竞争资源的时候。同一个事情同一时刻只能有一个执行者在做,那这个事情的执行权就是要竞争的独一份的资源
SkyLine7
2020-12-22 13:04:23 +08:00
@freebird1994 好的,谢谢
SkyLine7
2020-12-22 13:04:45 +08:00
@wudaye 老哥,能举个实际的例子吗
SkyLine7
2020-12-22 13:23:08 +08:00
@hwdef 好的,谢谢
catror
2020-12-22 13:23:21 +08:00
这是在准备面试题?
锁是用来解决并发问题的,分布式锁自然是解决分布式系统中的并发问题。
比如分布式限流、幂等处理…光知道场景感觉也不够,你要理解为什么会出现这样的场景。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/737742

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX