目 录CONTENT

文章目录

CAP理论

Jinty
2023-12-16 / 0 评论 / 0 点赞 / 16 阅读 / 6893 字

CAP理论之分布式系统的三个指标

分布式系统的三个指标:

  • Consistency(一致性)

  • Availability(可用性)

  • Partition tolerance(分区容忍性)

一致性:在写入操作完成后开始的任何读取操作都必须返回该值或以后写入操作的结果

数据一致性:保证分别存储在两个及以上的不同的地方的同一份数据相同,称为数据一致性

事务一致性:保证一个事务操作影响到的两个及以上不同的数据的关联性一致,称为事务一致性。

一致性又分为同一时刻的一致性最终一致性

当然,CAP理论中的C指的是同一时刻的一致性,且强调的是数据发生变化后的一致性。

可用性:系统中非故障节点收到的每个请求都必须产生响应

分区容忍性:网络将被允许丢失从一个节点发送到另一个节点的任意多条消息。

一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。

当你一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了。这时分区就是无法容忍的。

提高分区容忍性的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。容忍性就提高了。

然而,要把数据复制到多个节点,就会带来一致性的问题,就是多个节点上面的数据可能是不一致的。要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题。

总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保证。为了保证一致性,更新所有节点数据所需要的时间就越长,可用性就会降低。

如果集群中的机器被分成了两部分,这两部分不能互相通信(数据可能不一致性),系统是否能继续正常工作。

容忍:可以正常工作,即可以容忍数据不一致。

不容忍:不能正常工作,数据不一致性必须保持一致。

这三个指标主要用于评估分布式系统在面临网络分区(网络故障导致节点之间无法通信)的情况下,系统能够保证哪些方面的特性。

CAP指标的作用包括:

  1. 评估系统设计的权衡:CAP指标帮助系统设计者在一致性、可用性和分区容忍性之间进行权衡。在分布式系统设计中,往往无法同时满足这三个特性,因此需要根据具体业务需求和系统环境来选择合适的权衡方案。

  2. 指导系统设计和实现:CAP指标可以指导系统设计者在设计和实现分布式系统时,考虑如何处理网络分区、保证数据一致性和可用性等问题。它帮助系统设计者更好地理解系统的局限性和需要解决的挑战。

  3. 帮助系统评估和选择合适的分布式存储方案:CAP指标也可以帮助系统评估和选择合适的分布式存储方案。不同的存储系统可能在一致性、可用性和分区容忍性方面有不同的权衡,CAP指标可以帮助系统设计者选择适合自己业务需求的存储方案。

CAP指标在分布式系统设计和实现中起着重要的作用,帮助系统设计者理解系统的特性和局限性,指导系统设计和实现,并帮助系统评估和选择合适的存储方案。

CAP理论之CAP不能同时保证

CAP 定理指出,分布式系统不能同时保持一致、可用和分区容错。

为什么C、A、P不能同时保证?

在单体系统中,不存在网络分区,因此不需要考虑这些,而分布式系统中由于分布式的部署方式,存在网络分区,不同分区间通信可能存在网络故障等因素,造成不同分区在网络故障这一时刻的数据不一致(这个问题无法避免,即P的发生会导致C无法满足),这时候就需要针对这种情况进行取舍,是必须保证数据的一致性才能提供相应的服务,还是可以忍受此刻数据的不一致性(后续可以通过最终一致性方案,保证数据的最终一致性)。

分布式场景:

假设C为客户端,G1、G2为分布式部署在两个分区的同一服务,V为服务系统中的数据,v0和v1代表该数据V不同的状态,假设该系统G1和G2的数据分别存储,即数据V在G1中有一份,在V2中有一份,且初始值都为v0。

考虑分区容忍性,G1和G2之间提供数据同步,保证数据一致性。

①初始时,C读取V,可能从G1中获取,也可能从G2中获取,此时读到的都是v0。

②C写入v1,可能是G1处理,也可能是G2处理。

③C再次读取V,可能从G1中获取,也可能从G2中获取。

如果要保证数据同一时刻的一致性,那么假设第②步请求是被G1处理,为了保证 G2 的一致性,那么 G1 必须在写操作时,锁定 G2 的读操作和写操作。只有分区数据同步完成后,才能重新开放G2的读写。锁定期间,G2 不能读写,此时没有可用性(CP)。如果保证 G2 的可用性,那么势必不能锁定 G2,C的再次读取请求被G2处理,返回的将是v0,此时没有一致性(AP)。

如果要可以容忍数据在这一时刻的不一致性(后续通过最终一致性方案保证数据的最终一致性),那么假设第②步请求是被G1处理,C的再次读取请求被G2处理,返回的将是v0,此时没有一致性(AP)。

FAQ

Q:一致性和可用性,为什么不可能同时成立?

A:因为可能通信故障等因素,会造成分区数据不一致(即出现分区容错),如果需要保证一致性,必须降低可用性。如果为了保证可用性,无法保证一致性。

Q:在什么场合,可用性高于一致性?在什么场合,一致性高于可用性?

A:

高可用性 -> 低一致性:

可用性高于一致性的场合通常是在需要快速响应和持续运行的系统中,特别是在互联网和移动应用领域。在这些场合,用户希望能够随时随地访问系统,并且系统能够快速响应他们的请求,即使数据可能存在一定程度的不一致也可以接受。例如,在社交媒体应用中,用户更关心能够快速加载和发布内容,而不是数据的绝对一致性。因此,在这种情况下,可用性通常被认为比一致性更重要。

高一致性 -> 低可用性:

一致性高于可用性的场合通常是在涉及到数据的存储和处理的系统中,特别是金融、医疗、和安全领域。在这些领域中,数据的一致性非常重要,因为任何数据的不一致都可能导致严重的后果。因此,即使牺牲一定的可用性,也要保证数据的一致性。例如,在银行系统中,如果账户信息出现不一致,可能会导致客户的资金安全受到威胁,因此一致性必须优先考虑。

参考资料

[1] An Illustrated Proof of the CAP Theorem (mwhittaker.github.io)

[2] CAP 定理的含义 - 阮一峰的网络日志 (ruanyifeng.com)

0

评论区