上一次我们讲解了分布式事务的 2PC.3PC .那么这次我们来理一下 TCC 事务.本次还是讲解 TCC 的原理跟 .NET 其实没有关系. TCC Try 准备阶段,尝试执行业务 Confirm 完成业务 Cancel 回滚准备阶段的业务 TCC 事务其实是 2PC 的一个扩展.上一次我们说了 2PC ,在二阶段进行事务提交.因为 2PC 基本上是利用数据库的 事务能力进行 commit ,其实这里还有可能出现一种 rollback 情况. TCC 就是把 2PC 的二阶段细化了,拆分成了 C…
前面我们讲了分布式事务的2PC.3PC , TCC 的原理.这些事务其实都在尽力的模拟数据库的事务,我们可以简单的认为他们是一个同步行的事务.特别是 2PC,3PC 他们完全利用数据库的事务能力,在一阶段开始事务后不进提交会严重影响应用程序的并发性能.TCC 一阶段虽然不会阻塞数据库,但是它同样是在尽力追求同时成功同时失败的一致性要求.但是在很多时候,我们的应用程序的核心业务为了追求更高的性能.更高的可用性,可以允许在一段时间内的数据不一致性,只需要在最终时刻数据是一致就可以了.基于以上场景我们…
最近比较忙,好久没更新了.这次我们来聊一聊分布式事务. 在微服务体系下,我们的应用被分割成多个服务,每个服务都配置一个数据库.如果我们的服务划分的不够完美,那么为了完成业务会出现非常多的跨库事务.即使按照 DDD 的原则来切分服务还是免不了有的业务场景需要多个业务同时提交成功或者同时回滚的场景.比如会员使用积分下订单这个场景,那么会员服务的积分扣减需要跟订单下单成功同时完成.如果下单成功,但是扣减积分接口失败,那么就会造成数据的不一致性.这个时候我们就需要使用分布式事务来保证数据的一致性. 由于…
Spring Cloud Alibaba | 微服务分布式事务之Seata 本篇实战所使用Spring有关版本: SpringBoot:2.1.7.RELEASE Spring Cloud:Greenwich.SR2 Spring CLoud Alibaba:2.1.0.RELEASE 1. 概述 在构建微服务的过程中,不管是使用什么框架.组件来构建,都绕不开一个问题,跨服务的业务操作如何保持数据一致性. 2. 什么是分布式事务? 首先,设想一个传统的单体应用,无论多少内部调用,最后终归是在同一…
在亿级流量架构之分布式事务解决方案对比中, 已经简单阐明了从本机事务到分布式事务的演变过程, 文章的最后简单说明了TCC事务, 这儿将会深入了解TCC事务是原理, 以及理论支持, 最后会用Demo举例实现. XA协议 在上面提到的文章中, 分布式事务直接讲二阶段提交, 思维逻辑有些断层, 但是那毕竟是比较解决方案, 在这儿从理论上推导分布式事务的根基, 也就是为什么要二阶段提交. 在单体应用中, 往往由自己来保证事务的一致性, 但是分布式中, 涉及到跨网络调用就难以保证, 从理论上讲两台机器理论…
前言 FreeSql 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/Gbase/神通/人大金仓/翰高/Clickhouse/MsAccess Ado.net 数据库,以及 Odbc 的专门实现包. FreeSql.Cloud 为 FreeSql 提供跨数据库访问,分布式事务TCC.SAGA解决方案,支持 .NET Core 2.1+, .NET Framework 4.0+. 本文主要讲解从跨数据库访问,到分布式事务落地,再升级到…
前面对于分布式事务也讲了好几篇了(可靠消息最终一致性 分布式事务 - TCC 分布式事务 - 2PC.3PC),但是还没有实战过.那么本篇我们就来演示下如何在 .NET 环境下实现一个基于可靠消息的分布式事务.基于可靠消息的分布式事务流程上还是比较清晰明了的,但是要用代码去一个个实现还是比较费事的.通过分析可以发现这个事务的关键点就是要在真正的业务逻辑的前面.后面插入对应的流程.很明显这种流程是可以通过 AOP 技术来简化操作的.于是就有了 AgileDT .AgileDT 使用 Natasha…
前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这种方式的缺点.那么下面讲如何在spring cloud+dotnet core的应用下进行服务调用. 代码实现 假设一种场景,有一个订单服务,有一个产品服务,其中产品服务是由两个服务节点组成一个集群.需求是订单服务访问产品服务的一个API接口.根据上一章文章的内容创建3个应用程序ServiceOne…
前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这一功能.这一章的例子,客户端的部分我们采用Java来实现.Steeltoe更新以后我会及时把 .Net Core的实现方式补全. 实际上也并不需要重启,客户端调用IConfigurationRoot.Reload()方法也可以实现这个功能,但是去请求客户端也不是一个好办法,因为N节点的配置中心客户端…
前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本是Java,.NET的天下,后端渲染页面的时代已经一去不复返,当然这是时代的进步.前端调用后端服务目前大多数基于JSON的HTTP服务,那么就引入的我们今天的内容.客户端访问服务的时候怎么保证安全呢?很多同学都听说过OAuth2.0,都知道这个是用来做第三方登录的,实际上它也可以用来做Api的认证授…