CAP定理及二阶段提交
二阶段提交
CAP定理,C即consistency,一致性。A即availability,可用性。P即pratition tolerance,分区容错性。
C:指在一个分布式系统中,多个节点查询数据均是一致的。
A:指系统在不同节点,用户可以立即访问。
P:一个节点宕机,并不会影响对用户提供可用的服务。
以主从备份系统为例,当用户在主系统中提交数据,将100修改为200时,在备份系统访问数值,保证是200就叫做一致性。
在主系统修改完毕之后,需要立马在备用系统使用,此时200还没有同步过来,但是不能影响用户先行使用,此时仍然使用数据
100,这叫可用性。分区容错,一般对应用户不可知,一个节点宕机,其他节点继续提供可靠服务。
一般情况下,分布式系统都需要保证P,所以只能在C和A中间取舍。
CAP定理:一个系统中,一定不能同时保证三个特性。
CAP定理证明:以主从备份系统为例,我们反证。在主系统修改数值100到200,那么主系统需要同步到备用系统,在同步
的这段时间里,备用系统一定无法同时保证一致性和可用性的。
二阶段提交的目的在于保证分布式系统中数据的一致性。含义如名,该协议将一个数据过程分为两个阶段,投票和提交。
构造图如下:
一、投票
投票的过程是,协调点向所有参与者发送执行请求,并等待参与者的反馈。参与者收到协调点的请求,执行事务但不提交,
最终,记录事务日志(防止宕机的数据回滚)并将执行结果反馈给协调点,自己阻塞等待。
投票的结果,有三种可能性:
①超时
②有参与者失败
③参与者全部成功
二、提交
超时或有参与者失败,则协调点判定,此次执行失败。告诉用户失败,并且向所有协调者发送放弃执行指令。如果所有参
与者均执行成功,那么告诉用户成功,并向所有协调者发送提交指令。
这样的设计,有几个比较明显的缺点:
1、协调点是一个单点,一旦宕机会影响整个服务。
2、参与者投票完成之后,阻塞等待,效率低下。
3、如果提交阶段,有的协调点因为网络问题,未收到提交指令,而其他节点正常提交,则数据不一致。
针对最明显的几点缺点,之后做出改进。
1、协调点的宕机恢复和其他节点相同,有事务日志支持。
2、超时机制。对于参与者而言,在等待时间内仍没有收到协调点的指令,则主动放弃等待,并向所有其他参与者发送放弃
此次提交指令。当然,此时可能是,当前节点因为网络问题而未收到提交指令,此时可能其他参与者已经提交。所以需要参照第
三点。
3、互询机制。当参与者阻塞于等待提交,超时未收到提交或放弃指令时。当前参与者可以去访问其他参与者,如果其他参
与者已经执行了“提交”或“放弃”指令,那么当前参与者也执行同样指令。