【面试八股文 - 分布式 - 分布式事务】

系列文章目录

【面试八股文 - java基础 - 数据结构 - HashMap】
【面试八股文 - 数据库 - MySQL - 索引】
【面试八股文 - java基础 - 多线程 - 锁】
【面试八股文 - java基础 - 多线程 - 线程池】



前言

工作太忙,加班的话就不想码字了啊


一、 事务

事务,就是我为了做一件事,为了防止这件事被干扰,而把这件事作为一个整体来看
事务有四大特性,分别是ACID

1、原子性,Atomicity

事务就像原子一样,作为最小单位不可再分,事务内部的事件成功的话就全都成功,失败的话也全都失败

2、一致性,Consistency

事务发生前后数据的完整性不产生变化

3、隔离性,Isolation

事务与事务是相互独立的,互相不会产生干扰

4、持久性,Durability

事务最终的表现会将所有数据持久化下来,以完成事务


二、分布式事务

那么分布式事务就是当数据存储在多台服务器上时,如何来保证数据的事务管理。

1、CAP理论

Consistency 一致性
所有服务器上的数据应该是一致的
Availability 可用性
对服务的请求,应该在有限的时间内能够返回结果
Partition tolerance 分区容错性
当部分服务器出现异常,服务器应能继续对外提供服务

著名的CAP理论就是说的分布式事务的难点,理论指出分布式服务最多只能满足其中的两项,
比如当我数据一致,
我是可以牺牲分区容错性来保证可用性的,即如果有出现服务器分区了,数据无法保持一致,
我就直接返回错误,即使返回的是错误,但依然是在有限时间内返回结果了。
或者我可以选择牺牲可用性来保证分区容错性,即如果出现服务器分区了,数据无法保持一直,
我就不返回结果,一直等待,直到分区异常恢复,则服务器能最后返回一致数据。
那换一种说法就更简单了,当我不要求数据强一致性了,
则服务就能做到可用性和分区容错性了,
一种简单的方式就是服务器出现分区了,那就直接返回服务器本地结果就好了。

2、BASE理论

基于CAP理论,既然我无法同时满足最佳情况,那我就调和一下
用酸(ACID)和碱(BASE)中和一下
BA Base Available
基本可用性
S Soft State
软状态
E Eventual Consistency
最终一致性

即当服务器出现异常,通过返回不一定是完全一致的数据,来保证尽可能短的时间里返回结果,
但是通过数据同步等方式保证数据最终状态是具有一致性的


三、微服务事务

而微服务事务就是要在多台服务器提供微服务的时候也能保证事务完整性,
单台服务器的话,无所谓,成功就提交,失败就回滚,但是多台服务器之间就会因为通信而产生各种问题。

1、二阶段提交

首先我们可以想到的是二阶段提交
正常按照事务的思维逻辑,每个服务器正常执行事务,
如果有服务器异常,执行失败,那就所有服务器回滚事务,

2、三阶段提交

二阶段提交缺点就是所有服务器同时占用,如果出现服务器异常,
就白白损失了服务器资源。
那么改进后就是三阶段提交
增加最初阶段,先向所有服务器收集是否是正常状态,如果都是正常状态,
则开始占用服务器,进行事务处理。

3、TCC

但同样,三阶段提交的不足,
即使服务没有器异常,还是可能某个服务器无法完成分配服务的情况。
这时候就是衍生的TCC try/confirm/cancel方式,
将三阶段的收集服务器是否正常,调整为尝试进行被分配的服务,
如果所有服务器都可以保证自己能正常完成,才开始占用服务器,进行事务处理。


总结

一片文章分三次写,我也是服了自己

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破晓星芒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值