https://segmentfault.com/a/1190000012534071
分布式一致性包括:
强一致性:保证副本都一致
可用性:在用户容忍时间范围内返回用户预期结果
分区容错性:出现网络分区时仍能对外提供可用服务。
主要方法两阶段提交协议,三阶段提交协议
两阶段提交协议
分为协调者master参与者segment
第一阶段:投票阶段
协调者像参与者分发任务,参与者执行并记录日志,但不提交等待,返回结果,阻塞ready等待协调者指令。
第二阶段:事务提交
三种情况:全部成功,部分不成功,超时。
第一种的话,协调者发送全部提交指令。
第二三种的话,发布回滚操作
存在的问题:单点问题,如果master宕机,segment会阻塞,如果存在网络问题也会出现数据不一致。
所以引入超时和互询机制,如果master超时没收到应答发布回滚指令,如果segment处于ready状态但没收到第二阶段提交指令超时,则开始轮训,如果轮训的那一个提交或者回滚了则它也提交或回滚;如果未达到ready状态,直接回滚;如果轮训的处于ready状态,则问下一个,直到都是ready,等待指令。
三阶段提交协议
包括can,pre,do
can阶段询问每个segment是否能执行。
pre阶段如果都能执行这二阶段提交一样。
如果存在不能执行的发送abort指令,所有中断。
do如果未中断,都可执行则和二阶段事务提交一样。
好处就是在do阶段如果segment没收到master指令,不会阻塞,直接提交,因为由于有pre阶段所以都可以提交,此时是因为网络出问题,导致没收到master指令,可直接提交。