悟了!原来这才是分布式事务的正确打开方式

论坛 期权论坛     
选择匿名的用户   2021-5-28 02:20   80   0
<h1>一、分布式事务的概念</h1>
<h1>1,什么是事务</h1>
<p>事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。</p>
<h1>2,本地事务</h1>
<p>数据库事务的四大特性 ACID:</p>
<ul><li>A(Atomic): <strong>原子性</strong> ,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失败的情况。</li><li>C(Consistency): <strong>一致性</strong> ,在事务执行前后,数据库的一致性约束没有被破坏。比如:张三向李四转100元,转账前和转账后的数据是正确状态这叫一致性,如果出现张三转出100元,李四账户没有增加100元这就出现了数据错误,就没有达到一致性。</li><li>I(Isolation): <strong>隔离性</strong> ,数据库中的事务一般都是并发的,隔离性是指并发的两个事务的执行互不干扰,一个事务不能看到其他事务运行过程的中间状态。通过配置事务隔离级别可以避脏读、重复读等问题。</li><li>D(Durability): <strong>持久性</strong> ,事务完成之后,该事务对数据的更改会被持久化到数据库,且不会被回滚。</li></ul>
<p>数据库事务在实现时会将一次事务涉及的所有操作全部纳入到一个不可分割的执行单元,该执行单元中的所有操作要么都成功,要么都失败,只要其中任一操作执行失败,都将导致整个事务的回滚。</p>
<h1>3,分布式事务</h1>
<p>分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下 由不同的服务之间通过网络远程协作完成事务称之为分布式事务 ,例如用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务。</p>
<h1>4,分布式事务产生的场景</h1>
<ul><li>典型的场景就是微服务架构,微服务之间通过 <strong>远程调用完成事务</strong> 操作。比如:订单微服务和库存微服务,下单的同时订单微服务请求库存微服务减库存。 简言之: <strong>跨JVM进程产生分布式事务</strong> 。</li><li>单体系统访问多个数据库实例, <strong>跨数据库实例产生分布式事务</strong> 。</li><li><strong>多服务访问同一个数据库实例</strong> ,比如:订单微服务和库存微服务即使访问同一个数据库也会产生分布式事务,原因就是 <strong>跨JVM进程</strong> ,两个微服务持有了不同的数据库链接进行数据库操作,此时产生分布式事务。</li></ul>
<h1>二、分布式事务基础理论</h1>
<h1>1,CAP理论</h1>
<h1>a)概念</h1>
<p>CAP是 Consistency、Availability、Partition tolerance三个词语的缩写,分别表示一致性、可用性、分区容忍性。</p>
<h1>b)组合方式</h1>
<p>在所有分布式事务场景中 不会同时具备CAP三个特性,因为在具备了P的前提下C和A是不能共存的 。</p>
<ul><li>AP:放弃一致性,追求分区容忍性和可用性。这是 <strong>很多分布式系统设计时的选择</strong> 。Eureka集群就是采用的AP设计思想。</li><li>CP:放弃可用性,追求一致性和分区容错性。zookeeper集群。</li><li>CA:放弃分区容忍性,即不进行分区,不考虑由于网络不通或结点挂掉的问题,则可以实现一致性和可用性。那么系统将不是一个标准的分布式系统,我们最常用的关系型数据就满足了CA。</li></ul>
<h1>c)总结</h1>
<p>CAP是一个已经被证实的理论:一个分布式系统最多只能同时满足 一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三项中的两项 。它可以作为我们进行架构设计、技术选型的考量标准。对于多数大型互联网应用的场景,结点众多、部署分散,而且现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到N个9(99.99..%),并要达到良好的响应性能来提高用户体验,因此一般都会做出如下选择: <strong>保证P和A,舍弃C强一致,保证最终一致性</strong> 。</p>
<h1>2,BASE理论</h1>
<h1>a)强一致性与最终一致性</h1>
<ul><li>强一致性:CAP中的一致性要求在任何时间查询每个结点数据都必须一致,它强调的是强一致性。</li><li>最终一致性:允许可以 <strong>在一段时间内每个结点的数据不一致</strong> ,但是经过一段时间每个结点的数据必须一致,它强调的是 <strong>
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP