出席分布式事务Seata 1.0.0 GA典礼

摘自:https://www.cnblogs.com/sanshengshui/p/12094894.html

前言

图中那个红衣服的就是本人

什么是分布式事务

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。

简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。

本质上来说,分布式事务就是为了保证不同数据库的数据一致性

分布式事务的基础

数据库的 ACID 满足了数据库本地事务的基础,但是它无法满足分布式事务,这个时候衍生了 CAP 和 BASE 两个经典理论。

CAP理论

  • C (一致性):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • A (可用性):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
  • P (分区容错性):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在 C 和 A 之间做出选择。

    Eureka 主从同步是 AP 系统

    Zookeeper 是 CP 系统

BASE理论

BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性) 三个短语的缩写。是对 CAP 中AP 的一个扩展

  1. BA 基本可用:分布式系统在出现故障时,允许损失部分可用功能,保证核心功能可用。
  2. S 软状态:允许系统中存在中间状态,这个状态不影响系统可用性,这里指的是 CAP 中的不一致。
  3. E 最终一致:最终一致是指经过一段时间后,所有节点数据都将会达到一致。

BASE 解决了 CAP 中理论没有网络延迟,在 BASE 中用软状态和最终一致,保证了延迟后的一致性。

BASE 和 ACID 是相反的,它完全不同于 ACID 的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。

对于大部分的分布式应用而言,只要数据在规定的时间内达到最终一致性即可。

我们可以把符合传统的 ACID 叫做刚性事务,把满足 BASE 理论的最终一致性事务叫做柔性事务。

具体到分布式事务的实现上,业界主要采用了 XA 协议的强一致规范以及柔性事务的最终一致规范

What‘s Seata

Seata 是一款开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务。

Github: https://github.com/seata/seata

官网: https://seata.io/

  1. 支持各微服务框架: 目前已支持Dubbo、Spring Cloud、Sofa-RPC、Motan和gRPC等RPC框架,其他框架持续集成中。
  2. AT自动补偿模式: 提供无侵入自动补偿的事务模式,目前已支持MySQL、Oracle的自动补偿模式,PostgreSQL、H2开发中。
  3. TCC模式: 支持用户使用TCC灵活扩展事务。
  4. Saga模式: 提供长事务和服务编排解决方案。
  5. 高可用: 支持基于数据库存储的集群模式,水平扩展能力强。
  6. 高扩展性: 支持各类配置中心、注册中心、序列化、存储、协议序列化、负载均衡等SPI扩展。

AT自动补偿模式

XA 是 X/Open CAE Specification (Distributed Transaction Processing)模型,它定义的 TM(Transaction Manager)与 RM(Resource Manager)之间进行通信的接口。

Java中 的 javax.transaction.xa.XAResource 定义了 XA 接口,它依赖数据库厂商对 jdbc-driver 的具体实现。

  • mysql-connector-java-5.1.30 的实现可参 com.mysql.jdbc.jdbc2.optional.MysqlXAConnection 类。

在 XA 规范中,数据库充当 RM 角色,应用需要充当 TM 的角色,即生成全局的 txId ,调用 XAResource 接口,把多个本地事务协调为全局统一的分布式事务。

目前 XA 有两种实现:

  • 基于一阶段提交( 1PC ) 的 XA 。
  • 基于二阶段提交( 2PC ) 的 XA 。

AT自动补偿模式就是基于一阶段提交的弱XA

核心价值

  1. 低成本:编程模型 不变,轻依赖 不需要为分布式事务场景做特定设计。
  2. 高性能:一阶段提交,不阻塞;连接释放,保证整个系统的吞吐。
  3. 高可用:极端的异常情况下,可以暂时 跳过异常事务,保证系统可用。

能力边界

业务无侵入 业务侵入
AT TCC
XA Saga

TCC模式

TCC 模型是把锁的粒度完全交给业务处理,它需要每个子事务业务都实现Try-Confirm / Cancel 接口。

TCC 模式本质也是 2PC ,只是 TCC 在应用层控制。

  • Try:

    • 尝试执行业务
    • 完成所有业务检查(一致性)
    • 预留必须业务资源(准隔离性)
  • Confirm:
    • 确认执行业务;
    • 真正执行业务,不作任何业务检查
    • 只使用Try阶段预留的业务资源
    • Confirm 操作满足幂等性
  • Cancel:
    • 取消执行业务
    • 释放Try阶段预留的业务资源
    • Cancel操作满足幂等性

这三个阶段,都会按本地事务的方式执行。不同于 XA的prepare ,TCC 无需将 XA 的投票期间的所有资源挂起,因此极大的提高了吞吐量。

Saga模式

基础原理

  1. 核心思想是将长事务拆分为多个本地短事务,由 Saga 事务协调器协调,如果正常结束那就正常完成,如果某个步骤失败,则根据相反顺序一次调用补偿操作
  2. Hector & Kenneth 发表论? Sagas (1987)

使用场景

  • 业务流程长,业务流程多
  • 参与者包含其他公司或遗留系统服务,无法提供TCC模式要求的三个接口
  • 典型业务系统: 如金融网络(与外部机构对接)、互联网微贷、渠道整合、分布式架构下服务集成等业务系统
  • 银行业金融机构使用广泛

优势

  • 一阶段提交本地事务、无锁、高性能。
  • 参与者可异步执行、高吞吐
  • 补偿服务易于实现

缺点

  • 不保证隔离

参会照片

会议易拉宝,地点放在杭州青年众创空间

会议内部图片

seata贴纸

