首先推荐
个人理解:paxos给出一种方式,论证的重点在于在提出一种方式,在多机提出多个提议的时候,如何让多机器集群满足一致性的安全性:
决议只有被提出后才可能被选择,
只有一个决议被选择(有多个提议被提出的时候)
process永远不会获知一个决议被选择了,除非这个决议确实已经被选择。
当然,作者最后提出选主可以提高效率。并且作者没有给出选主的方式(据说作者不屑于讨论此问题)
zab和raft的重点在于,一开始启动的情况下就必要选主,然后再提供正常服务,如何能达到一致性的安全性,而后就是异常场景的恢复过程,都比较容易理解。
区别在于选主的方式:
- zab是广播式互相计数方式,发现别人比自己牛逼的时候要帮助别人扩散消息,根据本机计数决定谁是主。
- raft是个节点发起投票,大家根据规则选择投于不投,然后各自收到别人对自己的投票超过半数时宣布自己成为主。
个人理解,两种都会出现故障恢复过程中将某些commit未完成的命令恢复状况【raft的命令可以重复执行,zk没看实现不清楚】
个人理解:
1. Paxos是解决一致性问题的最优算法,但算法复杂,工程实现难度高;
2. zab和raft都是基于实际场景给出的工程上可实现的算法,跟Paxos相比,他们最大的简化是否定了系统中存在“搅局者”的假设,因为实际的分布式环境中的节点都是可信任的;
3. zab是ZooKeeper Atomic Broadcast(ZooKeeper原子消息广播协议)的缩写;
4. zab和raft共同点是都需要选主(Leader或Master)且主是唯一的。在选主阶段系统是不可用的。这是可接受的,原因是(1)在实际工程环境中,节点宕机的概率比较小;(2)选主的过程很快,在一般网络环境中能在几百ms内完成。
|