随着微服务架构在各个企业的渗透,大家都在纷纷的将技术架构转型,从单体式应用变成微服务架构式,从单机部署变分布式部署,我们的应用也变成了分布式应用。在分布式应用中,一切就变得复杂了,如何保障数据的一致性变为最重要的问题。在金九银十的跳槽季中,分布式事务也成为面试中的必考题,因此今天给大家恶补一波分布式事务知识,祝大家可以找到一个满意的工作。

在单体式应用中,因为所有的事务(即某个动作的全流程,比如购物包含付款、下订单、减库存三个操作)都在一个环境里完成,自然可以保障操作的原子性(事务要么全部成功,要么全部失败)、一致性(事务执行前后,数据从一个状态到另一个状态必须是一致的)、隔离性(多个并发事务相互隔离,互不干扰)、持久性(事务完成后,对于数据库的更改是永久保存的,不能回滚)。而在微服务架构的分布式应用中,事务变成了分布式事务(即事务的参与者、支持事务的服务器、资源服务器、事务服务器分别位于不同的分布式系统的不同节点上),一个操作拆分成了多个服务完成,一个服务又在多台机器上完成。

那么在分布式事务中,如何保障事务的一致性呢?解决办法是基于XA协议进行扩展的2PC两阶段提交、3PC三阶段提交、TCC试验确认取消方案。那么XA协议是什么呢?它是一个基于数据库的分布式事务协议,包含事务管理器、本地资源管理器,事务管理器作为全局的调度者,对本地资源管理器统一提交或回滚。

我们先来看看2PC(2phasecommit)两阶段提交,它包含两个阶段的提交,第一阶段是准备阶段,事务管理器(即协调者)询问资源管理器(即参与者)“老铁,准备好了没有啊?可以进行相关操作了吗?”,资源管理器根据自己的情况回答,如果准备好了就会反馈”老板,我这里都准备好了,可以安排对应的工作了“。第二阶段是执行阶段,事务管理器给资源管理器提交一个用户请求,比如创建订单,资源管理器就会进行订单的创建,在创建完成之后,把执行结果返回给事务管理器。如果事务管理器收到某一个资源管理器的失败消息,则直接给所有的资源管理器发送回滚小心,释放事务处理过程中被占用的资源。

在这里,你可能觉得2PC已经很完美了,因为每个事务操作它都先询问再操作,有异常就回滚,在分布式系统中完完全全的保障了数据的一致性。其实不然,它也存在着很多问题,比如如果在第二阶段,事务管理器向资源管理器发送提交命令后,出现网络异常请求,只有部分资源管理器收到消息并执行了命令,其它没有收到提交命令的资源协调器就没有办法执行事务,从而导致了整个分布式系统的数据不一致。比如如果事务管理器出现了问题,资源管理器都还处在等待命令的情况,就没有办法完成事务的操作。

道高一尺,魔高一丈,我们有了3PC(3PhaseCommit)三阶段提交,可以把它认为是2PC的升级版。所谓3PC它包含三个阶段cancommit、precommit、docommit。相比两阶段提交,它多了一个precommit准备阶段,确保在最后提交阶段之前,各个参与者资源管理器的状态都一致。并且还增加了超时机制,如果协调者事务管理器出现了问题,参与者资源管理器不会一直等待,而是会执行命令。

在3PC中,第一阶段cancommit,协调者会给所有的参与者发送命令,询问他们是否可以干活?各个参与者根据自己的情况进行应答,在第一阶段确认了所有参与者都可以干活后。第二阶段precommit,协调者给所有的参与者发送precommit命令,询问是否可以先做些准备工作,参与者收到命令后,会根据自己的情况判断是否执行操作,如果可以则会返回Yes,在协调者收到所有参与者的Yes命令后。第三阶段docommit,所有的参与者执行事务操作,该加库存的加库存、下订单的下订单,完成任务后返回协调者“任务执行完毕”。

TCC(try-confirm-cancel)是补偿业务,可以把它理解为在业务层面对事务一致性的保障。2PC、3PC更多是在数据库层面去保障各个节点的数据一致性。在TCC中,针对每一个操作都需要确认和补偿,当用户请求过来时,通过分布式事务协调器进行事务的启动,在try阶段时是通过try操作去扣除服务的预留资源;然后通过分布式事务协调器去提交事务,在confirm阶段是确认执行业务操作后,在预留的资源基础上进行购买请求;在cancel阶段是处理某个服务的资源尚未预留成功时,取消所有资源的预留请求。

TCC方案倒是很好的保障了数据一致性,但是它也存在一些问题,比如对业务有入侵,我们看到每个服务的操作都包含try、confirm、cancel。

金九银十的跳槽季,正是寻找下一份工作的好时机。而在各大厂的面试中,分布式事务都是常考题,通过本文的介绍,希望小编能助力大家在金九银十的跳槽季找到一个好工作~

