并发 - 分布式锁 (Distributed Lock) vs 本地锁 (Synchronized)

news/2026/1/21 16:09:22/文章来源:https://www.cnblogs.com/liushoushou/p/19512373

Java 并发进阶:分布式锁 (Distributed Lock) vs 本地锁 (Synchronized)

1. 什么是分布式锁?

在微服务或分布式系统环境中,当系统由多个独立的进程或节点组成时,如果这些不同的进程需要协调对同一个共享资源(如数据库中的某条记录、共享文件、或某个唯一的业务 ID)的访问,传统的本地锁(如 synchronizedReentrantLock)就无法生效了。

分布式锁 (Distributed Lock) 就是为了解决这个问题而生。它是一种在分布式系统中,用于控制多个进程对共享资源进行并发访问的机制,以确保同一时刻只有一个进程(或线程)能够获得资源的使用权。

  • 核心思想:让处于不同 JVM 进程中的线程,在访问同一个共享资源时,也能实现互斥。

2. 分布式锁与 synchronized (本地锁) 的核心区别

synchronizedReentrantLock 都是本地锁 (Local Lock),它们的作用范围仅限于单个 JVM 进程内部的多个线程。而分布式锁则突破了这个限制。

特性 本地锁 (synchronized / ReentrantLock) 分布式锁 (Distributed Lock)
作用范围 单个 JVM 进程内部的多个线程 多个 JVM 进程/节点之间的协调
锁的粒度 通常是对象实例或类 通常是某个资源 ID (String)
实现方式 JVM 层面关键字或 JUC API,操作本地内存中的 Monitor 或 AQS 依赖外部协调服务 (如 Redis, ZooKeeper, Etcd)
互斥性保证 JVM 层面,操作系统保证 通过外部服务保证,需要考虑网络、服务宕机等复杂情况
并发性能 性能高,无网络开销 性能相对较低,有网络通信开销
复杂性 较低,JVM 自动管理或 JUC API 提供 较高,需要考虑一致性、容错性、死锁、锁续期等
解决问题 单个进程内的线程安全 多个进程间的资源竞争

3. 分布式锁的常见实现方式

分布式锁通常基于以下几种外部协调服务实现:

  1. 基于 Redis (Redis Distributed Lock)

    • 核心命令SET key value NX PX milliseconds (NX:只在 key 不存在时设置;PX:设置过期时间,单位毫秒)。
    • 实现原理:利用 Redis 的 SET NX PX 命令的原子性。当一个客户端成功设置了 key,就获得了锁,并设置过期时间防止死锁。释放锁时,通过 Lua 脚本原子性地判断 value 是否为自己的,然后删除 key。
    • 优点:实现相对简单,性能高(Redis 是内存数据库)。
    • 缺点
      • 单点故障:如果只用一个 Redis 实例,该实例宕机锁就失效。
      • 可靠性问题:在主从切换、网络分区等复杂场景下,经典的 Redlock 算法虽然尝试解决,但仍存在争议和潜在问题。
  2. 基于 ZooKeeper (ZooKeeper Distributed Lock)

    • 核心机制:利用 ZooKeeper 的临时顺序节点 (Ephemeral Sequential Nodes) 特性。
    • 实现原理
      1. 客户端尝试在 ZooKeeper 上创建一个临时顺序节点 (例如 /locks/lock_node/lock-00000001)。
      2. 客户端获取 /locks/lock_node 下的所有子节点,判断自己创建的是否是序号最小的节点。
      3. 如果是,则获得锁。
      4. 如果不是,则监听比自己序号小的前一个节点。当前一个节点被删除(锁释放)时,自己就会被唤醒。
    • 优点:强一致性(基于 Zab 协议),可靠性高,具备自动重入和死锁避免(临时节点断开连接自动删除)。
    • 缺点:性能相对较低(网络延迟和 ZooKeeper 本身的处理速度),实现相对复杂。
  3. 基于 Etcd (Etcd Distributed Lock)

    • 核心机制:类似 ZooKeeper,利用其强一致性、租约 (Lease) 和事务 (Transaction) 特性。
    • 实现原理:创建带有租约的 key,然后通过事务检查是否是最小的 key。
    • 优点:与 ZooKeeper 类似,但 API 更现代化,常用于 Kubernetes 等云原生环境中。

