当前位置:首页 > 科技  > 软件

事务管理 vs. 锁控制:你真的分得清吗?

来源: 责编: 时间:2023-11-28 09:33:12 343观看
导读分布式锁和事务是分布式系统中两个重要的概念,它们都用于解决分布式环境下的数据一致性问题。一、概念分布式锁分布式锁是一种用于在分布式环境中控制对共享资源访问的锁。分布式锁可以防止多个进程或线程同时访问共享

yE328资讯网——每日最新资讯28at.com

分布式锁和事务是分布式系统中两个重要的概念,它们都用于解决分布式环境下的数据一致性问题。yE328资讯网——每日最新资讯28at.com

一、概念

分布式锁

分布式锁是一种用于在分布式环境中控制对共享资源访问的锁。分布式锁可以防止多个进程或线程同时访问共享资源,从而避免数据冲突和资源竞争。yE328资讯网——每日最新资讯28at.com

事务

事务是指一组操作要么全部执行,要么全部不执行,以保证数据的一致性。事务通常用于处理多个数据源之间的操作,例如对于跨多个数据库的事务操作,需要保证在执行过程中的原子性、一致性和持久性。yE328资讯网——每日最新资讯28at.com

区别yE328资讯网——每日最新资讯28at.com

区别yE328资讯网——每日最新资讯28at.com

分布式锁yE328资讯网——每日最新资讯28at.com

事务yE328资讯网——每日最新资讯28at.com

作用yE328资讯网——每日最新资讯28at.com

控制对共享资源的访问yE328资讯网——每日最新资讯28at.com

保证数据的一致性yE328资讯网——每日最新资讯28at.com

范围yE328资讯网——每日最新资讯28at.com

单个资源yE328资讯网——每日最新资讯28at.com

多个资源yE328资讯网——每日最新资讯28at.com

粒度yE328资讯网——每日最新资讯28at.com

细粒度yE328资讯网——每日最新资讯28at.com

粗粒度yE328资讯网——每日最新资讯28at.com

实现yE328资讯网——每日最新资讯28at.com

基于数据库、基于消息队列、基于共享内存等yE328资讯网——每日最新资讯28at.com

基于 ACID 原理yE328资讯网——每日最新资讯28at.com

优缺点yE328资讯网——每日最新资讯28at.com

优点:简单易用、性能高;缺点:无法保证数据一致性yE328资讯网——每日最新资讯28at.com

优点:保证数据一致性;缺点:实现复杂、性能低yE328资讯网——每日最新资讯28at.com

使用场景yE328资讯网——每日最新资讯28at.com

抢购、秒杀、数据同步等yE328资讯网——每日最新资讯28at.com

银行转账、订单支付等yE328资讯网——每日最新资讯28at.com

本质区别yE328资讯网——每日最新资讯28at.com

分布式锁是针对资源访问的yE328资讯网——每日最新资讯28at.com

事务是针对数据一致性的yE328资讯网——每日最新资讯28at.com

yE328资讯网——每日最新资讯28at.com

二、使用场景

分布式锁

分布式锁通常用于以下场景:yE328资讯网——每日最新资讯28at.com

  • 抢购、秒杀:在抢购、秒杀等场景中,需要防止多个用户同时下单,从而保证公平性。
  • 数据同步:在数据同步场景中,需要防止多个服务器同时更新数据,从而保证数据的一致性。
  • 资源访问控制:在资源访问控制场景中,需要防止多个用户同时访问共享资源,从而保证资源的安全性。

事务

事务通常用于以下场景:yE328资讯网——每日最新资讯28at.com

  • 银行转账:在银行转账场景中,需要保证转账金额的正确性,从而避免资金损失。
  • 订单支付:在订单支付场景中,需要保证订单的状态正确,从而避免订单丢失。
  • 数据库操作:在数据库操作场景中,需要保证数据的完整性和一致性。

三、本质区别

分布式锁可以防止多个进程或线程同时访问共享资源,从而避免数据冲突和资源竞争。事务可以保证数据在操作过程中的一致性,即使在发生异常的情况下,也不会导致数据不一致。yE328资讯网——每日最新资讯28at.com

在实际应用中,可以根据具体的需求选择合适的方案。如果需要保证数据的一致性,可以使用事务。如果只需要防止资源竞争,可以使用分布式锁。yE328资讯网——每日最新资讯28at.com

四、锁与事务实现

1、锁方案

分布式锁的实现方法有很多,常见的有以下几种:yE328资讯网——每日最新资讯28at.com

  • 数据库锁:使用数据库中的行锁或表锁来实现分布式锁。
  • 文件锁:使用文件来实现分布式锁。
  • Zookeeper锁:使用Zookeeper来实现分布式锁。
  • Redis锁:使用Redis来实现分布式锁。
  • 消息队列锁:使用消息队列来实现分布式锁。

Redisson 是一个基于 Redis 的 Java 分布式框架。Redisson 提供了丰富的功能,包括分布式锁、分布式集合、分布式队列等。yE328资讯网——每日最新资讯28at.com

以下是使用 Redisson 实现分布式锁的示例:yE328资讯网——每日最新资讯28at.com