金九银十跳槽季,恶补分布式事务相关推荐

  1. 与基础事务管理器的通信失败 存货申请_金九银十跳槽季,恶补分布式事务

    随着微服务架构在各个企业的渗透,大家都在纷纷的将技术架构转型,从单体式应用变成微服务架构式,从单机部署变分布式部署,我们的应用也变成了分布式应用.在分布式应用中,一切就变得复杂了,如何保障数据的一致性 ...

  2. java输入输出流_金九银十准备季:Java异常+Java IO与NIO面试题(含答案)

    写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地址:abel-max/Java-Study ...

  3. 2021金九银十面试季!如何化身BAT面试收割机

    前言 蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力.培训.出国.大公司的经历,还有很多很好的朋友.但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员 ...

  4. 2021秋季“金九银十”跳槽必备:软件测试面试题(附带答案)

    软件测试面试题(带答案) 1. 请自我介绍一下(需简单清楚地表述自己的基本情况,在这过程中要展现出自信,对工作有激情,上进,好学) 面试官您好,我叫###,今年26岁,来自江西九江,就读专业是电子商务 ...

  5. 金九银十求职季,美团高频面试题和答案都帮你准备好啦

    前言 八月底了,马上到大家的找工作的高峰期了!为了帮助大家更好的备战面试和跳槽,可以在众多求职者中脱颖而出,我帮大家准备了丰富的企业真实面试题,大家赶紧收藏吧! 1.说下你最近做的项目,你主要负责什么 ...

  6. 金九银十加薪季,测试题预热一波。

    <孙子·谋攻篇>曰:"知己知彼,百战不殆:不知彼而知己,一胜一负:不知彼,不知己,每战必殆." 做一个自我介绍? 对于刚拿到你的面试简历的面试官,第一个问题基本上就是做 ...

  7. 金九银十准备季:Java IO流面试题(含答案)

    前言 本题集列举了众多IT公司面试真题,对应聘Java程序员职位的常见考点和知识体系都进行的分类和归纳整理. 本题集适合应聘Java和JavaEE职位的程序员作为面试复习.学习和强化的资料,也适合其他 ...

  8. 金九银十加薪季,测试题预热一波

    <孙子·谋攻篇>曰:"知己知彼,百战不殆:不知彼而知己,一胜一负:不知彼,不知己,每战必殆." 1. 做一个自我介绍? 对于刚拿到你的面试简历的面试官,第一个问题基本上 ...

  9. 面对金九银十铜十一你真的准备好了吗?

    作者:回首笑人间,高级Java工程师一枚,热爱研究开源技术,架构师社区合伙人! 前言:又是一年一度的金九银十跳槽季,回首在经历了半个月的求职奔波后,终于又能安稳的静下心来敲代码了,这期间一共面试了十几 ...

最新文章

  1. 中国铁建内网漫游沦陷多个重要部门泄漏大量信息(redis+ssh-keygen免认证登录案例)...
  2. ubuntu下安装Firefox中国版解决Ubuntu与Windows下Firefox账号同步问题(已解决)
  3. equals属于mysql语句吗_equals和==的区别 (Java基础)
  4. DDD - 如何理解Entity与VO
  5. 【免费下载】“后红海”时代,独家揭秘当下大数据体系
  6. 仿抖音注册Dialog实现
  7. Oracle数据库自动存储管理(ASM)
  8. Silverlight C# 游戏开发:L5 3D基本的灯光
  9. js60秒倒计时防刷新
  10. linux驱动编写(pwm驱动)
  11. git中.ssh文件夹在哪_关于git中的https和ssh,权限等问题
  12. 踩了阿里云播放器的一个坑
  13. 互联网+商业计划书(模版)
  14. a5松下驱动器参数设置表_松下伺服驱动器参数设置MSD043A1X
  15. cnpm下载依赖包速度快的原理探究
  16. 有哪些好用的word文件对比工具
  17. ipsec VPN 技术介绍(基础篇一)
  18. 央企总动员:从上电股份,细数风流人物!
  19. mysql5无法注入_MySQL解决SQL注入的另类方法详解_MySQL
  20. 成功领导力的10大关键

热门文章

  1. DS_Store是什么文件
  2. 无法解压文件请重新启动计算机,解压文件是弹出来说4G以上的文件无法解压是怎么回事...
  3. GEE:绘制累积降雨量折线图、降雨量均值折线图
  4. 用selenium实现对微博搜索数据的抓取
  5. html基础和CSS基础
  6. 基于Matlab使用线性FM波形对带状合成孔径雷达系统建模(附源码)
  7. mysql 分库查询_mysql分库后怎么查询
  8. 翻译: 使用非线性卡尔曼滤波来估计信号
  9. CANoe-CAPL接收CAN消息
  10. oracle数据库调优总结(2)-转