《分布式系统原理与范型》
分布式区别于单机系统的一个特性:可能部分失效。
分布式系统设计的一个重要目标:可以从部分失效中自动恢复,它能容忍错误,在发生错误时某种程度上的可以继续操作。
1、可用性,可靠性、安全性、可维护性。
2、故障类型,崩溃性故障、遗漏性故障、随即故障(拜占庭故障)、等等。
问题: 当一个服务器一段时间不响应时,服务器是崩溃了,还是出现性能问题呢???
3、使用冗余来掩盖故障
Lamport在论文中证明在拜占庭故障的系统中,具有m个故障进程的系统中,只有存在2m+1个正确的工作进程才能达成协议,这样总共有3m+1个进程,也就是当2/3以上的进程正常工作时,才可能达成协议。
4、分布式系统中原子性的基础是分布式提交协议
两阶段提交 2PC:
a\ 协调者向所有参与者发送一个vote_request消息
b\ 当参与者接受到vote_request消息时,就向协调者发送一个vote_commit消息通知协调者他已经准备好本地提条事务中属于它的部分,否则返回一个vote_abort
c\ 协调者收集来自所有参与者的选票,如果全部都表决提交事务,那么协调者就进行提交,它向所有参与者发送一个global_commit消息,如果有一个参与者表决取消事务,那么协调者就决定取消,它向所有参与者发送一个global_abort消息。
d\ 每个提交表决的参与者 都等待 协调者的最后会有,如果参与者接收到global_commit, 那么他就提交事务,否则接受到gloabl_abortt消息时,取消abort.。
表决阶段有第一,第二步构成,决定阶段有第三、第四步构成。
出现的问题:所有协调者、参与者都是阻塞等待消息,当一个进程崩溃,而其他进程又在等待来自该进程的消息时,这个协议很容易崩溃。
可以引入定时机制。当协调者崩溃时,参与者不能做出最后的决定。