从CAP理论到Paxos算法
Posted 程序生活码农别致
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从CAP理论到Paxos算法相关的知识,希望对你有一定的参考价值。
一、分布式系统的挑战
关于分布式系统有一个经典的CAP
理论,CAP
理论的核心思想是任何基于网络的数据共享系统最多只能满足数据一致性(Consistency
)、可用性(Availability
)和网络分区容忍(Partition Tolerance
)三个特性中的两个。
Consistency 一致性
一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。等同于所有节点拥有数据的最新版本。
Availability 可用性
可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。
对于一个可用性的分布式系统,每一个非故障的节点必须对每一个请求作出响应。也就是,该系统使用的任何算法必须最终终止。当同时要求分区容忍性时,这是一个很强的定义:即使是严重的网络错误,每个请求必须终止。
Partition Tolerance 分区容忍性
Tolerance
也可以翻译为容错,分区容忍性具体指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即系统容忍网络出现分区,分区之间网络不可达的情况,分区容忍性和扩展性紧密相关,Partition Tolerance
特指在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
提高分区容忍性的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。分区容忍就提高了。然而,要把数据复制到多个节点,就会带来一致性的问题,就是多个节点上面的数据可能是不一致的。要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题。
如图,Client A
可以发送指令到Server
并且设置更新X
的值,Client 1
从Server
读取该值,在单点情况下,即没有网络分区的情况下,或者通过简单的事务机制,可以保证Client 1
读到的始终是最新的值,不存在一致性的问题。
如果在系统中增加一组节点,Write
操作可能在Server 1上成功,在Server 1
上失败,这时候对于Client 1
和Client 2
,就会读取到不一致的值,出现不一致。如果要保持x值的一致性,Write
操作必须同时失败,降低系统的可用性。
可以看到,在分布式系统中,同时满足CAP定律中“一致性”、“可用性”和“分区容错性”三者是不可能的。
在通常的分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica
),网络分区是既成的现实,于是只能在可用性和一致性两者间做出选择。CAP
理论关注的是绝对情况下,在工程上,可用性和一致性并不是完全对立,我们关注的往往是如何在保持相对一致性的前提下,提高系统的可用性。
以上是关于从CAP理论到Paxos算法的主要内容,如果未能解决你的问题,请参考以下文章