数据一致性模型

一些分布式系统通过复制数据来提高系统的可靠性和容错性,并且将数据的不同的副本存放在不同的机器上,由于维护数据副本的一致性代价很高,因此许多系统采用弱一致性来提高性能,一些不同的一致性模也相继被提出,主要有以下几种:
  ·强一致性:要求无论更新操作是在哪个数据副本上执行,之后所有的读操作都要能获得最新的数据。对于单副本数据来说,读写操作是在同一数据上执行的,容易保证强一致性。对多副本数据来说,则需要使用分布式事务协议(如两阶段提交或Paxos)。
  ·弱一致性:在这种一致性下,用户读到某一操作对系统特定数据的更新需要一段时间,我们将这段时间称为“不一致性窗口”。
  ·最终一致性:是弱一致性的一种特例,在这种一致性下系统保证用户最终能够读取到某操作对系统特定数据的更新(读取操作之前没有该数据的其他更新操作)。此种情况下,如果没有发生失败,“不一致性窗口”的大小依赖于交互延迟、系统的负载,以及复制技术中replica的个数(这个可以理解为master/slave模式中,slave的个数)。DNS系统可以说是在最终一致性方面最出名的系统,当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看到最新的值。
  最终一致性模型根据其提供的不同保证可以划分为更多的模型。
  ·因果一致性(Causal Consistency):假如有相互独立的A、B、C三个进程对数据进行操作。进程A对某数据进行更新后并将该操作通知给B,那么B接下来的读操作能够读取到A更新的数据值。但是由于A没有将该操作通知给C,那么系统将不保证C一定能够读取到A更新的数据值。
  ·读自写一致性(Read Your Own Writes Consistency):这个一致性是指用户更新某个数据后读取该数据时能够获取其更新后的值,而其他的用户读取该数据时则不能保证读取到最新值。
  ·会话一致性(Session Consistency):是指读取自写更新一致性被限制在一个会话的范围内,也就是说提交更新操作的用户在同一个会话里读取该数据时能够保证数据是最新的。
  ·单调读一致性(Monotonic Read Consistency):是指用户读取某个数据值,后续操作不会读取到该数据更早版本的值。
  ·时间轴一致性(Timeline Consistency):要求数据的所有副本以相同的顺序执行所有的更新操作,另一种说法叫单调写一致性(Monotonic Write Consistency)。
  系统选择哪种一致性模型取决于应用对一致性的需求,所选取的一致性模型还会影响到系统如何处理用户的请求以及对副本维护技术的选择等。

你可能感兴趣的:(分布式)