大家好,今天想和大家一起聊聊分布式事务。

今天主要说主要内容如下:

* 分布式事务TCC

我们知道布式式事物TCC代表Try、Confirm、Cancel,就是尝试、确认、取消。这个是互联网上比较常见的分布式事务。首先它的运行逻辑如下图。

执行步骤是这样的

  1. 提供两个服务,服务A和服务B
  2. 每个服务里边需要行提供try、conform、cancel的方法用于执行。
  3. 当业务发起分布式事物调用之后,先记录到日志中,然后执行try操作,如果没有问题的话执行confirm操作。
  4. 如果其中某个过程出现了问题此时需要执行cancel操作。

举个例子:

购买一件商品,那么我们有几个服务,一个是订单服务,一个是库存服务,还是一个是货运的服务,当我们购买了一件商品之后,订单服务的状态会变为支付成功,库存的服务将会减少,货运会将这商品进行出库。

此时,我们的try操作就是将这几个服务做成一个“冻结”状态,confirm就是将“冻结”的状态变为“非冻结”,这个时间就是操作成功了,cancel就是将“冻结”状态进行变为之前的形态。我们直接将这个状态由结果变为正在进行的状态,这种好处是可以进行还原,并且设计的时候还能保留结果。

try时各个服务的处理:

订单服务:将订单状态由UNPAID(未支付)变为PAYING(支付中)

库存服务:设置一个frozen_num, 比如库存10个,购买2个。库存数量变为8,frozen_num 变为2,即冻结了2个。

货运服务:货运服务将2个购买的做一个货运单,状态为PREPARING(备货中)

confirm时各个服务的处理

订单服务:将订单的状态变为PAIED(支付成功)

库存服务:将frozen_num由2变为0,说明已经成功卖出去了

货运服务:货运单的状态变为READY(可以发货)

cancel时各个服务的处理

订单服务:状态变为CANCELED(取消)

库存服务:frozen_num变为0,同时库存服务由8变为10个

货运服务:货运服务将2个商品的货运单状态变为CANCELED(取消)

通过这样的服务设计,我们能够很好的将服务在各个状态中转换。当然,里边还有很多细节,比如,某个服务出现了问题,库存服务出现问题了,我们应该怎么办?

我们可以看到图版中还有一个事物协调器,当事务执行try调用所有服务成功的同时也需要执行的中间过程数据进行记录,比如购买库存数2,它的作用就是当某个服务出现问题时可以进行快速的回滚操作。事物协调器也执行confirm、cancel,假如一个服务confirm失败后,则它会调用另外两个服务的cancel方法。

我们执行try成功后,在执行confirm的时候,库存服务出现了问题,比如服务机器挂了,此时我们应该有一个任务,会不断的调用这个库存服务,当然尝试的次数也是有一定的时间间隔,这个可以由我们自己根据业务进行设计,比如一个指数级重试。如果重试到一定次数的时候,那么就需要进行提醒人工进行处理。cancel也同理,这样设计的目的是防止出现服务问题导致的数据不一致。

因为TCC是柔性事物架构,所以互联网大厂使用的也很多。支持的框架也不少,比如tcc-tranaction, ByteTCC, seata都是支持。

使用TCC的时候,我们需要自己大量写一些try、confirm、cancel的逻辑,这样业务代码量也会相对不少,但是由于可以处理高并发量的请求,也深受很多大厂的喜欢。

