`
huangyongxing310
  • 浏览: 494541 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

分布式锁的策略优缺点及对应处理

 
阅读更多
分布式锁的策略优缺点及对应处理



基于数据库
悲观锁—事务

将获取库存、判断有货、用户付款、扣减库存等多个数据库操作放到一个事务,,这样当一台机器与数据库建立链接请求了抢购商品这个事务,另外的机器只能等这个机器将请求完成才能操作数据库。

优点:是比较安全的一种实现方法。
缺点:在高并发的场景下开销是不能容忍的。容易出现数据库死锁等情况。



乐观锁—基于版本号
使用CAS, update table set surplus = aa where id = xx and version = y

失败重试,重试n次不成功,返回,

优点:乐观锁的性能高于悲观锁,并不容易出现死锁。
缺点:乐观锁只能对一张表的数据进行加锁,如果是需要对多张表的数据操作加分布式锁,基于版本号的乐观锁是办不到的。存在可能成功了,但返回失败



基于memcached
memcached的add指令是指如果有这个key,add命令则失败,如果没有这个key,则add命令成功。并且memcached支持设置过期时间的add原子操作。并发add同一个key也只有一个会成功。

定义一个key为分布式锁的key,如果add一个带过期时间的key成功则执行相应的业务操作,执行完判断锁是否过期,如果锁过期则不删除锁,如果锁没过期则删除锁。带过期时间是防止出现机器宕机,一直不能释放锁。

设想这样的执行序列:
1、机器A成功add一个带过期时间的key;
2、机器A在执行业务操作时出现较长时间的停顿,比如出现了较长时间的GC pause;
3、机器A还未在较长的停顿中恢复出来,锁已经过期,机器B成功add一个带过期时间的锁;
4、此时机器A从较长的停顿中恢复出来,执行完相应业务操作,删除了机器Badd的锁;
5、此时机器B的业务操作是在没有锁保护的情况下执行的。

注:过期时间一定要长于业务操作的执行时间。
优点:性能高于基于数据库的实现方式。


基于redis
redis提供了setNx原子操作。基于redis的分布式锁也是基于这个操作实现的,setNx是指如果有这个key就set失败,如果没有这个key则set成功,但是setNx不能设置超时时间。

基于redis组成的分布式锁解决方案为:
1、setNx一个锁key,相应的value为当前时间加上过期时间的时钟;
2、如果setNx成功,或者当前时钟大于此时key对应的时钟则加锁成功,否则加锁失败退出;
3、加锁成功执行相应的业务操作(处理共享数据源);
4、释放锁时判断当前时钟是否小于锁key的value,如果当前时钟小于锁key对应的value则执行删除锁key的操作。

注:这对于单点的redis能很好地实现分布式锁,如果redis集群,会出现master宕机的情况。如果master宕机,此时锁key还没有同步到slave节点上,会出现机器B从新的master上获取到了一个重复的锁。


基于zookeeper
1、客户端尝试创建ephemeral类型的znode节点/lock;
2、如果客户端创建成功则加锁成功,可以执行访问共享数据源的操作,如果客户端创建失败,则证明有别的客户端加锁成功,此次加锁失败;
3、如果加锁成功当客户端执行完访问共享数据源的操作,则删除znode节点/lock。

基于zookeeper实现分布式锁不需要设置过期时间,因为ephemeral类型的节点,当客户端与zookeeper创建的session在一定时间(session的过期时间内)没有收到心跳,则认为session过期,会删除客户端创建的所有ephemeral节点。

但是这样会出现两个机器共同持有锁的情况。设想以下执行序列。
1、机器A创建了znode节点/lock;
2、机器A执行相应操作,进入了较长时间的GC pause;
3、机器A与zookeeper的session过期,相应的/lock节点被删除;
4、机器B创建了znode节点/lock;
5、机器A从较长的停顿中恢复;
6、此时机器A与机器B都认为自己获得了锁。













https://blog.csdn.net/qq_35666577/article/details/80431019(几种常见的分布式锁的策略优缺点及对应处理)

















分享到:
评论

相关推荐

    分布式IDS及其认知能力

    ### 分布式IDS及其认知能力 #### 一、引言 随着互联网的普及和技术的发展,网络安全成为了一个不可忽视的问题。为了保障网络安全,入侵检测系统(Intrusion Detection System,简称IDS)的应用变得越来越广泛。...

    在分布式事务中实现基于Oracle PLSQL UL LOCK的悲观离线锁

    在分布式系统中,事务处理是确保数据一致性与正确性的关键环节。本文将深入探讨如何在分布式事务中实现基于Oracle PL/SQL的UL (User-Level) LOCK...因此,需要根据具体应用场景权衡其优缺点,选择合适的并发控制策略。

    mybatis-plus优缺点

    6. **丰富的主键策略**:支持多种主键生成策略,包括分布式唯一ID生成器,方便用户根据实际需求选择合适的主键策略。 7. **支持热加载**:Mapper对应的XML文件支持热加载机制,简化了开发调试过程。 8. **支持...

    微服务处理分布式事务模块

    微服务中的分布式事务处理通常采用以下几种策略: 1. **两阶段提交(2PC)**:这是一个经典的分布式事务解决方案,分为准备阶段和提交阶段。但2PC存在一些缺点,如阻塞问题、单点故障、难以扩展等。 2. **补偿事务...

    分布式join算子设计

    ### 分布式Join算子设计 #### 一、单机Join的三种实现方法 ##### 1.1 Loop Join(循环嵌套Join) ...未来的研究可以继续探索如何更好地处理数据倾斜、优化数据分布策略以及利用硬件特性来进一步提高Join操作的性能。

    分布式数据库系统

    7. **分布式数据库的挑战与解决方案**:讨论分布式数据库面临的挑战,如网络延迟、数据不一致、分布式锁管理等,以及对应的解决策略。 8. **实际应用案例**:通过具体的分布式数据库系统(如Google的Bigtable、...

    2020年-蚂蚁金服-Java高级.pdf

    - 缺点:内存管理策略可能导致锁信息丢失,且无法持久化,一旦重启,所有信息丢失。 - 使用场景:适合高并发场景,但需要确保有足够的内存支持锁服务,并进行集群化管理和超时时间设置以防止死锁。 3. **Redis...

    网络访问控制的分布式部署与应用

    2. **数据的汇总:** 实现从总部查看整个集团用户的信息,包括用户身份信息、对应的安全策略以及上网日志等。 3. **管理权限的下发:** 对于具有大量分支机构的组织,可以将部分管理权限下发给分支机构,使其能够...

    分布式环境下session解决方案1

    综上所述,分布式环境下Session的处理策略各有优缺点,需要根据具体的应用场景和性能需求进行选择。粘性Session适合对容错性要求不高的场景,而Session复制和共享机制则更适合需要高可用性和实时响应的大型分布式...

    43_说说你们的分布式session方案是啥?怎么做的?.zip

    附件中的"笔记.docx"可能详细记录了分布式Session的各种实现方法和优缺点,"01_分布式会话是什么.png"可能是一张解释分布式会话概念的图表,而"PPT.pptx"则可能是更全面的讲解,包括具体的配置示例和实战经验分享。...

    分布式文件系统研究(整理版)

    NFS是一种实现了网络间文件共享的文件系统,其历史、架构、运行模式及优缺点都是研究的重点。 #### AFS文件系统 AFS强调的是文件数据的安全性和共享性,研究者需要了解它的历史背景、基本概念、设计架构及后续发展...

    分布式id方法

    #### 二、常见ID生成方法及其优缺点 针对上述需求,业界发展出了多种分布式ID生成方案。下面将逐一分析几种常见的方法: ##### 1. 使用数据库的`auto_increment`功能 这种方法简单直观,利用数据库自身提供的自增...

    分布式事务的一种实现方式状态流转共5页.pdf.zip

    这些算法各有优缺点,适用于不同的场景。例如,2PC简单但可能导致阻塞,而TCC则更灵活但实现复杂。 在分布式环境中,状态流转的挑战包括但不限于网络延迟、节点故障、并发控制和数据一致性。因此,设计良好的状态...

    电商系统的分布式事务调优

    分布式事务在电商系统中的重要性不言而喻,特别是在微服务架构盛行的今天。...同时,为了提高系统的健壮性和可用性,还需要结合其他技术如幂等性设计、事务补偿机制、分布式锁等来进一步优化分布式事务的处理。

    分布式存储系统中改进的一致性哈希算法.pdf

    传统的哈希算法在分布式存储系统中有一个缺点,即当系统扩展或缩减节点时,数据的迁移量过大。一致性哈希算法通过将哈希值空间组织成一个虚拟的环状结构,使得每个存储节点仅负责环上的一段区域,从而有效减少了节点...

    分布式服务框架的设计与实现.pdf

    文章中提到的分布式服务框架的提出,是基于对传统中心化服务框架(如ESB)的优缺点的分析。分布式服务框架的一个关键优势是去中心化,这意味着没有单点故障,从而提高了系统的抗毁性和鲁棒性。分布式服务框架通过...

    分布式键值-memcached1

    **优缺点** Memcached的优点包括简单协议、高性能、低延迟以及内存存储带来的高速访问。然而,它也有一些明显的不足,如数据持久化缺失、分布式管理的限制以及slab allocation可能导致的内存浪费。对于需要数据持久...

    分布式事务简介和解决思路

    学习分布式事务不仅需要理解其基本概念,还需要掌握不同方案的优缺点和适用场景,以及如何通过如Seata这样的工具来落地实施。具备这些知识,开发者才能更好地应对分布式环境下的复杂事务问题,保证系统的稳定性和...

    分布式之redis复习精讲.doc

    Redis 是一款高性能的键值存储系统,常用于实现分布式缓存、消息队列等场景。本文将深入探讨 Redis 在分布式环境中的...理解 Redis 的优缺点、工作原理以及如何应对潜在问题,有助于我们更好地在实际项目中运用 Redis。

Global site tag (gtag.js) - Google Analytics