原文地址:https://www.cnblogs.com/xichji/p/12100216.html

时间: 2024-11-06 03:33:17

出席分布式事务Seata 1.0.0 GA典礼的相关文章

阿里分布式事务seata入门(采坑)

1. 阿里分布式事务seata入门(采坑) 1.1. 前言 seata是feascar改名而来,这是阿里在19年年初开源出来的分布式事务框架,当初刚出来的时候就想研究下了,一直拖到了现在,目前是0.8.0版本,看版本就知道这还是个比较新的项目,但现在已经有上万个Star了,可见阿里的影响力.但是虽然有阿里背书,该挖坑还得挖,它宣称集成它比较简单,导致的是现在它的文档优点残缺不全,好几个文档标题点进去都没内容,不知道为什么删了,可能是更新比较快,文档跟不上节奏索性删了[手动滑稽] 1.2. 快速开

分布式事务之消息补偿解决方案

一.数据库本地事务 先看看数据库事务的定义:单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行 这个比较容易理解,操作过数据库的一般都懂,既是业务需求涉及到多个数据表操作的时候,需要用到事务 要么一起更新,要么一起不更新,不会出现只更新了部分数据表的情况,下边看看数据库事务的使用 1 begin tran 2 begin try 3 update Table1 set Field = 1 where ID = 1 4 update Table2 set Field = 2 whe

EntityFrameWork使用TransactionScope分布式事务,存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。刷新 ObjectStateManager 项 错误

最近在开发一个小型的物业管理系统,系统其中有一个功能需要每个月按抄的水表.电表等生成相应的费用,数据库主要的基础数据表有大楼水.电表.楼层水.电表.房间水电表:其中大楼和楼层的水电表是用于计算公摊的:系统设计有一个费用的统计表,表名ChargeAccountMaster,表内设计的有一个字段ID,主键 . 自增长:计算时由于是数据核算统计,所以引入事务计算数据的同时,也会把相应计算的结果回写回基础数据表中,计算的类是service层,框架的ORM用的是EF,就没有采用本地事务,采用了分布式事务T

OceanBase 1.0 的分布式事务

OceanBase 1.0 的分布式事务 数据库的功能强大而繁杂,其中,“事务(Transaction)”是使用者不自觉就会用到的功能.作为开发数据库的工程师,我们是倾注了大量的精力和时间在事务这个功能上,并且深知数据库系统实现事务是付出了很大代价的.这代价不仅包括数据库软件开发的工作,而且还包括数据库运行过程中的代价.换句话说,在其他情况不变的时候,如果数据库放弃事务功能,能获得更好的性能.在数据库软件刚出现时,并没有事务这个功能,但这种情况下,使用数据库开发软件很多时候无法保证数据的正确性和

spring3.0+Atomikos 构建jta的分布式事务

摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0已经不再支持jtom了,不过我们可以用第三方开源软件atomikos(http://www.atomikos.com/)来实现. Atomikos是目前在分布式事务管理中做得相当不错的开源软件.有10年以上的经验,Atomikos保障您的关键事务和 防止昂贵的数据丢失在发生系统故障或事故中.Atomikos支持XA(全局事务)和NON-XA(非全局事务),NON-XA效率高 于XA.本文主

struts2+spring3.2.9+hibernate4.2.0+atomikos3.8实现分布式事务JTA

目前开发的J2EE系统用到了两个数据源,需要分布式事物(JTA)的支持,但是tomcat不支持JTA,开发调试不太方便,本文通过使用atomikos实现了分布式事务的支持,理论可以运行在任何java容器中. 一.将以下jar包放到lib目录下 二.将配置文件jta.properties放到WEB-INF目录下,内容如下: 三.修改spring配置文件,建立2个数据源: <bean id="dataSource" class="com.atomikos.jdbc.Atom

Spring Boot 集成 Seata 解决分布式事务问题

文章首发于公众号<程序员果果>地址 : https://mp.weixin.qq.com/s/aDhGG3Y2t4lPYetK01Wmxg seata 简介 Seata 是 阿里巴巴2019年开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务.在 Seata 开源之前,Seata 对应的内部版本在阿里内部一直扮演着分布式一致性中间件的角色,帮助阿里度过历年的双11,对各业务进行了有力的支撑.经过多年沉淀与积累,2019.1 Seata 正式宣布对外开源 .目前

Spring Cloud Alibaba | 微服务分布式事务之Seata

Spring Cloud Alibaba | 微服务分布式事务之Seata 本篇实战所使用Spring有关版本: SpringBoot:2.1.7.RELEASE Spring Cloud:Greenwich.SR2 Spring CLoud Alibaba:2.1.0.RELEASE 1. 概述 在构建微服务的过程中,不管是使用什么框架.组件来构建,都绕不开一个问题,跨服务的业务操作如何保持数据一致性. 2. 什么是分布式事务? 首先,设想一个传统的单体应用,无论多少内部调用,最后终归是在同一

Spring Cloud同步场景分布式事务怎样做?试试Seata

一.概述 在微服务架构下,虽然我们会尽量避免分布式事务,但是只要业务复杂的情况下这是一个绕不开的问题,如何保证业务数据一致性呢?本文主要介绍同步场景下使用Seata的AT模式来解决一致性问题. Seata是 阿里巴巴 开源的 一站式分布式事务解决方案 中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题 ? 二.Seata介绍 整体事务逻辑是基于 两阶段提交 的模型,核心概念包括以下3个角色: TM:事务的发起者.用来告诉 TC,全局事务的开始,提交,回滚.