关于cap:理解分布式系统-CAP-定理

分布式系统赫赫有名的 CAP 定理,示意分布式系统只能同时满足 CAP 三个个性中的两个,其中 C-Consistency 强一致性,A-Avaliability 可用性,P-Partition Torrelation 分区容忍性,以下听我缓缓道来分区 Partition 和 分区容忍 Partition Torrelation 是两个不同的概念,我刚开始也是傻傻分不清,这里先谈谈分区问题。因为网络的不牢靠以及程序的不稳定性,分布式系统中会有概率产生局部结点的断开,解体,脱离零碎。假如咱们的数据以分片的模式存储在分布式系统的各个节点,一旦产生分区问题就会造成局部数据分片的失落,整个零碎就无奈提供残缺的数据服务,当然咱们无法忍受这种状况产生。最无效的方法是给每个数据分片设置正本分片,备份到其余节点上,分区问题一经呈现,正本分片也能长期作为主分片持续提供服务,保障了零碎服务的完整性,这时零碎就有了分区容错的能力,也叫分区容忍性<放个图片>数据备份冗余的水平越高,零碎的分区容忍性越高,极其状况下每个节点都保留了残缺的数据,即便分布式系统只剩下一个节点,也能提供残缺的数据服务(但存储老本,同步老本太高)分区问题是概率必然呈现的,所以要优先保证系统的分区容忍性P,那么依据 CAP 定理,分布式系统只能抉择满足 A 或 C,以下别离进行解释Availability 可用性,示意零碎每时每刻都能提供服务,不能停机Consistency 强一致性,示意零碎在提供服务的时间段内需保证数据强一致性因为 P 的原理数据存在正本,当用户更新某个数据后,为了保障强一致性,零碎必须暂停服务,把更新后的数据同步到正本分片,再开启服务,而暂停服务这个操作显然违反了 A 可用性。如果优先保障 A 可用性,那么数据更新同步的时间段就无奈满足强一致性了。通常状况下,数据正本只用于备份和容灾,个别不对外提供服务,所以大部分的分布式系统都会优先选择 AP,尽管不能保障强一致性,但数据同步胜利后还是能达到最终统一的状态。

October 24, 2022 · 1 min · jiezi

关于cap:cap-理论的p-到底是啥

一个分布式系统外面,节点组成的网络原本应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就分布在了这些不连通的区域中。这就叫分区。当你一个数据项只在一个节点中保留,那么分区呈现后,和这个节点不连通的局部就拜访不到这个数据了。这时分区就是无奈容忍的。进步分区容忍性的方法就是一个数据项复制到多个节点上,那么呈现分区之后,这一数据项就可能散布到各个区里。容忍性就进步了。然而,要把数据复制到多个节点,就会带来一致性的问题,就是多个节点下面的数据可能是不统一的。要保障统一,每次写操作就都要期待全副节点写胜利,而这期待又会带来可用性的问题。总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保障。为了保障一致性,更新所有节点数据所须要的工夫就越长,可用性就会升高。 作者:知乎用户链接:https://www.zhihu.com/questio...起源:知乎著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。 定义CAP 原理:分布式系统无奈同时确保一致性(Consistency)、可用性(Availability)和分区容忍性(Partition),设计中往往须要弱化对某个个性的需要。一致性、可用性和分区容忍性的具体含意如下:一致性(Consistency):任何事务应该都是原子的,所有正本上的状态都是事务胜利提交后的后果,并放弃强统一;可用性(Availability):零碎(非失败节点)能在无限工夫内实现对操作申请的应答;分区容忍性(Partition):零碎中的网络可能产生分区故障(成为多个子网,甚至呈现节点上线和下线),即节点之间的通信无奈保障。而网络故障不应该影响到零碎失常服务。CAP 原理认为,分布式系统最多只能保障三项个性中的两项个性。比拟直观地了解,当网络可能呈现分区时候,零碎是无奈同时保障一致性和可用性的。要么,节点收到申请后因为没有失去其它节点的确认而不应答(就义可用性),要么节点只能应答非统一的后果(就义一致性)。因为大部分时候网络被认为是牢靠的,因而零碎能够提供统一牢靠的服务;当网络不牢靠时,零碎要么就义掉一致性(少数场景下),要么就义掉可用性。留神:网络分区是可能存在的,呈现分区状况后很可能会导致产生“脑裂”景象。利用场景既然 CAP 三种个性不可同时失去保障,则设计零碎时候必然要弱化对某个个性的反对。弱化一致性对后果一致性不敏感的利用,能够容许在新版本上线后过一段时间才最终更新胜利,期间不保障一致性。例如网站动态页面内容、实时性较弱的查问类数据库等,简略分布式同步协定如 Gossip,以及 CouchDB、Cassandra 数据库等,都为此设计。弱化可用性对后果一致性很敏感的利用,例如银行取款机,当系统故障时候会拒绝服务。MongoDB、Redis、MapReduce 等为此设计。Paxos、Raft 等共识算法,次要解决这种状况。在 Paxos 类算法中,可能存在着无奈提供可用后果的情景,同时容许多数节点离线。弱化分区容忍性事实中,网络分区呈现概率较小,但很难完全避免。两阶段的提交算法,某些关系型数据库以及 ZooKeeper 次要思考了这种设计。实际中,网络能够通过双通道等机制加强可靠性,实现高稳固的网络通信。

February 16, 2022 · 1 min · jiezi