一致性模型
一致性是保证数据库客户端操作的正确性,数据库必须保证每一步操作都是从一个一致的状态到下一个一致的状态,系统没有明确的指定如何实现这个功能,以便系统可以有多种选择。最终,系统要选择是进入下一个一致性的状态,还是回退到上一个一致的状态,从而保证一致性。
一致性可以按照严格成都由强到弱分类,或者是按照对客户端的保证程度分类,下面是一个非正式的分类列表
严格一致性:数据的变化是原子的,一经改变即使生效,这是一致性的最高形式。
顺序一致性:每个客户端看到的数据依照他们操作执行的顺序而变化。
因果一致性:客户端以因果关系顺序观察到数据的改变。
最终一致性:在没有更新数据的一段时间里,系统将通过广播保证副本之间的数据一致性。
弱一致性:没有做出保证的情况下,所有的更新会通过广播形式传递,展现给不同客户端的数据顺序可能不一样。
强一致性是通过牺牲性能来保证数据的准确性,在分布式运用的框架技术主要是以最终一致性为主
其中CAP定理,指出一个分布式系统只能同时实现一致性,可用性和分区容错性中的两个。CAP是热议话题话题,不过他不是区分分布式系统的唯一方法,但CAP定理指出了,开发一套同时满足以上需求的分布式系统是比较困难的。例如Vogels提到过:
在一系列的研究结果里发现,在较大型的分布式系统中,由于网络分割,一致性与可用性不能通知满足。这意味着三个要素最多同时实现两个,不可能三者兼顾;放宽一致性的要求会提升系统的可用性,提升一致性意味着系统需要牺牲一定的可用性。
放宽一致性来提高系统可用性是一个非常有效的提议,不过这种方案会强制让应用层去解决一致性的问题,因此也会增加系统的复杂性。