发布网友 发布时间:2024-10-23 21:05
共1个回答
热心网友 时间:2024-11-01 00:49
CAP猜想由加州大学伯克利分校的Eric Brewer教授于2000年7月在ACM PODC会议上提出,并在2年后由麻省理工学院的Seth Gilbert和Nancy Lynch从理论上予以证明,成为了分布式计算领域的公认定理。一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)中的两项。
从客户端视角看,一致性涉及多并发访问时更新数据的获取策略,而从服务端视角,则关注更新如何确保系统数据最终一致。一致性分为强/弱/最终三类。强一致性要求更新数据能被后续所有访问看到;弱一致性容忍部分或全部后续访问可能看不到更新;最终一致性则允许经过一段时间后访问到更新数据。
可用性意味着服务在正常响应时间内一直可用,好的可用性通常与系统的设计、分布式数据冗余和负载均衡紧密相关。分区容错性保证了分布式系统在遇到节点或网络分区故障时,仍能提供满足一致性和可用性的服务。
CAP理论表明,无法同时满足这三个特性,必须做出选择。CA系统允许分区存在,保证一致性与可用性;CP系统牺牲可用性,保证一致性与分区容错性;AP系统放弃一致性,以高可用性应对分区。
对于大型互联网应用,通常需要保证服务可用性和分区容错性,以实现N个9的服务可用性,从而舍弃一致性。这种场景常见于分布式NoSQL数据库。在涉及到资金交易等对一致性有极高要求的场景下,会采取CA系统模式,即使服务停止,也要保证数据一致性。而CP系统模式在遇到网络故障时,可能只读不写,以保持一致性。
一致性模型方面,线性一致性要求任何读操作都能读取到某次写操作后最新的数据,并且所有进程读写操作顺序与全局时钟一致。顺序一致性则要求所有进程对数据的读写顺序保持一致,但操作顺序与实际发生顺序不一致。因果一致性区分了具有潜在因果关系的操作,保证有因果关系的操作有序,而并发操作则不做保证。FIFO一致性只保证来自同一客户端的写操作顺序在所有进程中保持一致。最终一致性确保所有副本数据最终一致,但不保证实时性。串行一致性是数据库领域针对事务一致性的一种模型,与线性一致性概念不同。