跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 项目中什么场景需要用到分布式锁
未分類
30 12 月 2020

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

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

資深大佬 : SkyLine7 6

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

大佬有話說 (43)

  • 資深大佬 : ahsjs

    有竞争的时候

  • 主 資深大佬 : SkyLine7

    @ahsjs 能说的明白些吗

  • 資深大佬 : RedBeanIce

    多台服务器做同一件事情。要抢着用,
    那么用分布式锁,
    前面的人用完了你才可以进去,或者是前面的人用完了你就可以走了。

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

    用两台服务器部署,不用分布式锁,那么你的定时任务可能会跑两次,但是实际上你只需要跑一次。用分布式锁锁上以后,你的代码只会跑一次。(简单应用)

  • 資深大佬 : MinQ

    一般来说分布式锁跟负载均衡是一起出现的,如果有多个机器在同一时间会去做一样的事情,就需要锁
    例如负载均衡的情况下给用户发短信,用户短时间内请求了多次,第一次如果没有锁的话可能数据库里的标识没有被修改为已发送就被第二次读取了,这样用户就会收到 N 条短信

  • 主 資深大佬 : SkyLine7

    @RedBeanIce 谢谢

  • 主 資深大佬 : SkyLine7

    @MinQ 谢谢

  • 資深大佬 : carlclone

    多台机器争抢一个任务的执行权

  • 資深大佬 : redtea

    能用的都该用上,比如注册功能,需要先校验用户名是否存在才能插入数据库,单机用 synchronized 就能解决并发,但是有一天领导说要上负载均衡了,怎么办,等你再改代码加上分布式锁吗,这样子开发测试部署不知道要花多久的时间,本来复制拷贝一下就能部署的。

  • 主 資深大佬 : SkyLine7

    @redtea 老哥,意思是写操作都加上锁吗

  • 資深大佬 : redtea

    @SkyLine7 如果并发调用一个接口有问题,就该考虑加上分布式锁。

  • 資深大佬 : yisheyuanzhang

    集群环境用
    JVM 锁 synchronized 、Lockd 这些只对单个 jvm 环境内有效。
    只部署 1 台服务,jvm 锁能保证两个请求不并发处理
    如果同时部署多台服务,如果两个请求分别被发送到两个服务上,这时候 jvm 锁就不能限制了

  • 資深大佬 : kiracyan

    分布式锁 = 锁 + 分布式应用可访问

  • 資深大佬 : freebird1994

    最简单的幂等问题就可以用分布式所

  • 資深大佬 : tesguest123

    面试的时候

  • 資深大佬 : hwdef

    可以了解一些分布式项目中的锁,,,比如 etcd,比如 k8s,都在什么情况下加锁。

  • 資深大佬 : wudaye

    竞争资源的时候。同一个事情同一时刻只能有一个执行者在做,那这个事情的执行权就是要竞争的独一份的资源

  • 主 資深大佬 : SkyLine7

    @freebird1994 好的,谢谢

  • 主 資深大佬 : SkyLine7

    @wudaye 老哥,能举个实际的例子吗

  • 主 資深大佬 : SkyLine7

    @hwdef 好的,谢谢

  • 資深大佬 : catror

    这是在准备面试题?
    锁是用来解决并发问题的,分布式锁自然是解决分布式系统中的并发问题。
    比如分布式限流、幂等处理…光知道场景感觉也不够,你要理解为什么会出现这样的场景。

  • 資深大佬 : jorneyr

    我经历过的:
    1. 集群中视频、文档转换,同一个文件同时只有一个服务转,不要重复转,避免浪费资源
    2. 支持并行任务的作业系统,某个任务结束后,要修改所有后继任务的入度,执行可以开始执行的任务,也是用分布式锁保证同一个作业的原子性操作

  • 資深大佬 : jorneyr

    再补充一点,视频和文档转换了个,前端会请求预览某个视频和文档,没有转好的时候会发一条消息到 MQ,消息的消费者收到消息后进行转换,这个过程会产生同一个文档有多个请求转换的消息,所以用分布式锁保证同一个文件在集群中只会有一个服务在进行转换,因为转换是一个耗时任务,期间不会知道有多少个转换的消息。

  • 資深大佬 : hhyyd

    库存减扣、商品唯一编码生成、多系统从获取快递运单号

  • 資深大佬 : zr8657

    k8s 跑多份 pod,加锁自然要加分布式锁

  • 主 資深大佬 : SkyLine7

    @jorneyr 谢谢

  • 主 資深大佬 : SkyLine7

    @hhyyd 谢谢

  • 主 資深大佬 : SkyLine7

    @zr8657 我们还没用 k8s,谢谢

  • 主 資深大佬 : SkyLine7

    @catror 是呀 我现在连场景都很蒙蔽

  • 資深大佬 : anonydmer

    主,虽然你只做了一年的 CRUD,但是系统中没有遇到那种只要是并发操作就可能带来的问题?不应该吧,还是你们把这种问题忽略了?

  • 資深大佬 : leafre

    不要用分布式锁,串行化性能差,一般考虑其他解决方案

  • 資深大佬 : chennqqi755

    锁是解决资源竞争问题的,分布式锁就是解决分布式环境下多个程序竞争一个资源的问题。例如支付,购物,订单等共享独占资源

  • 主 資深大佬 : SkyLine7

    @anonydmer 忽略了 哎

  • 資深大佬 : serical

    比如微信支付提现, 一个商户账号 30 秒内只能让一个人提现

  • 資深大佬 : qq1009479218

    服务需要执行某个 job,但是服务被部署成多个实例(需要负载均衡嘛),但是这个 job 只能起一个线程去 run,就用到了所谓的分布式锁;多个线程需要去抢这个 job 去执行,就需要锁。在支持线程操作的语言里,锁就是锁,上升到服务层面(也就是加一层网络,线程分布在多机器上)就叫分布式锁了

  • 資深大佬 : pisc

    这种基础问题。。。千言万语一句话:找本系统的书来看,而不是来这里问,这里一般只能获取到一些零碎“启发性”的知识,如果没有专门学习过,很容易犯“自以为知道”的错误

  • 資深大佬 : mtrec

    微服务用得多 比如商城商品上新 需要更新商品系统会员系统仓储系统优惠系统等 每个系统又有自己的数据库 这时候就要分布式锁保证所有系统的数据库事务一致性

  • 資深大佬 : shanghai1998

    喜欢拆系统的人,比如 会员系统、订单 系统、支付系统,用户购买商品获得积分这个流程 就需要分布式锁

  • 主 資深大佬 : SkyLine7

    @mtrec 谢谢

  • 主 資深大佬 : SkyLine7

    @qq1009479218 谢谢

  • 主 資深大佬 : SkyLine7

    @serical 谢谢

  • 主 資深大佬 : SkyLine7

    @pisc 好的,老哥

  • 主 資深大佬 : SkyLine7

    @mtrec 谢谢

  • 主 資深大佬 : SkyLine7

    @shanghai1998 谢谢

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具