在分布式系统中,分布式锁被广泛用于共享资源互斥,Master选主等,然而,使用分布式锁使用过程中,需要注意以下一些坑:

分布式锁正确性的坑

首先,分布式锁从协议上是正确的, 这里有一个假设条件是分布式锁的客户端和服务端的CPU时钟运转频率是一致的,或者相差很小。这样才能保证server端不会比client先感知到丢锁事件发生,造成锁的正确性被破坏。

图1



其次,对于基于心跳机制实现的分布式锁,丢锁事件依赖于心跳异常来感知。异常事件可以通过回调函数来通知,也可以通过轮询心跳健康来判断是否发生丢锁。 但不论哪种实现,当丢锁事件发生时,假设对于互斥区的操作已经被发出(如网络延迟, FullGC事件),不可被撤回。那么就存在多个client,同时对互斥区进行操作的风险,如图1所示。 所以,负责互斥区的数据系统一定要有防护措施,能够避免这个情况,拒绝丢锁的进程仍然可以操作互斥区。 可以通过ConditionalUpdate或者基于互斥区版本递增的方法来进行预防。

图2

基于互斥区版本号来预防的方法可以参考: https://github.com/DistributedComponents/disel/wiki/Lease-based-Lock-Protocol

分布式锁使用注意事项相关推荐

  1. Java分布式锁看这篇就够了,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  2. 分布式锁的使用与注意事项

    此文是2021年第一篇博客,计划每2周写一篇博客. 分布式锁的使用与注意事项 分布式锁介绍 最近项目需要用到分布式锁,在网上看了挺多写分布式锁的文章,于是打算写一篇关于分布式锁的文章. 单机的服务不需 ...

  3. 通过Redis实现分布式锁

    分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁的实现:如果不同的系统或同一系统的不同主机间共享某一资源时,往往需要通过互斥来防止彼此干扰,以此来保证一致性. 分布式锁需要解决的问题 互 ...

  4. redis 分布式锁 看门狗_漫谈分布式锁之Redis实现

    笔耕墨耘,深研术道. 01写在前面Redis是一个高性能的内存数据库,常用于数据库.缓存和消息中间件.它提供了丰富的数据结构,更适合各种业务场景:基于AP模型,Redis保证了其高可用和高性能. 本文 ...

  5. redis使用sysc超时_基于redis的分布式锁实现

    随着业务越来越复杂,应用服务都会朝着分布式.集群方向部署,而分布式CAP原则告诉我们,Consistency(一致性). Availability(可用性).Partition tolerance(分 ...

  6. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁

    1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...

  7. 分布式锁之Redis6+Lua脚本实现原生分布式锁

    文章目录 简介 设计分布式锁应该考虑的东⻄ 基于Redis实现分布式锁 总结 解决解锁的原子性 代码实现 遗留⼀个问题 简介 分布式锁核⼼知识介绍和注意事项 背景 就是保证同⼀时间只有⼀个客户端可以对 ...

  8. 分布式锁 动态代理 Java数据结构List,Set,Map,Spring执行流程,Spring MVC组件

    这里对今日的内容进行总结: 分布式锁具备的条件: 具备的条件: 在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行. 高可用的获取锁与释放锁. 高性能的获取锁与释放锁. 具备可重入的特 ...

  9. 聊聊redisson的分布式锁

    序 本文主要研究一下redisson的分布式锁 maven <dependency><groupId>org.redisson</groupId><artif ...

最新文章

  1. python3 文本文件内容去除重复行
  2. DM9000 寄存器的定义
  3. C++练习 | C++中Vector的使用
  4. 【MySQL经典案例分析】关于数据行溢出由浅至深的探讨
  5. SpringMVC(笔记)
  6. res.data.data_在Data.gov进行幕后推销
  7. NSX分布式防火墙是如何工作的?
  8. 8880 e7 v2配什么主板_MATX主板配什么机箱好?曜越Tt启航者A3装机记
  9. Android使用Glide框架加载网络图片(解决无报错图片不显示问题)
  10. 自动驾驶 4-4 纵向车辆建模Longitudinal Vehicle Modeling
  11. ubuntu18.04安装五笔输入法
  12. Linux安装PHP
  13. BC20/BC26-opencpu移植cjson,mqtt等注意事项
  14. KDL学习之路01:KDL(Kinematics and Dynamics Library)入门学习
  15. 如何评价B端产品经理的能力
  16. 用计算机用语说唯美的话,说说唯美的句子
  17. clover EFI bootloaderfor mac(10.12)官方版下载
  18. 前端基础之《NodeJS(2)—模块化》
  19. Unity零基础到入门 ☀️| 一起走进游戏引擎界大佬——Unity 的陈情往事,Unity故事背景介绍
  20. Java面向对象程序设计[董小园版][习题代码答案]-第一章

热门文章

  1. 云服务器的ip地址打不开如何解决?
  2. 欢迎观看Toni_hou的#生活4
  3. grep中使用\d匹配数字不成功的原因
  4. 鸡头?凤尾?请过来人给指点下
  5. 输入压缩空间量是分区量吗_win7系统压缩分区的操作教程
  6. 一款发动机爆震检测分析仪解决方案:英国 phormula 爆震检测分析仪+PICO
  7. 短URL服务的设计以及实现
  8. 天润融通亮相中国服务外包领军者年会
  9. 这位华裔天才数学家情商也蛮高,他给了25条职业建议
  10. 2021/11/27大数据1+XJava答案