解析探秘fescar分布式事务实现原理

解析探秘fescar分布式事务实现原理

分布式事务是一个难点,因为分布式事务牵涉到多个不同的计算节点之间的协作,要实现一个高效且可靠的分布式事务控制系统并不是一件容易的事。在这篇文章中,我们将讲解如何解析探秘fescar分布式事务实现原理,并通过两个示例说明其工作原理。

什么是fescar

fescar是一个基于Java的分布式事务解决方案,旨在解决分布式事务控制的难点。它采用了类似于2PC(两阶段提交协议)的机制,但不同之处在于fescar具备更高的性能和更好的可扩展性,同时避免了"阻塞式"和"单点故障"等问题。fescar被广泛应用于电商、支付、体育和航空等行业。

fescar实现原理

fescar的分布式事务控制框架主要由两部分组成:事务协调者(Transaction Coordinator)和事务参与者(Transaction Participant)。

  • 事务协调者:它是整个分布式事务环境的核心,负责协调和管理整个事务的生命周期,它维护着一个全局事务记录(Transaction Record),通过二阶段提交(Two-Phase Commit)协议来保证数据一致性。

  • 事务参与者:它是参与分布式事务的业务逻辑服务,它具备对全局事务提交和回滚的能力,可以将自身纳入到全局事务的管理之中。

fescar的实现流程如下:

(1)全局事务的启动

  • 客户端调用fescar提供的API,创建一个全局事务分支(Global Transaction Branch),并将该分支内涵的信息(事务ID、服务名称等)发送给服务端。

(2)事务的注册

  • fescar服务端接收到客户端的请求后,先在服务端的全局事务记录中创建一个事务记录,并生成一个唯一的事务ID。

  • fescar服务端将该事务ID返回给客户端,并以该ID作为分支事务的ID,帮助客户端在服务端的全局事务记录中注册对应的分支事务。

(3)分支事务的注册

  • 客户端在得到事务ID后,将该ID放入自己业务逻辑服务所需要的上下文信息中。

  • 当客户端的业务逻辑服务被执行时,fescar会首先判断这是一个全局事务分支。

  • 当确认是全局事务分支时,fescar将从上下文中获取事务ID,并用该ID注册分支事务。

(4)业务逻辑服务调用

  • 当上下文中的事务ID被确认,表示该方法是一个"分布式事务"的一部分。

  • fescar会自动在Context上下文中记录全局事务的ID和分支事务的ID。

  • 接下来,业务逻辑服务会执行,并异步地将更新操作发送到各个分支事务的处理程序。

(5)提交/回滚分支事务

  • 当分支事务处理成功后,它会将该分支的执行状态和结果通知给事务协调者,并等待全局事务的提交。

  • 处理程序仅当在检测到全局事务执行成功后才会提交分支事务,否则它将撤销当前分支事务的所有操作(即回滚操作)。

(6)全局事务的提交

  • 当所有的分支事务都已被提交,fescar的事务协调者将发送一个"提交"命令给所有的所有的分支事务。然后等待所有参与者的响应。

  • 如果所有分支事务都提交成功,fescar会标记全局事务为"成功"状态,并返回结果给客户端。

示例一:电商订单支付示例

假设有一个大型的电商站点,支持同时在线购买多个商品,一个订单可以购买多件商品。此时,我们需要处理"下单"(即创建订单)和"付款"(即减少用户的账面余额)两个操作的原子性。

  1. 当用户点击"购买"按钮时,会触发一个下单请求,该请求会自动注册一个全局事务分支。

  2. 在下单请求完成后,启动事务注册,fescar服务端为该请求生成唯一的事务ID。

  3. 在收到事务ID后,创建订单信息,并提交一个"提交"事务操作。

  4. 接下来,启动一个付款请求,该请求会查询用户账户余额,并判断余额是否足够,如果足够则提交一个"提交"事务操作,如果余额不足则提交一个"回滚"事务操作。

  5. 当下单和付款操作均执行成功后,fescar事务协调者会向所有已注册的分支事务发送提交命令,完成全局事务提交。

  6. 如果在中途发生意外情况(比如付款请求中用户账户余额不足),fescar事务协调者会向所有已注册的分支事务发送回滚命令,回滚分支事务,避免出现数据异常的情况。

示例二:旅游预订示例

