SAGA

Seata是什么?一文了解其实现原理

人盡茶涼 提交于 2020-12-09 16:38:18
一、背景 随着业务发展,单体系统逐渐无法满足业务的需求,分布式架构逐渐成为大型互联网平台首选。伴随而来的问题是,本地事务方案已经无法满足,分布式事务相关规范和框架应运而生。 在这种情况下,大型厂商根据分布式事务实现规范,实现了不同的分布式框架,以简化业务开发者处理分布式事务相关工作,让开发者专注于核心业务开发。 Seata就是这么一个分布式事务处理框架,Seata是由阿里开源,前身为Fescar,经过品牌升级变身Seata。 二、分布式事务规范 1.分布式事务相关概念 事务: 一个程序执行单元,是用户定义的一组操作序列,需要满足ACID属性。 本地事务: 事务由本地资源管理器管理。 分布式事务: 事务的操作位于不同的节点。 分支事务: 在分布式事务中,由资源管理器管理的本地事务。 全局事务: 一次性操作多个资源管理器完成的事务,由一组分支事务组成。 2. 分布式事务实现规范 对于本地事务,可以借助DBMS系统来实现事务的管理,但是对于分布式事务,它就无能为力了。对于分布式事务,目前主要有2种思路:XA协议的强一致规范以及柔性事务的最终一致性规范。 2.1 XA XA是基于2阶段提交协议设计的接口标准,实现了XA规范的资源管理器就可以参与XA全局事务。应用承担事务管理器TM工作,数据库承担资源管理器RM工作,TM生成全局事务id,控制RM的提交和回滚。 2.2 柔性事务的最终一致性

还不理解“分布式事务”?这篇给你讲清楚!

只谈情不闲聊 提交于 2020-11-18 17:48:25
这篇文章将介绍什么是分布式事务,分布式事务解决什么问题,对分布式事务实现的难点,解决思路,不同场景下方案的选择,通过图解的方式进行梳理、总结和比较。 相信耐心看完这篇文章,谈到分布式事务,不再只是有“2PC”、“3PC”、“MQ的消息事务”、“最终一致性”、“TCC”等这些知识碎片,而是能够将知识连成一片,形成知识体系。 什么是事务 介绍分布式事务之前,先介绍什么是事务。 事务的具体定义 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。 简单地说,事务提供一种“ 要么什么都不做,要么做全套(All or Nothing) ”机制。 数据库事务的 ACID 属性 事务是基于数据进行操作,需要保证事务的数据通常存储在数据库中,所以介绍到事务,就不得不介绍数据库事务的 ACID 特性。 ACID 指数据库事务正确执行的四个基本特性的缩写,包含: 原子性(Atomicity) 整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。 事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 例如:银行转账,从 A 账户转 100 元至 B 账户,分为两个步骤: 从 A 账户取 100 元

奈学教你五分钟学会分布式事务

北慕城南 提交于 2020-10-15 00:41:21
从概念开始 我们先从事务的定义开始。事务即一系列读存动作被当作一个执行单元,这些动作要么全成功,要么全失败,执行动作的过程中保证数据的隔离性和一致性。 我们抛离数据库这个特定场景,先假设一个数据存储设备,我们定义两个标准操作,一个读一个写。当写操作依赖于读到的数据时,执行的顺序决定了得到的结果。 当单线程时,任意读或写操作在这个数据容器上,他必然是符合上述所有的要求的。 当多线程的时候,任意读写,实际上就是导致标准的 race condition,大部分情况下我们是不知道执行结果的。对于单核cpu来说,多线程实际上是cpu模拟,可以理解成所有的操作是合并到一起顺序执行的。在我们不加以控制的前提下,合并的操作队列必然是相对之间无序的。要想多线程情况下,达到单线程一样的事务性。最简单粗暴的办法,就是保证所有请求串行。 保证所有请求串行执行的最简单粗暴的办法就是锁。任意线程操作的适合,上锁,只有这个线程的所有动作做完之后,才能开始下一线程提供的动作。这样一来不管多少事务并行过来,保证了组内的动作一定是串行的。多线程下的动作组的事务性也就保证了。实际上工程后来的进化也是这样的,把执行顺序会影响结果的操作锁住,强制线性执行。 对于数据库来说也是一样,要完成事务的特性,本质还是锁。数据库实际上把读锁和写锁是分开的,颗粒度更细。mvcc的本质也是锁,可以理解成利用 copy-on-write

ML之sklearn:sklearn.linear_mode中的LogisticRegression函数的简介、使用方法之详细攻略

