比如下面的例子:

  • 一行X值在节点M和节点N上有副本
  • 客户端A在节点M上写入行X的值
  • 一段时间后,客户端B在节点N上读取行X的值

 一致性模型所要做的就是决定客户端B能否看到客户端A写的值。一致性模型分为一下几种模型:

  •   随意一致性(causal consistency)
  • delta一致性(delta consistency)
  • entry一致性(entry consistency)
  • 最终一致性(eventual consistency)
  • 创建一致性(fork consistency)
  • 原子一致性(atomic consistency)
  • 松散一致性(release consistency)
  • 顺序一致性(sequential consistency)
  • 弱一致性(weak consistency)
  • 强一致性(strong consistency)
  • casual+一致性(casual+ consistency)

 下面是几种比较常用的一致性模型:

1、最终一致性(eventual consistency)

  最终一致性模型是用于分布式系统中,用来实现高可用行,确保在如果一个更新操作发生,那么最终一定可以读取到这次的更新操作的发生。最终一致性在分布式领域广泛使用,采用多个副本形式。如果一个系统实现了最终一致性,那么这个系统可以称之为收敛的,或者叫做实现了副本收敛。相比于传统的ACID(Atomicity,Consistency,Isolation,Durability),最终一致性提供的是BASE(Basic Availablilty,Soft state,Eventual Consistency)服务。最终一致性有个重大缺点:在系统达到副本收敛之前,系统有可能返回任何值

      最终一致性冲突解决方法:

      为了实现副本收敛的特性,系统必须协调多个不同版本之间的数据。系统实现最终一致性要求的过程叫做anti-entropy,在不同服务器之间交换数据。冲突解决方式一般是最后一个writer进行协调或者用户执行协调处理系统。

  参考资料:

   维基百科:eventual consistency。http://en.wikipedia.org/wiki/Eventual_consistency

 2、强一致性模型(strong consistency)

    强一致性模型是用于并发编程模型中的一致性模型,一般用于分布式共享内存(distributed shared memory)、分布式事务(distributed transaction)。一个协议满足强一致性模型,如果满足下面的条件

   所有并行的进程(节点,处理器等)看到的是一样的存取顺序

   也就是只有一种状态被所有的并行进程观察到,对比与弱一致性(weak consitency),并行进程可能看到不同的状态。

  参考资料:

  维基百科:strong consistency。http://en.wikipedia.org/wiki/Strong_consistency

  相对应与解决强一致性问题需求的方法:paxos算法

  关于paxos算法的基本知识:

  维基百科:paxos。http://en.wikipedia.org/wiki/Paxos_(computer_science)

  国内介绍paxos算法比较全的网址:http://blog.csdn.net/chen77716/article/details/6166675

  paxos算法作者的原著paper:http://research.microsoft.com/en-us/um/people/lamport/pubs/paxos-simple.pdf

  paxos算法实现软件zookeeper:http://zookeeper.apache.org

  paxos算法google实现chubby的经典论文:http://research.google.com/archive/chubby-osdi06.pdf   

 

posted on 2014-11-22 12:48  linghuchong0605  阅读(3829)  评论(0编辑  收藏  举报