4. 实现分布式锁需要考虑的关键问题

设计和实现一个可靠的分布式锁,需要全面考虑以下几点:

  1. 互斥性 (Mutual Exclusion):在任何时刻,只能有一个客户端持有锁。这是锁最基本的保证。
  2. 死锁 (Deadlock):客户端崩溃或异常时,锁必须能够被正确释放,避免其他客户端永远无法获取锁。通常通过设置锁的过期时间心跳续期机制来解决。
  3. 重入性 (Reentrancy):同一个客户端(线程)在持有锁的情况下,能否再次获取该锁?
  4. 锁续期 (Lease Renewal / Fencing):如果业务处理时间超出了锁的过期时间,锁可能被其他客户端获取,导致数据不一致。需要看门狗 (Watchdog) 机制来自动续期。
  5. 性能 (Performance):锁的获取和释放速度是否满足业务需求。
  6. 高可用和可靠性 (High Availability & Reliability):在协调服务(Redis, ZK)集群部分节点宕机或网络分区时,锁服务是否还能正常提供。

总结:分布式锁的实现远比本地锁复杂,需要综合考虑一致性、可用性、分区容错性等多个方面,且没有银弹。选择何种实现方式,取决于具体业务对性能、可靠性和复杂性的权衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1195346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

midscene.js简介

相关资料 官方网站 项目主页与文档:https://midscenejs.com MidScene 框架的官方文档站点提供了完整的开发资源,采用清晰的层级结构设计,包含以下核心内容: 快速入门指南 环境要求:Node.js 12+、现代浏览器支持说明 安装教程:npm/yarn安装命令及常见问题排查 第一个示例…

GPEN影视后期预研案例:老旧胶片数字修复流程探索

GPEN影视后期预研案例:老旧胶片数字修复流程探索 1. 引言:从老照片到高清人像的修复之旅 你有没有翻出过家里的老相册?泛黄的照片、模糊的脸庞、斑驳的划痕——这些承载记忆的影像,往往因为年代久远而失去了原本的模样。在影视后…

GPEN前端框架分析:Vue/React技术栈可能性推断

GPEN前端框架分析:Vue/React技术栈可能性推断 1. 引言:从功能界面反推技术选型逻辑 GPEN 图像肖像增强项目作为一个面向用户的 WebUI 工具,其前端呈现出高度结构化、组件化和交互丰富的特点。通过观察其实际运行效果与用户手册中描述的界面…

又是新的一天

今天对面工位的同事又在面试新员工,关系型数据库常用的函数,svn是如何避免代码提交冲突的。前台跨域问题。想起来自己面对面试的时候,也是什么也不懂。 今天开发,自己又学会了序列,CTE预加载技术。以前三五天才能…

Open-AutoGLM新闻阅读助手:热点资讯推送执行部署案例

Open-AutoGLM新闻阅读助手:热点资讯推送执行部署案例 1. 引言:让AI帮你刷手机,真正实现“动口不动手” 你有没有这样的经历:看到朋友分享的某个博主内容很感兴趣,立刻想打开抖音去搜、关注,但一连串点击操…

【稀缺技术曝光】:大型系统中MCP服务器动态资源配置的黄金法则

第一章:MCP服务器动态资源配置概述 在现代云计算与微服务架构中,MCP(Microservice Control Plane)服务器承担着服务发现、流量调度与资源协调的核心职责。面对业务负载的波动性,静态资源配置已无法满足高效运维的需求。…

2026年济南雅思培训机构推荐及综合参考

济南作为山东省教育资源集中地,雅思培训市场近年来呈现多元化发展态势,各类机构依托不同教学特色服务于广大学习者。了解当地机构的实际情况,有助于更好地匹配学习需求。一、推荐榜单推荐 [序号1]:超级学长推荐指数…

上海拆除公司、专业拆除公司、写字楼拆除公司、办公室拆除公司、商场拆除公司、室内拆除公司、室外拆除公司、工程拆除公司选择指南

2026上海酒店行业翻新拆除白皮书——专业室内拆除解决方案近年来,上海酒店行业进入存量更新密集期。据上海旅游行业协会数据,2026年上海中高端酒店翻新比例达62%,其中85%的酒店将“拆除环节的专业性”列为翻新前三大…