本小妞迷上赌 提交于 2020-08-17 19:24:21
ML之sklearn:sklearn.linear_mode中的LogisticRegression函数的简介、使用方法之详细攻略 目录 sklearn.linear_mode中的LogisticRegression函数的简介、使用方法 sklearn.linear_mode中的LogisticRegression函数的简介、使用方法 class LogisticRegression Found at: sklearn.linear_model._logisticclass LogisticRegression(BaseEstimator, LinearClassifierMixin, SparseCoefMixin): """ Logistic Regression (aka logit, MaxEnt) classifier. In the multiclass case, the training algorithm uses the one-vs-rest (OvR) scheme if the 'multi_class' option is set to 'ovr', and uses the cross-entropy loss if the 'multi_class' option is set to 'multinomial'. (Currently the

从零入门 Serverless | 一文详解 Serverless 架构模式

柔情痞子 提交于 2020-08-16 05:16:14
作者 | Hongqi 阿里云高级技术专家 本文整理自《Serverless 技术公开课》,关注“ Serverless ”公众号,回复 入门 ,即可获取 Serverless 系列文章 PPT。 什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架构应该是采用 FaaS(函数即服务)和 BaaS(后端服务)服务来解决问题的一种设计。这个定义让我们对 Serverless 的理解稍显清晰,同时可能也造成了一些困扰和争论。 随着需求和技术的发展,业界出现了一些 FaaS 以外的其它形态的 Serverless 计算服务,比如 Google Cloud Run,阿里云推出的面向应用的 Serverless 应用引擎服务以及 Serverless K8s,这些服务也提供了弹性伸缩能力和按使用计费的收费模式,具备 Serverless 服务的形态,可以说进一步扩大了 Serverless 计算的阵营; 为了消除冷启动影响,FaaS 类服务如阿里云的函数计算和 AWS 的 Lambda 相继推出了预留功能,变得不那么“按使用付费”了; 一些基于服务器(Serverful)的后端服务也推出了 Serverless 形态产品,比如 AWS Serverless Aurora,阿里云 Serverless HBase 服务。 这样看来

轻松学 Redux-Saga 视频教程(16 个视频)

放肆的年华 提交于 2020-08-15 16:01:25
轻松学 Redux-Saga 视频教程(16 个视频) 轻松学 Redux-Saga #1 课程简介与 Redux-Saga 介绍 「07:05」 轻松学 Redux-Saga #2 准备环境和安装 Redux 「04:52」 轻松学 Redux-Saga #3 Redux-Saga 的安装和输写第一个 Saga 「07:59」 轻松学 Redux-Saga #4 es6 的 generator part 1 介绍 「05:13」 轻松学 Redux-Saga #5 es6 的 generator part 2 next 方法传参数 「Pro」「05:06」 轻松学 Redux-Saga #6 es6 的 generator part 3 生成器的意义 「Pro」「07:16」 轻松学 Redux-Saga #7 es6 的 generator part 4 自动执行生成器 「Pro」「07:24」 轻松学 Redux-Saga #8 使用 Redux-Saga 处理异步事件 「Pro」「08:00」 轻松学 Redux-Saga #9 实例演练 takeEvery 和 takeLatest 的区别 「Pro」「04:50」 轻松学 Redux-Saga #10 call 方法 「Pro」「03:15」 轻松学 Redux-Saga #11 实例讲解发送 ajax 请求 「Pro」

常见混淆名词

萝らか妹 提交于 2020-08-14 03:50:07
对常见名词的总结 业务逻辑 统称,功能性逻辑 状态机 状态之间的切换流转,以及约束 设计模式 设计最佳实践,会深入到代码层面 工作流 分成:顺序工作流,状态工作流 外部参数,外部事件作为数据交换 saga 事务模型,又叫做长时间运行的事务(Long-running-transaction) 规则引擎 状态机的增强版,一堆堆的规则、但是不体现step步骤关联性 分布式事务 JTA 2阶段提交 TCC TRY/CONFIRM/CANCEL saga 见上 领域事件 带业务色彩的事件(领域层面) 消息机制 消息的发送接收(框架层面) 状态机、工作流、SAGA 区别: 状态机:更偏向瞬时的(尽管没有限制说必须瞬时,但是一般用在瞬时) 工作流:没有状态,也能成为工作流,工作流里的step(步骤)很重要,就是工作流更注重步骤的体现(即便没有状态机也可以,有也可以) SAGA:长事务模型,底层为状态机工作流,其实是建立在上述两者之上的 JTA、TCC、SAGA 区别: JTA:java事务API,有多种不同的实现,一般为两阶段提交,特点:底层持久层必须支持事务特性、改造工作量小 TCC:try、confirm、cancel模型,每一个业务接口需要多写2个接口,代码量大,特点:底层不支持事务特性也可以、改造工作量大 SAGA:多用于三方系统接口多的事务流程,需要给每个业务点多写1个错误时触发的函数

Seata实现分布式事务

筅森魡賤 提交于 2020-08-10 08:08:37
Seata Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 Seata中的组件角色 TC(事务协调者,Transaction Coordinator):是 Server端,要单独部署,维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM(Transaction Manager)和RM(Resource Manager) :是Client端,由业务系统集成。TM:定义全局事务,RM 管理分支事务处理的资源。 Seata管理的分布式事务的典型生命周期 TM要求TC开始一项新的全局事务。TC生成代表全局事务的XID。 XID通过微服务的调用链传播。 RM将本地事务注册为XID到TC的相应全局事务的分支。 TM要求TC提交或回退相应的XID全局事务。 TC驱动XID的相应全局事务下的所有分支事务以完成分支提交或回滚。 Seata的事务模式 Seata针对不同的业务场景提供了四种不同的事务模式,具体如下 AT模式: AT 模式的一阶段、二阶段提交和回滚(借助undo_log表来实现)均由 Seata 框架自动生成,用户只需编写“业务SQL”,便能轻松接入分布式事务,AT 模式是一种对业务无任何侵入的分布式事务解决方案。 TTC模式: 相对于