| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> mysql中undo、redo日志,以及分布式事务的解决方式 -> 正文阅读 |
|
[大数据]mysql中undo、redo日志,以及分布式事务的解决方式 |
undo日志和redo日志
undo日志
缺陷:每个事务提交前将数据和Undo Log写入磁盘,这样会导致大量的磁盘IO,因此性能很低。 如果能够将数据缓存一段时间,就能减少IO提高性能。但是这样就会丧失事务的持久性。因此引入了另外一种机制来实现持久化,即Redo Log.
分布式事务在数据库水平拆分、服务垂直拆分之后,一个业务操作通常要跨多个数据库、服务才能完成。在分布式网络环境下,我们无法保障所有服务、数据库都百分百可用,一定会出现部分服务、数据库执行成功,另一部分执行失败的问题。当出现部分业务操作成功、部分业务操作失败时,业务数据就会出现不一致。 例如:付款表与库存表在不同数据库,用户购买时扣减金额失败了,付款表回滚,但是库存表因为没有与商品表在同一个数据库中,并不会发生回滚。 ? 解决分布式事务的思路CAP定理和BASE理论可以参考之前文章 解决思路一:分阶段提交
在该模型中,一个分布式事务(全局事务)可以被拆分成许多个本地事务,运行在不同的AP和RM上。每个本地事务的ACID很好实现,但是全局事务必须保证其中包含的每一个本地事务都能同时成功,若有一个本地事务失败,则所有其它事务都必须回滚。但问题是,本地事务处理过程中,并不知道其它事务的运行状态。因此,就需要通过CRM来通知各个本地事务,同步事务执行的状态。 二阶段提交
这个过程中需要一个协调者(coordinator),还有事务的参与者(voter) ? 投票阶段:协调组询问各个事务参与者,是否可以执行事务。每个事务参与者执行事务,写入redo和undo日志,然后反馈事务执行成功的信息( 提交阶段:协调组发现每个参与者都可以执行事务( 缺陷: 单点故障问题:协调组若挂掉,那么将无法判断接下来是提交还是回滚 阻塞问题:在准备阶段、提交阶段,每个事物参与者都会锁定本地资源,并等待其它事务的执行结果,阻塞时间较长,资源锁定时间太久,因此执行的效率就比较低了。 解决思路二:TCC模式
?try、confirm、cancel都是独立的事务,不受其它参与者的影响,不会阻塞等待它人 例如:假设账户A原来余额是100,需要余额扣减30元。 ?缺点:需要人为编写代码实现try、confirm、cancel,代码侵入较多,同时增大了开发复杂度。同时cancel动作如果执行失败,资源就无法释放,需要引入重试机制,而重试可能导致重复执行,还要考虑重试时的幂等问题 解决思路三:使用MQ事务发起者A执行本地事务,通过MQ将需要执行的事务信息发送给事务参与者B,事务参与者B接收到消息后执行本地事务。利用mq的消息可靠性实现,同时事务参与者B必须确保消息最终一定能消费,如果失败需要多次重试 缺点:依赖于MQ的可靠性、消息发起者可以回滚,但是消息参与者无法引起事务回滚、事务时效性差,取决于MQ消息发送是否及时 解决思路四:AT模式类似于TCC模式,都是分为两个阶段,但是不需要自己编写第二阶段代码,通过Seata实现。 在一阶段,Seata 会拦截“业务 SQL”,首先解析 SQL 语义,找到“ 这里的 ?二阶段如果是提交的话,因为“ 二阶段如果是回滚的话,Seata 就需要回滚一阶段已经执行的“ |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:14:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |