为什么需要一致性
- 数据需要保存到多个副本之上,保证数据可靠性;
- 不同副本之间需要保证数据一致性;
简单来说,一致性算法的目的是保证在分布式系统中,多数据副本节点数据一致性。
一致性算法可以分为:强一致性和弱一致性。
常见的强一致性算法:
- paxos
- raft
- zab
其实没有真正的强一致性算法,因为在类似于zab、raft背后副本之间的提交都是基于2pc的,只不过对一致性组件之外是强一致性的。
弱一致性算法:
- DNS系统
- gossip协议
一般是最终一致性算法,在约定的时间窗口内数据达成最终状态。
复制状态机
说道一致性协议,通常会提到复制状态机,我们一般会通过复制状态机加上一致性协议算法来解决分布式系统中高可用和容错。许多分布式系统都有复制状态机的影子,去解决副本之间数据的同步,比如hdfs、chubby、zk等。
复制状态机就是在分布式系统中每个数据副本上,都维持一个持久化的日志,然后通过一致性协议算法,保证每个数据的log在所有副本上都完全一致,这样数据内部的状态机按照日志顺序回放每条命令,在客户端读取时,每个副本都可以读到一样的数据。
paxos
paxos算法其实比较难理解,太过于理论离工程实践比较远,但是不可否认,paxos提出了很多有意义的概念,对于未来很多一致性算法的出现提供了宝贵的素材与建议,也就出现了很多基于paxos算法的变种。