《软件架构探索》事务处理(1) - 本地事务、全局事务

在我的博客阅读本文会有更好的阅读体验哦!博客: www.lxiaocode.com
更多内容可以到我博客浏览: www.lxiaocode.com
B站算法动画: https://space.bilibili.com/22392939

文章导航:
《软件架构探索》事务处理(1) - 本地事务、全局事务
《软件架构探索》事务处理-2-共享事务、分布式事务

事务处理(1)

事务处理保证了系统中所有的数据都是符合期望、互相关联的数据之间不会产生矛盾,即数据状态的 {% span red, 一致性(Consistency) %}

达成一致性需要三个方面共同努力来保障:

  • {% span red, 原子性(Atomic) %}:在同一项业务处理过程中,事务保证了多个对数据的修改,要么同时成功,要么同时被撤销。

  • {% span red, 隔离性(Isolation) %}:在不同的业务处理过程中,事务保证了各自业务正在读、写的数据互相独立,不会彼此影响。

  • {% span red, 持久性(Durability) %}:事务应当保证所有成功被提交的数据修改都能够正确地被持久化,不丢失数据。

    以上四种属性就是事务的 {% span yellow, “ACID”。A、I、D 是手段,C 是目的。 %}

事务的概念起源于数据库,但如今不再局限于数据库本身,所有需要保证数据一致性的应用场景都有可能用到事务。

1. 本地事务

“本地事务(局部事务)” 与 “全局事务” 相对应。本地事务是指仅操作单一事务资源的、不需要全局事务管理器进行协调的事务。

本地事务是最基础的一种事务解决方案,只适用于{% span blue, 单个服务使用单个数据源 %}的场景。本地事务直接依赖于数据源本身提供的事务能力,在代码层面,最多只能对事务接口做一层标准化的包装,并不能深入参与事务的运作过程当中。因此,不得不越过代码层次,去了解数据库本身的事务实现原理。

1.1 实现原子性和持久性

{% span green, 原子性保证了事务的多个操作要么都生效要么都不生效;持久性保证了一旦事务生效,就不会再因为其他原因导致撤销或丢失。 %}

1.1.1 崩溃恢复

当数据存储在内存时,一旦遇到 “崩溃” 等情况就会丢失。数据只有成功被写入磁盘等持久化存储器才能拥有持久性,而实现原子性和持久性面临最大的困难就是 “写入磁盘”。因为,写入磁盘这个操作并不是原子性的,不仅有 “写入” 与 “未写入” 状态,还存在着 “正在写” 的中间状态。

由于写入中间状态与崩溃都是无法避免的,为了保证原子性和持久性,就只能在崩溃后采取恢复的补

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值