![事务管理 vs. 锁控制:你真的分得清吗?](http://img.jiangsulong.com/231128/1K41U5H-1.jpg)
文章插图
tryLock() 方法用于尝试获取分布式锁,该方法有三个参数:
- key:锁的键值 。
- waitTime:等待获取锁的时间,单位为毫秒 。
- leaseTime:锁的过期时间 , 单位为毫秒 。
leaseTime 参数表示锁的过期时间 。如果锁在 leaseTime 时间内没有被释放,则会自动释放 。如果 leaseTime 设置为 -1,则表示锁的过期时间由 renew() 方法来控制 。这样,在业务逻辑执行过程中 , 可以定期调用 lock.renew() 方法来续期锁的过期时间 。
tryLock() 方法的返回值是一个 Boolean 值,表示是否成功获取到锁 。如果成功获取到锁,则返回 true 。否则,返回 false 。
2、事务方案以下是一些常见的分布式事务解决方案:
![事务管理 vs. 锁控制:你真的分得清吗?](http://img.jiangsulong.com/231128/1K41VP2-2.jpg)
文章插图
两阶段提交(2PC)2PC是一种经典的分布式事务解决方案,它将分布式事务分为两个阶段:准备阶段和提交阶段 。在准备阶段,协调者向所有参与者发送预提交请求;如果所有参与者都同意预提交,则进入提交阶段;否则 , 所有参与者都将回滚事务 。2PC的优点是可以保证原子性、一致性和隔离性,但是实现复杂度较高 。
三阶段提交(3PC)3PC是在2PC的基础上发展而来的一种改进方案,它引入了超时机制和预提交响应等新特性 。在3PC中 , 协调者会向所有参与者发送预提交请求,并等待参与者的响应 。如果所有参与者都同意预提交,则进入预提交阶段;否则,进入回滚阶段 。在正式提交阶段,如果所有参与者都同意提交事务,则进入正式提交阶段;否则,所有参与者都将回滚事务 。3PC的优点是可以更好地处理节点故障等问题,但是实现复杂度仍然较高 。
TCC(Try-Confirm-Cancel)TCC是一种基于补偿机制的分布式事务解决方案 。它将分布式事务分为三个阶段:尝试阶段、确认阶段和取消阶段 。在尝试阶段,参与者尝试预留所需的资源,并执行一些检查和准备工作,以确保执行事务操作的前提条件满足;在确认阶段,如果所有参与者都满足,则所有参与者执行之前在Try阶段所预留的操作,并提交实际的数据持久化 。在取消阶段,如果有任何一个参与者执行失败,则执行回滚操作,将系统状态恢复到事务开始之前的状态 。TCC的优点是可以避免阻塞情况的发生,但是实现复杂度较高 。
Saga模式Saga模式是一种基于事件驱动的分布式事务解决方案 。它将分布式事务看作一系列的事件序列,每个事件都有一个唯一的ID和一个时间戳 。在每个事件发生时,参与者会根据事件的内容执行相应的本地事务 。如果某个参与者执行失败,则会记录该事件的状态为“已失败” , 并等待其他参与者的响应 。当所有的事件都被处理完毕后,再执行最终的本地事务 。Saga模式的优点是可以支持复杂的业务逻辑和异常情况处理,但是实现复杂度较高 。
消息队列消息队列可以用于异步地处理多个任务,并且可以保证任务的顺序执行 。在分布式系统中使用消息队列来处理事务时,可以将事务拆分成多个小任务,并将这些任务发布到消息队列中进行异步处理 。当所有任务都完成后,再执行最终的本地事务 。这种方式可以避免阻塞情况的发生,并且可以提高系统的可扩展性和容错能力 。能保证事务的最终一致性 。
最大努力通知(Best Effort Delivery)这种解决方案通过异步通信和消息重试来实现事务的最终一致性 。事务操作被封装为消息发送到目标系统,如果消息传递失败,系统会进行重试 。
分布式事务中间件Seata是一款阿里巴巴开源的分布式事务中间件,它提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案 。Seata的设计思路是将一个分布式事务理解成全局事务,下面挂了若干个分支事务,而一个分支事务就是一个满足ACID的本地事务 , 因此我们可以操作分布式事务像操作本地事务一样简单 。
推荐阅读
- iphone长按软件怎么出来快捷
- 周冬雨孕照曝光,刘昊然终于要当爹了?网友:这俩人锁死!
- cdr应该咋的才能全部解锁
- 抖音怎么关闭防沉迷时间锁,抖音青少年模式怎么设置时间限制
- 华为指纹解锁不见了怎么办,华为电脑指纹解锁不见了怎么找回
- 炉石传说怎么解锁狂野模式,炉石怎么解锁狂野模式新号
- oppo怎么设置国徽息屏,oppo手机怎么设置国徽锁屏壁纸?
- 健康助手屏保怎么卸载,健康助手自动锁屏怎么关闭?
- 华硕笔记本键盘锁住了fn和什么键
- 表格首行锁定怎么弄,excel表格锁定一行一列怎么回事儿