假设有一个旅游预订应用,客户可以在线预订机票、酒店和租车等服务。在客户预订这些服务时,需要提供分布式事务保证原子性。

  1. 当客户预订一项服务时,会发送一个预订请求,该请求会先自动注册一个全局事务分支。

  2. 在收到事务ID后,服务提供方将分支事务注册到fescar事务协调者中。

  3. 服务提供方将订单/预订信息存储在数据库中,并异步地将数据更新发送到各个已注册的分支事务的处理程序中。

  4. 如果遇到出现预订失败的场景(如酒店或者机票已满),所有此次预订涉及到的分支事务都将会被回滚。

  5. 当所有分支事务都已成功提交时,fescar协调者会发送提交命令到每个已注册的分支事务,完成全局事务提交。

这两个示例说明了fescar的工作原理及其应用场景。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解析探秘fescar分布式事务实现原理 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • php连接微软MSSQL(sql server)完全攻略

    PHP连接微软MSSQL是一项非常常见的任务,但一些开发人员可能会有一些困难,因为两个不同的技术栈可以相互交互,因此可能需要一些额外的配置和处理。本文将完整介绍连接微软MSSQL的过程和所需的所有步骤。 前提条件 在开始与MSSQL进行连接之前,我们需要确保已经安装了以下软件: PHP Microsoft SQL Server驱动程序 Microsoft O…

    database 2023年5月22日
    00
  • Mysql中where与on的区别及何时使用详析

    下面是关于”Mysql中WHERE与ON的区别及何时使用”的完整攻略: 区别 WHERE WHERE是用于筛选行的(即对于SELECT语句或者UPDATE语句,我们使用WHERE语句来筛选需要处理的行记录); WHERE是在数据表中,查询完成后进行过滤的,即先从表中检索记录,再通过WHERE进行判断,将符合条件的记录返回; 示例1: SELECT * FRO…

    database 2023年5月22日
    00
  • MySQL怎样将子查询修改为表连接

    将子查询修改为表连接的好处是可以提高查询效率和可读性。子查询需要执行完整的子语句,然后将结果作为内存中的表进行连接操作;而表连接只需要执行一次查询,将两个表按照条件关联起来,比较快速、高效。 下面提供一个MySQL子查询修改为表连接的示例: 原始查询语句: SELECT * FROM users WHERE user_id IN (SELECT user_i…

    MySQL 2023年3月9日
    00
  • Navicat远程连接SQL Server并转换成MySQL步骤详解

    让我详细讲解一下“Navicat远程连接SQL Server并转换成MySQL步骤详解”的完整攻略。 概述 Navicat是一种著名的数据库管理工具,可用于多种数据库,包括MySQL、SQL Server、Oracle等。本攻略将逐步讲解如何使用Navicat远程连接SQL Server数据库并将其转换为MySQL数据库。 步骤 步骤1:安装Navicat …

    database 2023年5月22日
    00
  • MySQL数据类型DECIMAL用法

    MySQL DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。 要定义数据类型为DECIMAL的列,请使用以下语法: 1 column_name  DECIMAL(P,D); 在上面的语法中: P是表示有效数字数的精度。 P范围为1〜65。 D是表示小数点后的位数。 D的范围…

    MySQL 2023年4月13日
    00
  • Redis–集群Cluster(槽指派、重新分片)

    转自https://www.cnblogs.com/xiang9286/p/10948614.html   集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。   1.节点 一个节点就是一个运行在集群模式下的Redis服务器。启动Redis服务器时,通过判断cluster-enabled选项,选择是否开启集群模式。(Yes开启集群,N…

    Redis 2023年4月12日
    00
  • MySQL——修改root密码的4种方法(以windows为例)

    方法1: 用SET PASSWORD命令 首先登录MySQL。 格式:mysql> set password for 用户名@localhost = password(‘新密码’); 例子:mysql> set password for root@localhost = password(‘123’); 方法2:用mysqladmin 格式:my…

    MySQL 2023年4月16日
    00
  • MySQL性能优化 出题业务SQL优化

    MySQL性能优化 出题业务SQL优化是一项非常重要的工作,能够有效提高网站的响应速度和用户体验,下面是一些具体步骤供参考: 第一步:确定问题 在进行任何优化之前,你首先需要确定问题所在。一些常见的MySQL性能问题包括响应时间过长、内存使用过高、查询慢等。你可以通过各种工具来分析MySQL运行状态,如SHOW STATUS、EXPLAIN等。 第二步:优化…

    database 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部