@Autowired    private RedissonClient redissonClient;    public String lock() {        // 获取锁        RLock lock = redissonClient.getLock("lock");        boolean acquired = lock.tryLock(10,-1,TimeUnit.SECONDS);        if (acquired) {            // 获取锁成功,执行业务逻辑            return "获取锁成功,执行业务逻辑...";        } else {            // 获取锁失败,重试            return "获取锁失败,重试...";        }    }    public String unlock() {        // 释放锁        RLock lock = redissonClient.getLock("lock");        lock.unlock();        return "释放锁成功...";    }

另外,redisson支持锁续期。即在锁键值过期后任务还没执行完成,此时需要把锁键值的时间自动延长。yE328资讯网——每日最新资讯28at.com

Redisson提供了的续期机制,只要客户端加锁成功,就会启动一个Watch Dog。可以看到源代码的实现leaseTime不设置为-1时开启监听。如果任务没完成就调用scheduleExpirationRenewal续期方法。yE328资讯网——每日最新资讯28at.com

yE328资讯网——每日最新资讯28at.com

tryLock() 方法用于尝试获取分布式锁,该方法有三个参数:yE328资讯网——每日最新资讯28at.com

  • key:锁的键值。
  • waitTime:等待获取锁的时间,单位为毫秒。
  • leaseTime:锁的过期时间,单位为毫秒。

waitTime 参数表示客户端最多等待多长时间来获取锁。如果在 waitTime 时间内没有获取到锁,则会返回 false。yE328资讯网——每日最新资讯28at.com

leaseTime 参数表示锁的过期时间。如果锁在 leaseTime 时间内没有被释放,则会自动释放。如果 leaseTime 设置为 -1,则表示锁的过期时间由 renew() 方法来控制。这样,在业务逻辑执行过程中,可以定期调用 lock.renew() 方法来续期锁的过期时间。yE328资讯网——每日最新资讯28at.com

tryLock() 方法的返回值是一个 Boolean 值,表示是否成功获取到锁。如果成功获取到锁,则返回 true。否则,返回 false。yE328资讯网——每日最新资讯28at.com

2、事务方案

以下是一些常见的分布式事务解决方案:yE328资讯网——每日最新资讯28at.com

yE328资讯网——每日最新资讯28at.com

两阶段提交(2PC)

2PC是一种经典的分布式事务解决方案,它将分布式事务分为两个阶段:准备阶段和提交阶段。在准备阶段,协调者向所有参与者发送预提交请求;如果所有参与者都同意预提交,则进入提交阶段;否则,所有参与者都将回滚事务。2PC的优点是可以保证原子性、一致性和隔离性,但是实现复杂度较高。yE328资讯网——每日最新资讯28at.com

三阶段提交(3PC)

3PC是在2PC的基础上发展而来的一种改进方案,它引入了超时机制和预提交响应等新特性。在3PC中,协调者会向所有参与者发送预提交请求,并等待参与者的响应。如果所有参与者都同意预提交,则进入预提交阶段;否则,进入回滚阶段。在正式提交阶段,如果所有参与者都同意提交事务,则进入正式提交阶段;否则,所有参与者都将回滚事务。3PC的优点是可以更好地处理节点故障等问题,但是实现复杂度仍然较高。yE328资讯网——每日最新资讯28at.com

TCC(Try-Confirm-Cancel)

TCC是一种基于补偿机制的分布式事务解决方案。它将分布式事务分为三个阶段:尝试阶段、确认阶段和取消阶段。在尝试阶段,参与者尝试预留所需的资源,并执行一些检查和准备工作,以确保执行事务操作的前提条件满足;在确认阶段,如果所有参与者都满足,则所有参与者执行之前在Try阶段所预留的操作,并提交实际的数据持久化。在取消阶段,如果有任何一个参与者执行失败,则执行回滚操作,将系统状态恢复到事务开始之前的状态。TCC的优点是可以避免阻塞情况的发生,但是实现复杂度较高。yE328资讯网——每日最新资讯28at.com

Saga模式

Saga模式是一种基于事件驱动的分布式事务解决方案。它将分布式事务看作一系列的事件序列,每个事件都有一个唯一的ID和一个时间戳。在每个事件发生时,参与者会根据事件的内容执行相应的本地事务。如果某个参与者执行失败,则会记录该事件的状态为“已失败”,并等待其他参与者的响应。当所有的事件都被处理完毕后,再执行最终的本地事务。Saga模式的优点是可以支持复杂的业务逻辑和异常情况处理,但是实现复杂度较高。yE328资讯网——每日最新资讯28at.com

消息队列

消息队列可以用于异步地处理多个任务,并且可以保证任务的顺序执行。在分布式系统中使用消息队列来处理事务时,可以将事务拆分成多个小任务,并将这些任务发布到消息队列中进行异步处理。当所有任务都完成后,再执行最终的本地事务。这种方式可以避免阻塞情况的发生,并且可以提高系统的可扩展性和容错能力。能保证事务的最终一致性。yE328资讯网——每日最新资讯28at.com

最大努力通知(Best Effort Delivery)

这种解决方案通过异步通信和消息重试来实现事务的最终一致性。事务操作被封装为消息发送到目标系统,如果消息传递失败,系统会进行重试。yE328资讯网——每日最新资讯28at.com

分布式事务中间件

Seata是一款阿里巴巴开源的分布式事务中间件,它提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。Seata的设计思路是将一个分布式事务理解成全局事务,下面挂了若干个分支事务,而一个分支事务就是一个满足ACID的本地事务,因此我们可以操作分布式事务像操作本地事务一样简单。yE328资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-34577-0.html事务管理 vs. 锁控制:你真的分得清吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一篇学会 Rust 内存布局

下一篇: 如何高效地使用Goroutine,你学会了?

标签:
  • 热门焦点
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top