2026年冷干机大型厂家排名,哪家性价比高值得选购?

在工业生产与矿山作业的压缩空气处理领域,冷干机作为保障气源洁净干燥的核心设备,直接影响着后端设备的使用寿命与生产效率。面对市场上鱼龙混杂的冷干机大型厂家、冷干机资深厂商及冷干机服务商,企业如何精准选择既…

20260121给荣品RD-RK3588开发板的荣品Android13打包APK的时候出现问题3797897216 > 3263168512

Z:\rk-android13-20250818\device\rockchip\common\build\rockchip\Partitions.mk #BOARD_SUPER_PARTITION_SIZE ? 3263168512 BOARD_SUPER_PARTITION_SIZE ? 4294967296 20260121给荣品RD-RK3588开发板的荣品Android13打包APK的时候出现问题3797897216 > 3…

基于51单片机射频RFID卡签到考勤计数统计系统设计/DIY套件103(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于51单片机射频RFID卡签到考勤计数统计系统设计/DIY套件103(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 51单片机射频RFID卡考勤人数计数统计系统103 产品功能描述: 本系统由STC89C52单片机、RFID读卡器模块…

并发 - 原子类与 CAS 原理

知识点 11:并发编程 —— 原子类与 CAS 原理 1. 核心理论:什么是原子操作? 在并发编程中,原子操作指的是一个不会被线程调度机制中断的操作。这种操作一旦开始,就一直运行到结束,中间不会有任何上下文切换。我们…

并发 - Callable 与 Future

知识点 5.1:并发编程进阶 —— Callable 与 Future 在学习了 Runnable 之后,我们很快会发现它的两个主要局限:run() 方法没有返回值。 run() 方法不能抛出受检异常。为了解决这两个问题,JUC 提供了一对更强大的组合…

麦橘超然性能压测报告:单次生成耗时统计

麦橘超然性能压测报告:单次生成耗时统计 1. 引言:为什么这次压测值得关注 你有没有遇到过这样的情况:满怀期待地输入一段精美的提示词,点击“生成”,然后盯着进度条一动不动,等了快一分钟才出图&#xff…

2026营口市英语雅思培训辅导机构推荐;2026权威出国雅思课程排行榜

基于《2025-2026年中国雅思考试行业白皮书》核心数据,结合营口市站前区、西市区、鲅鱼圈区、老边区、盖州市、大石桥市近三年雅思考生备考反馈(有效样本量1500+),本次开展全面深度测评,聚焦雅思培训选课核心痛点,…

fft npainting lama高阶使用技巧:分层修复与边缘羽化实战案例

fft npainting lama高阶使用技巧:分层修复与边缘羽化实战案例 1. 引言:图像修复不只是“一键去物” 你有没有遇到过这种情况:想从照片里去掉一个碍眼的路人,结果修复完边缘生硬得像被刀切过?或者处理一张复杂背景的广…

企业级通信如何选型?(MCP与OpenAI Function Calling技术对决揭秘)

第一章:企业级通信选型的底层逻辑与技术分野 在构建现代分布式系统时,企业级通信机制的选择直接影响系统的可扩展性、容错能力与维护成本。通信架构不仅涉及数据传输方式,更深层地反映了服务治理理念与技术栈的协同逻辑。 同步与异步通信的本…

OOP 经典对比

知识点 4.5:OOP 经典对比 1. 重写 (Override) vs 重载 (Overload) 这是 Java 多态性中两个非常重要且容易混淆的概念。 什么是重写 (Override)? 重写是指子类可以重新定义从父类继承来的、具有相同方法签名(方法名和…

YOLOv11+BiFPN革新小麦杂质检测技术

Key Points - 本报告的核心发现与结论(3-5项):YOLOv11 BiFPN 技术组合具备高精度、实时性与强鲁棒性,是小麦杂质检测系统的理想技术选型:该架构通过双向特征融合机制显著提升小目标(如尘土、石子&#xff…

手把手教你实现MCP服务器resources热更新,动态调整不再重启服务

第一章:MCP服务器热更新机制概述 在现代高可用服务架构中,MCP(Modular Control Plane)服务器作为核心控制组件,其持续稳定运行至关重要。热更新机制允许系统在不中断服务的前提下动态加载新代码或配置,极大…