金九银十跳槽季,恶补分布式事务
随着微服务架构在各个企业的渗透,大家都在纷纷的将技术架构转型,从单体式应用变成微服务架构式,从单机部署变分布式部署,我们的应用也变成了分布式应用。在分布式应用中,一切就变得复杂了,如何保障数据的一致性变为最重要的问题。在金九银十的跳槽季中,分布式事务也成为面试中的必考题,因此今天给大家恶补一波分布式事务知识,祝大家可以找到一个满意的工作。
在单体式应用中,因为所有的事务(即某个动作的全流程,比如购物包含付款、下订单、减库存三个操作)都在一个环境里完成,自然可以保障操作的原子性(事务要么全部成功,要么全部失败)、一致性(事务执行前后,数据从一个状态到另一个状态必须是一致的)、隔离性(多个并发事务相互隔离,互不干扰)、持久性(事务完成后,对于数据库的更改是永久保存的,不能回滚)。而在微服务架构的分布式应用中,事务变成了分布式事务(即事务的参与者、支持事务的服务器、资源服务器、事务服务器分别位于不同的分布式系统的不同节点上),一个操作拆分成了多个服务完成,一个服务又在多台机器上完成。
那么在分布式事务中,如何保障事务的一致性呢?解决办法是基于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。
金九银十的跳槽季,正是寻找下一份工作的好时机。而在各大厂的面试中,分布式事务都是常考题,通过本文的介绍,希望小编能助力大家在金九银十的跳槽季找到一个好工作~
金九银十跳槽季,恶补分布式事务相关推荐
- 与基础事务管理器的通信失败 存货申请_金九银十跳槽季,恶补分布式事务
随着微服务架构在各个企业的渗透,大家都在纷纷的将技术架构转型,从单体式应用变成微服务架构式,从单机部署变分布式部署,我们的应用也变成了分布式应用.在分布式应用中,一切就变得复杂了,如何保障数据的一致性 ...
- java输入输出流_金九银十准备季:Java异常+Java IO与NIO面试题(含答案)
写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地址:abel-max/Java-Study ...
- 2021金九银十面试季!如何化身BAT面试收割机
前言 蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力.培训.出国.大公司的经历,还有很多很好的朋友.但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员 ...
- 2021秋季“金九银十”跳槽必备:软件测试面试题(附带答案)
软件测试面试题(带答案) 1. 请自我介绍一下(需简单清楚地表述自己的基本情况,在这过程中要展现出自信,对工作有激情,上进,好学) 面试官您好,我叫###,今年26岁,来自江西九江,就读专业是电子商务 ...
- 金九银十求职季,美团高频面试题和答案都帮你准备好啦
前言 八月底了,马上到大家的找工作的高峰期了!为了帮助大家更好的备战面试和跳槽,可以在众多求职者中脱颖而出,我帮大家准备了丰富的企业真实面试题,大家赶紧收藏吧! 1.说下你最近做的项目,你主要负责什么 ...
- 金九银十加薪季,测试题预热一波。
<孙子·谋攻篇>曰:"知己知彼,百战不殆:不知彼而知己,一胜一负:不知彼,不知己,每战必殆." 做一个自我介绍? 对于刚拿到你的面试简历的面试官,第一个问题基本上就是做 ...
- 金九银十准备季:Java IO流面试题(含答案)
前言 本题集列举了众多IT公司面试真题,对应聘Java程序员职位的常见考点和知识体系都进行的分类和归纳整理. 本题集适合应聘Java和JavaEE职位的程序员作为面试复习.学习和强化的资料,也适合其他 ...
- 金九银十加薪季,测试题预热一波
<孙子·谋攻篇>曰:"知己知彼,百战不殆:不知彼而知己,一胜一负:不知彼,不知己,每战必殆." 1. 做一个自我介绍? 对于刚拿到你的面试简历的面试官,第一个问题基本上 ...
- 面对金九银十铜十一你真的准备好了吗?
作者:回首笑人间,高级Java工程师一枚,热爱研究开源技术,架构师社区合伙人! 前言:又是一年一度的金九银十跳槽季,回首在经历了半个月的求职奔波后,终于又能安稳的静下心来敲代码了,这期间一共面试了十几 ...
最新文章
- 中国铁建内网漫游沦陷多个重要部门泄漏大量信息(redis+ssh-keygen免认证登录案例)...
- ubuntu下安装Firefox中国版解决Ubuntu与Windows下Firefox账号同步问题(已解决)
- equals属于mysql语句吗_equals和==的区别 (Java基础)
- DDD - 如何理解Entity与VO
- 【免费下载】“后红海”时代,独家揭秘当下大数据体系
- 仿抖音注册Dialog实现
- Oracle数据库自动存储管理(ASM)
- Silverlight C# 游戏开发:L5 3D基本的灯光
- js60秒倒计时防刷新
- linux驱动编写(pwm驱动)
- git中.ssh文件夹在哪_关于git中的https和ssh,权限等问题
- 踩了阿里云播放器的一个坑
- 互联网+商业计划书(模版)
- a5松下驱动器参数设置表_松下伺服驱动器参数设置MSD043A1X
- cnpm下载依赖包速度快的原理探究
- 有哪些好用的word文件对比工具
- ipsec VPN 技术介绍(基础篇一)
- 央企总动员:从上电股份,细数风流人物!
- mysql5无法注入_MySQL解决SQL注入的另类方法详解_MySQL
- 成功领导力的10大关键