我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019年全年资料内部公开36码 > 强一致性 >

区块链开发:一致性算法(一) C04

归档日期:08-15       文本归类:强一致性      文章编辑:爱尚语录

  :假如A先写入一个值到存储系统,存储系统能够保证后续ABC读取操作都将返回最新值。

  :假如A先写入一个值到存储系统,系统不能保证ABC的读取操作能否读取到最新值。

  :假如A先写入一个值到存储系统,后续没有写操作更新同样的值,ABC的读取操作最终都会读取到A写入的最新值。从A写入,到ABC读取到最新值的这段时间,称为“不一致性窗口”。

  关系型数据库 单节点 保证了数据强一致性(C)和可用性(A),但是却无法保证分区容错性(P)。

  然而在分布式系统下,为了保证模块的分区容错性(P),只能在数据强一致性(C)和可用性(A)之间做平衡。具体表现为在一定时间内,可能模块之间数据是不一致的,但是通过自动或手动补偿后能够达到最终的一致。

  BASE 理论主要是解决 CAP 理论中分布式系统的可用性和一致性不可兼得的问题。BASE 理论包含以下三个要素:

  BASE 模型与 ACID 不同,满足 CAP 理论,通过牺牲强一致性来保证系统可用性。由于牺牲了强一致性,系统在处理请求的过程中,数据可以存在短时的不一致。

  系统在处理业务时,记录每一步的临时状态。当出现异常时,根据状态判断是否继续处理请求或者退回原始状态,从而达到数据的最终一致。

  复制协议分为两种,强同步和异步复制。两者的区别在于,是否需要同步到备副本才可以返回成功。当系统出现故障时,分布式系统需要将服务自动切换到备副本,实现自动容错。

  强同步复制能保证一致性,但是当备副本出现故障时,会阻塞存储系统的正常写服务,系统的整体可用性受到影响。

  客户端将写请求发送给主副本,主副本将写请求通过同步commit log来复制到其他副本,备副本根据日志进行操作,完成后通知主副本。然后主副本修改本机,等所有操作都完成后通知客户端些完成。

  备副本的个数可能大于1个,实现强同步协议时,主复本可以将操作日志并发地发给所有副本并等待回复,只要有一个备副本返回成功就可以继续操作并恢复客户端操作成功。

  异步模式下,主副本不需要等待备副本的回应,本地修改成功后就可以通知客户端操作成功。

  分布式事务 : 一台机器在执行本地事务的时候无法知道其他机器中的本地事务的执行结果,他也就不知道本次事务到底应该 commit 还是 roolback。所以,常规的解决办法就是引入一个“协调者”的组件来统一调度所有分布式节点的执行。

  二阶段提交的算法思路可以概括为:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。

  所谓的两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。

  事务协调者(事务管理器)给每个参与者(参与者, 资源管理器)发送Prepare消息,等待直到收到所有参与者的回复。

  参与者在本地节点执行事务(之后协调者会要求提交这个事务),写本地的redo和undo日志。(

  每一个参与者,如果执行成功,回复一个agreement消息(假如参与者同意执行commit);如果执行失败,回复一个abort消息。(两阶段提交协议)。

  每一个参与者执行本地事务的undo操作(根据undo日志记录),并且释放事务执行过程中使用的资源和锁

  每一个参与者给协调者回复acknowledgement消息(两阶段提交协议)。

  协调者在接收到所有的参与者的acknowledgement消息之后执行事务undo操作

  两阶段提交协议最大的缺点是:它是一个阻塞协议。当一个节点在等待回复消息时进入阻塞状态。其他需要这些资源的处理事务需要等待。如果协调者挂掉,参与者将永远不能结束它们的事务

  假如协调者从所有的参与者获得的反馈都是Yes响应,那么就会执行事务的预执行。

  发送预提交请求,协调者向参与者发送PreCommit请求,并进入Prepared阶段。

  事务预提交,参与者接收到PreCommit请求后,会执行事务操作,并将undo和redo信息记录到事务日志中。

  响应反馈,如果参与者成功的执行了事务操作,则返回ACK响应,同时开始等待最终指令。

  假如有任何一个参与者向协调者发送了No响应,或者等待超时之后,协调者都没有接到参与者的响应,那么就执行事务的中断。

  中断事务,协调者没有接收到参与者发送的ACK响应(可能是接受者发送的不是ACK响应,也可能响应超时),那么就会执行中断事务。

  在doCommit阶段,如果参与者无法及时接收到来自协调者的doCommit或者rebort请求时,会在等待超时之后,会继续进行事务的提交。(其实这个应该是基于概率来决定的,当进入第三阶段时,说明参与者在第二阶段已经收到了PreCommit请求,那么协调者产生PreCommit请求的前提条件是他在第二阶段开始之前,收到所有参与者的CanCommit响应都是Yes。(一旦参与者收到了PreCommit,意味他知道大家其实都同意修改了)所以,一句话概括就是,当进入第三阶段时,由于网络超时等原因,虽然参与者没有收到commit或者abort响应,但是他有理由相信:成功提交的几率很大。 )

  相对于2PC,3PC主要解决的单点故障问题,并减少阻塞,因为一旦参与者无法及时收到来自协调者的信息之后,他会默认执行commit。而不会一直持有事务资源并处于阻塞状态。但是这种机制也会导致数据一致性问题,因为,由于网络原因,协调者发送的abort响应没有及时被参与者接收到,那么参与者在等待超时之后执行了commit操作。这样就和其他接到abort命令并执行回滚的参与者之间存在数据不一致的情况。

  趁着颓废的状态还在,写下些文字记录一下吧:1、现金流我目前的现金流很混乱,需要两个月工资才可以覆盖缺口,所以我有两个选择,要么节衣缩食,减少开销,要么从其他账户里抽出一部分资金出来,填坑先。反正两个选择都不够好,这一切都是因为我对现金流的理解还不够,也忽略了一些特殊情况的影...

  1、今天星期五了,明天就可以双休了,感恩,谢谢!谢谢!谢谢! 2、感恩刘姐,帮我买书,谢谢!谢谢!谢谢! 3、感恩纯净水,让我每天有水喝,谢谢!谢谢!谢谢! 4、感恩我的制服,让我每天都可以穿着上班,谢谢!谢谢!谢谢! 5、感恩单位餐厅的工作人员,每天中午给我们做好吃的,谢...

  1:感恩我的被子温暖拥抱我的身体,让我好好休息。 2:感恩我的多用壶满足我的多种需求,提供美食。 3:感恩苹果汤对我的滋养。感恩纸巾帮我擦去鼻涕。 4:感恩我的身体每一个细胞活力健康。感恩我的免疫力,一点小感冒也能很好地自愈。 5:感恩银行的财神送来合约签署。 6:感恩钱朋...

  英语学习清单:TOP100英语类杂志网站 下面这100个英语学习网站的清单,整理出来供大家学习参考之用! 学习如同攀登,上不去,就下来了! 1.TIME 时代 美国1923年创刊 即便是它在今年的美国“国家期刊奖”中一个提名也没有获得,话语惯性与品...

本文链接:http://ravynhart.com/qiangyizhixing/496.html