分布式事务TCC的更多相关文章

  1. Hmily:高性能异步分布式事务TCC框架

    Hmily框架特性 无缝集成Spring,Spring boot start. 无缝集成Dubbo,SpringCloud,Motan等rpc框架. 多种事务日志的存储方式(redis,mongdb, ...

  2. [跨数据库、微服务] FreeSql 分布式事务 TCC/Saga 编排重要性

    前言 FreeSql 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/Gbase/神通/人大金仓/翰高/Clickhouse/MsAcc ...

  3. java基础之----分布式事务tcc

    最近研究了一下分布式事务框架,ttc,总体感觉还可以,当然前提条件下是你要会使用这个框架.下面分层次讲,尽量让想学习的同学读了这篇文章能加以操作运用.我不想废话,直接上干货. 一.什么是tcc?干什么 ...

  4. 微服务痛点-基于Dubbo + Seata的分布式事务(TCC模式)

    前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案. ...

  5. .Net Core with 微服务 - 分布式事务 - TCC

    上一次我们讲解了分布式事务的 2PC.3PC .那么这次我们来理一下 TCC 事务.本次还是讲解 TCC 的原理跟 .NET 其实没有关系. TCC Try 准备阶段,尝试执行业务 Confirm 完 ...

  6. 高性能异步分布式事务TCC框架(资料汇总)

    https://github.com/yu199195/hmily tcc源码解析系列(一)之项目结构 https://yu199195.github.io/2017/10/11/TCC/tcc-on ...

  7. SpringCloud分布式事务TCC实现

    可以参考 http://www.txlcn.org/ 的实现方式

  8. Java之分布式事务TCC

    看这个博客吧! 挺好的. 理论:https://www.cnblogs.com/jajian/p/10014145.html 实践:https://www.cnblogs.com/sessionbes ...

  9. 分布式事务之解决方案(TCC)

    4. 分布式事务解决方案之TCC 4.1. 什么是TCC事务 TCC是Try.Confirm.Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作 :预处理Try.确认Confirm.撤销C ...

  10. 分布式事务二TCC

    分布式事务解决方案之TCC 4.1.什么是TCC事务 TCC是Try.Confirm.Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try.确认Confirm.撤销Cancel ...

随机推荐

  1. 边缘检测及Canny算法

    对边缘的直观理解 边缘有助于我们对图像进行语义理解.直观上,边缘发生在图像强度值变化剧烈的地方 如何描述变化?自然是用导数/梯度 如上图,我们对图中的信号在水平方向上求导,可以得到右侧的导数图像,可以 ...

  2. 【SpringCloud】Eureka服务注册与发现

    Eureka服务注册与发现 补充 Eureka基础知识 什么是服务治理 Spring Cloud封装了Netlix公司开发的Eureka模块来实现服务治理 在传统的rpc远程调用框架中,管理每个服务与 ...

  3. 【Guava】集合工具类-Immutable&Lists&Maps&Sets

    Immutable 如<Effective Java>Item1)所述,在设计类的时候,倾向优先使用静态工厂方法(static factory method)而非构造函数(construc ...

  4. 再说PG的连接

    前面说过连接PG的方法,但是遇到问题又不通了. 按照前面的做法还是不行,正是鼻子气歪了. 到pg老家下载PGODBC,安装了,还是不行. 其实仅仅copy一个libpg.dll是不够的.因为libpg ...

  5. Devops相关考试和认证

    Devops相关考试和认证 Red Hat Certified System Administrator (RHCSA) 能够执行以下任务: 了解和运用必要的工具来处理文件.目录.命令行环境和文档 操 ...

  6. 一款 .NET 开源、免费、轻量级且非侵入性的防火墙软件

    前言 在当今数字化时代,系统服务器网络安全已成为我们日常生活和工作中不可忽视的重要议题.随着网络威胁的日益复杂和多样化,选择一款高效.可靠且易于使用的防火墙软件显得尤为重要.今天大姚给大家分享一款 . ...

  7. DAY3--launch文件编写

    1.launch启动文件简介 到目前为止,每当我们需要运行一个ROS节点或工具时,都需要打开一个新的终端运行一个命令.当系统中的节点数量不断增加时,"每个节点一个终端"的模式会变得 ...

  8. 题解:CF280B Maximum Xor Secondary

    由于正求次大值比较困难,不如逆向思考. 由次大值来找最大值,即对于每个 iii,找到一个 jjj,满足 j<ij<ij<i 并且 ai<aja_i<a_jai​<a ...

  9. WPF 制作三个点从左到右过渡隐藏显示

    Code: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/win ...

  10. 支持国产,为deepin添把柴,全面切换到deepin;

    虽然不是技术型,但是对deepin的支持必须有的. 只希望国产系统越来越好.国产软件越来越好. 软件生态也越来越好! 等搞完高精密仪器问题,cpu自己造了,下来估计就要整顿软件行业. 我这里要时刻准备 ...