禅城教育网站建站如何开发手机网站
禅城教育网站建站,如何开发手机网站,清远短视频推广,软件或者网站的搜索怎么做转自#xff1a; https://blog.csdn.net/bjweimengshu/article/details/79607522 假如没有分布式事务 在一系列微服务系统当中#xff0c;假如不存在分布式事务#xff0c;会发生什么呢#xff1f;让我们以互联网中常用的交易业务为例子#xff1a; 上图中包含了库存和订…转自 https://blog.csdn.net/bjweimengshu/article/details/79607522 假如没有分布式事务 在一系列微服务系统当中假如不存在分布式事务会发生什么呢让我们以互联网中常用的交易业务为例子 上图中包含了库存和订单两个独立的微服务每个微服务维护了自己的数据库。在交易系统的业务逻辑中一个商品在下单之前需要先调用库存服务进行扣除库存再调用订单服务创建订单记录。 正常情况下两个数据库各自更新成功两边数据维持着一致性。 但是在非正常情况下有可能库存的扣减完成了随后的订单记录却因为某些原因插入失败。这个时候两边数据就失去了应有的一致性。 什么是分布式事务 分布式事务用于在分布式系统中保证不同节点之间的数据一致性。分布式事务的实现有很多种最具有代表性的是由Oracle Tuxedo系统提出的XA分布式事务协议。 XA协议包含两阶段提交2PC和三阶段提交3PC两种实现这里我们重点介绍两阶段提交的具体过程。 在魔兽世界这款游戏中副本组团打BOSS的时候为了更方便队长与队员们之间的协作队长可以发起一个“就位确认”的操作 当队员收到就位确认提示后如果已经就位就选择“是”如果还没就位就选择“否”。 当队长收到了所有人的就位确认就会向所有队员们发布消息告诉他们开始打BOSS。 相应的在队长发起就位确认的时候有可能某些队员还并没有就位 以上就是魔兽世界当中组团打BOSS的确认流程。这个流程和XA分布式事务协议的两阶段提交非常相似。 那么XA协议究竟是什么样子呢在XA协议中包含着两个角色事务协调者和事务参与者。让我们来看一看他们之间的交互流程 第一阶段 在XA分布式事务的第一阶段作为事务协调者的节点会首先向所有的参与者节点发送Prepare请求。 在接到Prepare请求之后每一个参与者节点会各自执行与事务有关的数据更新写入Undo Log和Redo Log。如果参与者执行成功暂时不提交事务而是向事务协调节点返回“完成”消息。 当事务协调者接到了所有参与者的返回消息整个分布式事务将会进入第二阶段。 第二阶段 在XA分布式事务的第二阶段如果事务协调节点在之前所收到都是正向返回那么它将会向所有事务参与者发出Commit请求。 接到Commit请求之后事务参与者节点会各自进行本地的事务提交并释放锁资源。当本地事务完成提交后将会向事务协调者返回“完成”消息。 当事务协调者接收到所有事务参与者的“完成”反馈整个分布式事务完成。 以上所描述的是XA两阶段提交的正向流程接下来我们看一看失败情况的处理流程 第一阶段 第二阶段 在XA的第一阶段如果某个事务参与者反馈失败消息说明该节点的本地事务执行不成功必须回滚。 于是在第二阶段事务协调节点向所有的事务参与者发送Abort请求。接收到Abort请求之后各个事务参与者节点需要在本地进行事务的回滚操作回滚操作依照Undo Log来进行。 以上就是XA两阶段提交协议的详细过程。 XA两阶段提交的不足 XA两阶段提交究竟有哪些不足呢 1.性能问题
XA协议遵循强一致性。在事务执行过程中各个节点占用着数据库资源只有当所有节点准备完毕事务协调者才会通知提交参与者提交后释放资源。这样的过程有着非常明显的性能问题。 2.协调者单点故障问题
事务协调者是整个XA模型的核心一旦事务协调者节点挂掉参与者收不到提交或是回滚通知参与者会一直处于中间状态无法完成事务。 3.丢失消息导致的不一致问题。
在XA协议的第二个阶段如果发生局部网络问题一部分事务参与者收到了提交消息另一部分事务参与者没收到提交消息那么就导致了节点之间数据的不一致。 如果避免XA两阶段提交的种种问题呢有许多其他的分布式事务方案可供选择 1.XA三阶段提交
XA三阶段提交在两阶段提交的基础上增加了CanCommit阶段并且引入了超时机制。一旦事物参与者迟迟没有接到协调者的commit请求会自动进行本地commit。这样有效解决了协调者单点故障的问题。但是性能问题和不一致的问题仍然没有根本解决。 2.MQ事务
利用消息中间件来异步完成事务的后一半更新实现系统的最终一致性。这个方式避免了像XA协议那样的性能问题。 3.TCC事务
TCC事务是Try、Commit、Cancel三种指令的缩写其逻辑模式类似于XA两阶段提交但是实现方式是在代码层面来人为实现。 ———————————————— 版权声明本文为CSDN博主「程序员小灰」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。 原文链接https://blog.csdn.net/bjweimengshu/article/details/79607522
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87298.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!