当前位置: 首页 > news >正文

分布式锁简介

  1. 产生背景
    服务器集群模式下需要对临界资源实现互斥访问
  2. 实现方案
    • 基于数据库
      使用唯一索引或排他锁来实现。
      缺点是IO限制导致的性能较差,同时支持功能太少,需要额外开发锁超时、锁失效等功能。
    • 基于KV缓存
      一般通过redis来实现。
      一种是单机方案,即通过单个redis实例,set key value ex/px timeout nx语句实现加锁,通过lua脚本比较key和value实现解锁,通过watchDog看门狗来实现业务运行时间超过“锁超时时间”时的续期,该方案问题在于单点故障问题;
      另一种是哨兵模式方案, 通过引入主从架构和哨兵机制,提升了系统的鲁棒性,但仍然会有主从切换时分布式锁可能被同时获取、以及由于网络原因导致的“脑裂”(多个master节点)等问题;
      第三种是RedLock方案,通过多个并列的redis实例提升系统的鲁棒性,加锁时需要对每个redis实例都加锁,只有超过一半的实例都加锁成功才算加锁成功。这种方案极大恶化了性能,同时在一些边界情况如某个redis实例中的锁过期时客户端在GC导致仍然在使用锁等场景仍然有问题
    • 基于一致性协议
      一般通过zookeeper实现,主要借助临时有序节点和watcher机制,客户端在获取锁时,会在zookeeper中创建一个临时有序节点(先创建的节点序号更小,优先级更高),序号最小的节点能获取到锁,同时通过watcher机制观察节点状态,当客户端解锁时,对应的临时有序节点会在zookeeper中注销,watcher观察到节点注销后,会通知下一个序号最小的节点获取到锁。
      zookeeper是鲁棒性最强的方案,但是在一些极边界情况下,仍然有问题,比如客户端网络异常会导致对应临时有序节点被注销,这样就会有新的客户端能拿到锁,可能就造成了锁被同时持有。
  3. 方案选型
    • 对性能没要求,对分布式锁的功能需求也极简单,可以考虑数据库方案,但一般不建议。
    • 对性能要求高,允许极端情况容错,可以采用Redis的方案。
    • 对性能要求较高,同时对一致性要求相当严格,可以采用zookeeper的方案。
http://www.jsqmd.com/news/89508/

相关文章:

  • 【单片机毕业设计】【mcugc-mcu918】基于单片机的脉搏检测仪系统
  • 重构 Flutter 网络层:从 Dio 裸奔到分层封装的企业级实践
  • 【血压估算】基于 AR 模型结合两种最小均方(LMS)方法,通过桡动脉血压信号估计主动脉血压信号附Matlab代码
  • 超实用物联网平台:功能强大,部署无忧
  • 用于编译任务的非特权 LXC 容器
  • 【单片机毕业设计】【mcugc-mcu919】基于单片机的智能远程浇花系统
  • 第30章 Shell 正则表达式实战:精准匹配字符串、日志与配置项
  • PTA大作业总结Blog2
  • MouseTester:如何用专业工具精准测试鼠标性能
  • 【无人艇编队】基于数据驱动神经预测器 分布式通信网络 制导向量场GVF5艘欠驱动自主水面船舶USV的分布式路径跟踪与编队控制Matlab仿真,确保多USV在复杂轨迹保持预设编队,更贴近实际水面航行场景
  • 41_Spring AI 干货笔记之 OpenAI SDK 嵌入(官方支持)
  • 不可多得的一次通过的文章-医疗设备采购管理系统的设计与实现【高分通过+规范】
  • 小明购物问题(C语言数据结构)
  • ComfyUI-Manager升级终极指南:一键解决配置迁移与节点兼容性问题
  • Day30立体呈现
  • Text-guided Controllable Diffusion for Realistic Camouflage Images Generation阅读笔记
  • 深蓝词库转换:三分钟搞定全平台输入法词库同步
  • 精通 Flutter 动画开发:从基础显隐动画到自定义 Hero + 物理动画的全场景实战
  • 2025北京托福机构怎么选?这3家高分选手帮你划重点! - 品牌测评鉴赏家
  • Cursor 又偷偷更新,这个功能太实用:Visual Editor for Cursor Browser
  • openpnp - Smoothieware - LPC17xx-DFU-Bootloader - 固件调试环境搭建
  • E-Hentai批量下载工具:高效管理数字收藏资源的最佳方案
  • 新的Unicode标准 18.0有些什么? 小篆字会进入标准!
  • GUID为什么不会重复?
  • 深蓝词库转换:轻松打通全平台输入法数据壁垒
  • 【time-rs】time库 ConversionRange 错误类型详解(error/conversion_range.rs)
  • 理解 Cursor 的核心概念、优势和适用场景。
  • 雪花ID是什么?
  • 百度网盘直链解析工具:轻松获取高速下载链接的完整指南
  • 基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2018研究附Matlab代码