首页 > 其他分享 >柔性事务和传统事务

柔性事务和传统事务

时间:2023-06-21 20:32:59浏览次数:31  
标签:状态 事务 数据库 version 一致性 柔性 传统

 

传统事务

事务是原子的,要么都成功要么都失败。

再进一步看就有ACID这四个属性,原子性(Atomictiy)、一致性(Consistency)、隔离性(Isolation)、持久性(Durabilit)。

  • 原子性: 事务的最小单元, 在一个事务里面,要么全部成功,要么全部回滚,部分完成不是一个事务的概念。 
  • 一致性:在事务开始和完成的时候,数据和资源将遵循业务规则的一致性,没有被破坏的状态。
  • 隔离性:每个事务应该与其他事务隔离,避免数据破坏。一个事务,直到它被成功提交之后,它的结果对于任何其他的事务才是可见的。
  • 持久性:一个已提交事务的任何结果都必须是永久性的,即“在任何系统崩溃的情况下都能保存下来”。通常,事务的结果被写入持续性存储。

 

柔性事务

在电商领域等互联网场景下,传统的事务在数据库性能和处理能力上都暴露出了瓶颈。在分布式领域基于CAP理论以及BASE理论,有人就提出了 柔性事务 的概念。CAP(一致性、可用性、分区容忍性)理论大家都理解很多次了,这里不再叙述。说一下BASE理论,它是在CAP理论的基础之上的延伸。包括 基本可用(Basically Available)、柔性状态(Soft State)、最终一致性(Eventual Consistency)。

 

  • 基本可用 : 分布式系统出现故障的时候,允许损失一部分可用性。比如,京东618大促的时候,对一些非核心链路的功能进行降级处理。核心高可用,非核心可降级。
  • 柔性状态: 允许系统存在中间状态,这个中间状态又不会影响系统整体可用性。比如,数据库读写分离,写库同步到读库(主库同步到从库)会有一个延时,这样实际是一种柔性状态。
  • 最终一致性: 数据库主从复制的例子,经过数据同步延时之后,最终数据能达到一致。

 

参考: https://www.jianshu.com/p/ab1a1c6b08a1

 

区别

  • ACID是传统数据库常用的设计思想,它追求的是强一致性。
  • BASE是大型分布式系统场景下的设计思想,通过牺牲强一致性获得高可用性。

 

柔性事务针对分布式事务的解决方法:

1、记录日志+补偿
记录事务的开始和结束状态。事务根据日志记录找回事务的当前执行状态,并根据状态决定重试异常步骤,也就是正向补偿,或者回滚上一次执行步骤,也就是反向补偿。

2、消息
多次重试,也就是发送多次消息,由于要多次重发,所以程序必须是幂等(同一操作反复执行多次结果不变),这是非常具有互联网特征的一种模式。

3、“无锁”设计
放弃锁是一个解决问题的思路。比如通过乐观锁,大多数是基于版本号来实现。

update goods
set name=#{name},
remaining_number=#{remainingNumber},
version=version+1
where id=#{id} and version=#{version}

 

柔性事务的实现需要有下面2点作为保证:
1、应用程序一定要做幂等实现,特别是对数据库进行数据修改操作的时候。
2、远程模块之间采用异步消息驱动,异步消息还可以起到检查点的作用。

标签:状态,事务,数据库,version,一致性,柔性,传统
From: https://blog.51cto.com/u_15588078/6531382

相关文章

  • 资本宠儿“EDX Markets”上线,传统金融帝国即将复刻到加密世界?
        如今是加密世界,正呈现出魔幻般的景象。   一方面,Binance、Coinbase等加密原生机构正面临着SEC等监管机构的疯狂打击,而另一方面,传统金融世界似乎却加速了入局的步伐,贝莱德申请BTC现货ETF、德意志银行申请数字资产牌照、富达正考虑收购灰度(Grayscale),而这种趋势仍在继续。......
  • POSTGRESQL 事务控制(三) 事务关闭与怎么设置PG 异步提交提高性能
    。最近接到网友反馈,说次系列是打开5秒钟系列,打开5秒后就关闭了,其实我想说的是,我更难,写的脑袋疼,不过估计疼一段时间就不会再疼的,看一段时间就可以看更长的时间,人的进步是吧。接上期,事务在执行完毕后,结束的动作分为两种,1事务提交2 事务回滚至于事务回滚时的问题主要也分手动终止以......
  • 电销机器人,颠覆传统的电销模式
    电销机器人是帮你搭建一个电销后台,对接属于你的专属线路,录制属于你的真人语音话术,帮你代替真人自动拨打电话,把打出来的意向客户自动推送到你的微信上面。电销机器人是非常有用的,它和传统的人工电销不一样。第一、减低人力成本:一个电话销售员从工资、培训、补贴、奖金一个月做少要40......
  • mysql事务阻塞原因探索
    –先保存现场showengineinnodbstatus;–查看是否存在锁等待信息showstatuslike‘innodb_row_lock%’;–查看锁等待的事务信息select*from information_schema.INNODB_TRXWHEREtrx_state=‘LOCKWAIT’;–查看锁等待的事务id,processId,阻塞它的事务id,阻塞它的pr......
  • JPA在事务结束时自动更新查询数据
    目录现象产生的原因解决方法现象最近解决了一个困惑几天的bug,数据库里的某一些记录莫名其妙的被刷新了,排查过代码跟应用日志,可以确定不是代码执行的更新。直到今天看到了一条日志,在事务提交时报错“Column'user_name'cannotbenull”,在出错的事务中,针对这一个表只会执行query......
  • 如何直接通过 ABAP 调试器将 SE16 事务码里无法直接查看的内容下载到本地试读版
    在SAPABAP系统里,我们可以使用事务码SE16查看数据库表的内容。这个事务码很方便,但是有一些局限性,比如类型为RAWSTRING的二进制内容,无法在这个事务码里方便的查看。下面的数据库表ZFILE是一个例子:字段VALUE存放的是文件的二进制内容。我们使用事务码SE16查看该文件......
  • POSTGRESQL RC事务处理与ORACLE MYSQL 的区别 --对PGFANS 群里面的问题的分解
    有一个同学在PGFANS群里面提了一个问题,在他实验的某个操作中发现PG和ORACLE使用同样的操作流程后,得到的结果不一致。所以下面准备验证并找到一些可以解释的原因。测试库名test测试表test测试数据id  age 1   202   223   24首先我们要确认 PG的隔离 RC......
  • POSTGRESQL 事务控制(二) 事务开启 (写着费力,看着费劲系列)
    今天接着上回书,事务如果在处理中没有子事务,则实现和控制是十分容易的,但如果有子事务的情况下,子事务通过transactionState结构体来实现,(上次已经提到了),每一个transactionState都指向父事务的结构体的指针.在继续往下说之前,我们的提到clog, 这是理解后面要提到的一些事情的......
  • 事务扩展机制TransactionSynchronization
    事务扩展机制TransactionSynchronization在进行数据库操作的时候,如果需要多个操作要么一起成功,要么一起失败那么就需要使用事务操作了。使用Spring框架只需要在方法上添加 @Transactional 注解这个方法就具有事务特性了。而且Spring也事务操作给开发者提供了很方便的扩展......
  • 【Java学习】 Spring的基础理解 IOC、AOP以及事务
    一、简介  官网: https://spring.io/projects/spring-framework#overview   官方下载工具: https://repo.spring.io/release/org/springframework/spring/  github下载: https://github.com/spring-projects/spring-framework   maven依赖:<dependency>......