河间网站建设推广,湖南怀化市住房城乡建设局网站,有专门做ppt的网站有哪些,长春百度网站排名优化分布式从ACID、CAP、BASE的理论推进
分布式实际上就是单一的本地一体解决方案#xff0c;在硬件或者资源上不够业务需求#xff0c;而采取的一种分散式多节点#xff0c;可以扩容资源的一种解决思路。它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的…分布式从ACID、CAP、BASE的理论推进
分布式实际上就是单一的本地一体解决方案在硬件或者资源上不够业务需求而采取的一种分散式多节点可以扩容资源的一种解决思路。它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分然后把这些部分分配给多个计算机进行处理最后把这些计算结果综合起来得到最终的结果。
那么在了解分布式之前我们应该从一体式的构造开始说明。
一、从本地事务到分布式理论
理解分布式之前需要理解一个问题就是事务 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交只要其中任一操作执行失败都将导致整个事务的回滚。 简单地说事务提供一种“ 要么什么都不做要么做全套All or Nothing”机制。
二、ACID理论
事务是基于数据进行操作需要保证事务的数据通常存储在数据库中所以介绍到事务就不得不介绍数据库事务的ACID特性指数据库事务正确执行的四个基本特性的缩写。包含 原子性Atomicity 一致性Consistency 隔离性Isolation 持久性Durability
(1) 原子性Atomicity
整个事务中的所有操作要么全部完成要么全部不完成不可能停滞在中间某个环节。
例如银行转账从A账户转100元至B账户
A、从A账户取100元
B、存入100元至B账户。 这两步要么一起完成要么一起不完成如果只完成第一步第二步失败钱会莫名其妙少了100元。
(2) 一致性Consistency
在事务开始之前和事务结束以后数据库数据的一致性约束没有被破坏。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J4qRLlPf-1689382298804)(images/128-分布式7.jpeg)]
例如现有完整性约束AB100如果一个事务改变了A那么必须得改变B使得事务结束后依然满足AB100否则事务失败。
(3) 隔离性Isolation
数据库允许多个并发事务同时对数据进行读写和修改的能力如果一个事务要访问的数据正在被另外一个事务修改只要另外一个事务未提交它所访问的数据就不受未提交事务的影响。隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
例如现有有个交易是从A账户转100元至B账户在这个交易事务还未完成的情况下如果此时B查询自己的账户是看不到新增加的100元的。
(4) 持久性Durability
事务处理结束后对数据的修改就是永久的即便系统故障也不会丢失。
本地事务ACID实际上可用”统一提交失败回滚“几个字总结严格保证了同一事务内数据的一致性
而分布式事务不能实现这种ACID。因为有CAP理论约束。接下来我们来了解一下分布式中是如何保证以上特性的那么就有了一个著名的CAP理论。 三、CAP理论
在设计一个大规模可扩放的网络服务时候会遇到三个特性一致性consistency、可用性Availability、分区容错partition-tolerance都需要的情景.
CAP定律说的是在一个分布式计算机系统中一致性可用性和分区容错性这三种保证无法同时得到满足最多满足两个。
如上图CAP的三种特性只能同时满足两个。而且在不同的两两组合也有一些成熟的分布式产品。
接下来我们来介绍一下CAP的三种特性我们采用一个应用场景来分析CAP中的每个特点的含义。
该场景整体分为5个流程
流程一、客户端发送请求(如:添加订单、修改订单、删除订单)
流程二、Web业务层处理业务并修改存储成数据信息
流程三、存储层内部Master与Backup的数据同步
流程四、Web业务层从存储层取出数据
流程五、Web业务层返回数据给客户端
(1) 一致性Consistency “all nodes see the same data at the same time” 一旦数据更新完成并成功返回客户端后那么分布式系统中所有节点在同一时间的数据完全一致。 在CAP的一致性中还包括强一致性、弱一致性、最终一致性等级别稍后我们在后续章节介绍。 一致性是指写操作后的读操作可以读取到最新的数据状态当数据分布在多个节点上从任意结点读取到的数据都是最新的状态。
一致性实现目标 Web业务层向主Master写数据库成功从Backup读数据也成功。 Web业务层向主Master读数据库失败从Backup读数据也失败。
必要实现流程
写入主数据库后在向从数据库同步期间要将从数据库锁定待同步完成后再释放锁以免在新数据写入成功后向从数据库查询到旧的数据。
分布式一致性特点
由于存在数据同步的过程写操作的响应会有一定的延迟。为了保证数据一致性会对资源暂时锁定待数据同步完成释放锁定资源。如果请求数据同步失败的结点则会返回错误信息一定不会返回旧数据。
(2) 可用性(Availability) “Reads and writes always succeed” 服务一直可用而且是正常响应时间。
对于可用性的衡量标准如下
可用性分类可用水平%一年中可容忍停机时间容错可用性99.99991 min极高可用性99.9995 min具有故障自动恢复能力的可用性99.9953 min高可用性99.98.8h商品可用性9943.8 min
可用性实现目标 当Master正在被更新Backup数据库接收到数据查询的请求则立即能够响应数据查询结果。 backup数据库不允许出现响应超时或响应错误。
必要实现流程
写入Master主数据库后要将数据同步到从数据库。由于要保证Backup从数据库的可用性不可将Backup从数据库中的资源进行锁定。即时数据还没有同步过来从数据库也要返回要查询的数据哪怕是旧数据/或者默认数据但不能返回错误或响应超时。
分布式可用性特点
所有请求都有响应且不会出现响应超时或响应错误。
(3) 分区容错性(Partition tolerance) “the system continues to operate despite arbitrary message loss or failure of part of the system” 分布式系统中尽管部分节点出现任何消息丢失或者故障系统应继续运行。
通常分布式系统的各各结点部署在不同的子网这就是网络分区不可避免的会出现由于网络问题而导致结点之间通信失败此时仍可对外提供服务。
分区容错性实现目标 主数据库向从数据库同步数据失败不影响读写操作。 其一个结点挂掉不影响另一个结点对外提供服务。
必要实现流程
尽量使用异步取代同步操作例如使用异步方式将数据从主数据库同步到从数据这样结点之间能有效的实现松耦合。添加Backup从数据库结点其中一个Backup从结点挂掉其它Backup从结点提供服务。
分区容错性特点
分区容忍性分是布式系统具备的基本能力。
四、CAP的”3选2“证明
(1) 基本场景
在小结中我们主要介绍CAP的理论为什么不能够3个特性同时满足。
如上图是我们证明CAP的基本场景分布式网络中有两个节点Host1和Host2他们之间网络可以连通Host1中运行Process1程序和对应的数据库DataHost2中运行Process2程序和对应数据库Data。
(2) CAP特性
如果满足一致性(C)那么Data(0) Data(0).
如果满足可用性(A): 用户不管请求Host1或Host2都会立刻响应结果。
如果满足分区容错性(P): Host1或Host2有一方脱离系统(故障) 都不会影响Host1和Host2彼此之间正常运作。
(3) 分布式系统正常运行流程
如上图是分布式系统正常运转的流程。
A、用户向Host1主机请求数据更新程序Process1更新数据库Data(0)为Data(1)
B、分布式系统将数据进行同步操作将Host1中的Data(1)同步的Host2中Data(0),使Host2中的数据也变为Data(1)
C、当用户请求主机Host2时则Process2则响应最新的Data(1)数据
根据CAP的特性 Host1和Host2的数据库Data之间的数据是否一样为一致性© 用户对Host1和Host2的请求响应为可用性(A) Host1和Host2之间的各自网络环境为分区容错性§
当前是一个正常运作的流程目前CAP三个特性可以同时满足也是一个理想状态,但是实际应用场景中发生错误在所难免那么如果发生错误CAP是否能同时满足或者该如何取舍 (4) 分布式系统异常运行流程
假设Host1和Host2之间的网络断开了我们要支持这种网络异常相当于要满足分区容错性(P)能不能同时满足一致性(C)和可用响应性(A)呢
假设在N1和N2之间网络断开的时候
A、用户向Host1发送数据更新请求那Host1中的数据Data(0)将被更新为Data(1)
B、弱此时Host1和Host2网络是断开的所以分布式系统同步操作将失败Host2中的数据依旧是Data(0)
C、有用户向Host2发送数据读取请求由于数据还没有进行同步Process2没办法立即给用户返回最新的数据V1那么将面临两个选择。
第一牺牲数据一致性(c)响应旧的数据Data(0)给用户
第二牺牲可用性(A)阻塞等待直到网络连接恢复数据同步完成之后再给用户响应最新的数据Data(1)。
这个过程证明了要满足分区容错性(p)的分布式系统只能在一致性(C)和可用性(A)两者中选择其中一个。
(5) 3选2的必然性
通过CAP理论我们知道无法同时满足一致性、可用性和分区容错性这三个特性那要舍弃哪个呢
CA 放弃 P
一个分布式系统中不可能存在不满足P放弃分区容错性(p)即不进行分区不考虑由于网络不通或结点挂掉的问题则可以实现一致性和可用性。那么系统将不是一个标准的分布式系统。我们最常用的关系型数据就满足了CA。
主数据库和从数据库中间不再进行数据同步数据库可以响应每次的查询请求通过事务(原子性操作)隔离级别实现每个查询请求都可以返回最新的数据。
注意 对于一个分布式系统来说。P是一个基本要求CAP三者中只能在CA两者之间做权衡并且要想尽办法提升P。 CP 放弃 A
如果一个分布式系统不要求强的可用性即容许系统停机或者长时间无响应的话就可以在CAP三者中保障CP而舍弃A。
放弃可用性追求一致性和分区容错性如Redis、HBase等还有分布式系统中常用的Zookeeper也是在CAP三者之中选择优先保证CP的。
场景
跨行转账一次转账请求要等待双方银行系统都完成整个事务才算完成。
AP 放弃 C
放弃一致性追求分区容忍性和可用性。这是很多分布式系统设计时的选择。实现AP前提是只要用户可以接受所查询的到数据在一定时间内不是最新的即可。
通常实现AP都会保证最终一致性后面讲的BASE理论就是根据AP来扩展的。
场景1
淘宝订单退款。今日退款成功明日账户到账只要用户可以接受在一定时间内到账即可。
场景2
12306的买票。都是在可用性和一致性之间舍弃了一致性而选择可用性。
你在12306买票的时候肯定遇到过这种场景当你购买的时候提示你是有票的但是可能实际已经没票了你也正常的去输入验证码下单了。但是过了一会系统提示你下单失败余票不足。这其实就是先在可用性方面保证系统可以正常的服务然后在数据的一致性方面做了些牺牲会影响一些用户体验但是也不至于造成用户流程的严重阻塞。
但是我们说很多网站牺牲了一致性选择了可用性这其实也不准确的。就比如上面的买票的例子其实舍弃的只是强一致性。退而求其次保证了最终一致性。也就是说虽然下单的瞬间关于车票的库存可能存在数据不一致的情况但是过了一段时间还是要保证最终一致性的。
(6) 总结: CA 放弃 P如果不要求P不允许分区则C强一致性和A可用性是可以保证的。这样分区将永远不会存在因此CA的系统更多的是允许分区后各子系统依然保持CA。 CP 放弃 A如果不要求A可用相当于每个请求都需要在Server之间强一致而P分区会导致同步时间无限延长如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。 AP 放弃 C要高可用并允许分区则需放弃一致性。一旦分区发生节点之间可能会失去联系为了高可用每个节点只能用本地数据提供服务而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。 五、思考
思考按照CAP理论如何设计一个电商系统
首先个电商网站核心模块有用户订单商品支付促销管理等 1、对于用户模块包括登录个人设置个人订单购物车收藏夹等这些模块保证AP数据短时间不一致不影响使用。 2、订单模块的下单付款扣减库存操作是整个系统的核心CA都需要保证极端情况下面牺牲A保证C 3、商品模块的商品上下架和库存管理保证CP 4、搜索功能因为本身就不是实时性非常高的模块所以保证AP就可以了。 5、促销是短时间的数据不一致结果就是优惠信息看不到但是已有的优惠要保证可用而且优惠可以提前预计算所以可以保证AP。 6、支付这一块是独立的系统或者使用第三方的支付宝微信。其实CAP是由第三方来保证的支付系统是一个对CAP要求极高的系统C是必须要保证的AP中A相对更重要不能因为分区导致所有人都不能支付 六、分布式BASE理论
CAP 不可能同时满足而分区容错性(P)是对于分布式系统而言是必须的。如果系统能够同时实现 CAP 是再好不过的了所以出现了 BASE 理论。
(1) BASE理论 通用定义 BASE是Basically Available(基本可用、**Soft state(软状态和Eventually consistent(最终一致性**三个短语的简写。
BASE是对CAP中一致性和可用性权衡的结果其来源于对大规模互联网系统分布式实践的总结是基于CAP定理逐步演化而来的其核心思想是即使无法做到强一致性但每个应用都可以根据自身的业务特点采用适当的方法来使系统达到最终一致性。 两个对冲理念ACID和BASE ACID是传统数据库常用的设计理念追求强一致性模型。
BASE支持的是大型分布式系统提出通过牺牲强一致性获得高可用性。
(2) Basically Available(基本可用)
实际上就是两个妥协。 对响应上时间的妥协正常情况下一个在线搜索引擎需要在0.5秒之内返回给用户相应的查询结果但由于出现故障比如系统部分机房发生断电或断网故障查询结果的响应时间增加到了1~2秒。 对功能损失的妥协正常情况下在一个电子商务网站比如淘宝上购物消费者几乎能够顺利地完成每一笔订单。但在一些节日大促购物高峰的时候比如双十一、双十二由于消费者的购物行为激增为了保护系统的稳定性或者保证一致性部分消费者可能会被引导到一个降级页面。
(3) Soft state软状态 原子性硬状态 - 要求多个节点的数据副本都是一致的,这是一种硬状态 软状态弱状态 - 允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延迟。
(4) Eventually consistent最终一致性
上面说软状态然后不可能一直是软状态必须有个时间期限。在期限过后应当保证所有副本保持数据一致性。从而达到数据的最终一致性。这个时间期限取决于网络延时系统负载数据复制方案设计等等因素。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N52lK1o8-1689382298810)(images/145-Base3.jpeg)]
稍微官方一点的说法就是 系统能够保证在没有其他新的更新操作的情况下数据最终一定能够达到一致的状态因此所有客户端对系统的数据访问最终都能够获取到最新的值。 (5) BASE总结
总的来说BASE 理论面向的是大型高可用可扩展的分布式系统和传统事务的 ACID 是相反的它完全不同于 ACID 的强一致性模型而是通过牺牲强一致性来获得可用性并允许数据在一段时间是不一致的。