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

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

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

5615 次点击
所在节点    Java
43 条回复
jorneyr
2020-12-22 13:38:27 +08:00
我经历过的:
1. 集群中视频、文档转换,同一个文件同时只有一个服务转,不要重复转,避免浪费资源
2. 支持并行任务的作业系统,某个任务结束后,要修改所有后继任务的入度,执行可以开始执行的任务,也是用分布式锁保证同一个作业的原子性操作
jorneyr
2020-12-22 13:42:55 +08:00
再补充一点,视频和文档转换了个,前端会请求预览某个视频和文档,没有转好的时候会发一条消息到 MQ,消息的消费者收到消息后进行转换,这个过程会产生同一个文档有多个请求转换的消息,所以用分布式锁保证同一个文件在集群中只会有一个服务在进行转换,因为转换是一个耗时任务,期间不会知道有多少个转换的消息。
hhyyd
2020-12-22 14:18:32 +08:00
库存减扣、商品唯一编码生成、多系统从获取快递运单号
zr8657
2020-12-22 14:35:05 +08:00
k8s 跑多份 pod,加锁自然要加分布式锁
SkyLine7
2020-12-22 14:44:11 +08:00
@jorneyr 谢谢
SkyLine7
2020-12-22 14:44:28 +08:00
@hhyyd 谢谢
SkyLine7
2020-12-22 14:44:51 +08:00
@zr8657 我们还没用 k8s,谢谢
SkyLine7
2020-12-22 14:45:21 +08:00
@catror 是呀 我现在连场景都很蒙蔽
anonydmer
2020-12-22 14:58:02 +08:00
楼主,虽然你只做了一年的 CRUD,但是系统中没有遇到那种只要是并发操作就可能带来的问题?不应该吧,还是你们把这种问题忽略了?
leafre
2020-12-22 15:09:15 +08:00
不要用分布式锁,串行化性能差,一般考虑其他解决方案
chennqqi755
2020-12-22 16:05:35 +08:00
锁是解决资源竞争问题的,分布式锁就是解决分布式环境下多个程序竞争一个资源的问题。例如支付,购物,订单等共享独占资源
SkyLine7
2020-12-22 16:10:50 +08:00
@anonydmer 忽略了 哎
serical
2020-12-22 17:18:35 +08:00
比如微信支付提现, 一个商户账号 30 秒内只能让一个人提现
qq1009479218
2020-12-22 18:14:12 +08:00
服务需要执行某个 job,但是服务被部署成多个实例(需要负载均衡嘛),但是这个 job 只能起一个线程去 run,就用到了所谓的分布式锁;多个线程需要去抢这个 job 去执行,就需要锁。在支持线程操作的语言里,锁就是锁,上升到服务层面(也就是加一层网络,线程分布在多机器上)就叫分布式锁了
pisc
2020-12-22 19:42:00 +08:00
这种基础问题。。。千言万语一句话:找本系统的书来看,而不是来这里问,这里一般只能获取到一些零碎“启发性”的知识,如果没有专门学习过,很容易犯“自以为知道”的错误
mtrec
2020-12-22 21:25:09 +08:00
微服务用得多 比如商城商品上新 需要更新商品系统会员系统仓储系统优惠系统等 每个系统又有自己的数据库 这时候就要分布式锁保证所有系统的数据库事务一致性
C603H6r18Q1mSP9N
2020-12-22 21:31:41 +08:00
喜欢拆系统的人,比如 会员系统、订单 系统、支付系统,用户购买商品获得积分这个流程 就需要分布式锁
SkyLine7
2020-12-23 13:45:59 +08:00
@mtrec 谢谢
SkyLine7
2020-12-23 13:46:14 +08:00
@qq1009479218 谢谢
SkyLine7
2020-12-23 13:46:30 +08:00
@serical 谢谢

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

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

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

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

© 2021 V2EX