分布式系统基础--CAP理论

缺乏、安全感 2022-02-22 17:06 387阅读 0赞

CAP理论(一个分布式系统至多只能满足三项中的两项)

一致性(Consistency) 所有节点在同一时间访问到的数据完全一致

可用性(Availability) 非故障节点对每一个请求能做出响应

分区容错性(Partition Tolerance) 当集群中的某些结点无法联系时仍能正常提供服务

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lheWFfMTIzNDU2Nzg_size_16_color_FFFFFF_t_70

说说一致性:

一致性是因为多个数据拷贝下并发读写才有的问题

若从客户端和服务端两个不同的视角来看

  • 客户端:一致性主要指的是数据更新后,在多并发访问时如何获取
  • 服务端:指更新如何分布到整个系统,以保证数据最终一致

一致性,可以分为强/弱/最终一致性三类

从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。

  • 强一致性:关系型数据库,要求更新过的数据能被后续的访问都能看到
  • 弱一致性:能容忍后续的部分或者全部访问不到
  • 最终一致性:经过一段时间后要求能访问到更新后的数据

CAP的证明

v2-fcd823804add6168202abe11994fd1d0_hd.jpg

上图是证明CAP的基本场景,网络中有两个节点N1和N2,他们之间网络可以连通,N1、N2中均有一个应用程序A/B,和一个数据库V。两个V0是分布式系统的数据存储的两个子数据库

在满足一致性的时候,N1和N2中的数据是一样的,V0=V0

在满足可用性的时候,用户不管是请求N1或者N2,都会得到立即响应

在满足分区容错性的情况下,N1和N2有任何一方宕机,或者网络不通的时候,都不会影响N1和N2彼此之间的正常运作

v2-3a4f63d521b0286b8360d1a6e8352d73_hd.jpgv2-3a4f63d521b0286b8360d1a6e8352d73_hd.jpgv2-3a4f63d521b0286b8360d1a6e8352d73_hd.jpgpreview

如上图,分布式系统正常运转下,用户向N1机器请求数据更新,程序A更新数据库V0为V1,分布式系统将数据进行同步操作M,将V1同步到N2中的V0,使得N2中的数据V0也更新为V1,N2此时响应读数据请求则与N1中一致

现在假设一种极端情况,N1和N2之间的网络断开了,分布式系统要支持这种网络异常,相当于要满足分区容错性,能不能同时满足一致性和响应性呢?

v2-3a4f63d521b0286b8360d1a6e8352d73_hd.jpgv2-3a4f63d521b0286b8360d1a6e8352d73_hd.jpgv2-54009ad0fc14e0d4d9a45429cfbe4869_hd.jpg

假设在N1和N2之间网络断开的时候,有用户向N1发送写数据请求,那N1中的数据V0将被更新为V1,由于网络断开,分布式系统无法同步操作M,故N2中的数据依旧是V0

此时,有用户向N2发送读数据请求,由于数据还没有进行同步,应用程序没办法立即给用户返回最新的数据V1,怎么办呢?有二种选择:

第一,牺牲一致性,响应旧的数据V0给用户

第二,牺牲可用性,阻塞等待,直到网络连接恢复,数据更新操作M完成之后,再给用户响应最新的数据V1

这个过程,证明了要满足分区容错性的分布式系统,只能在一致性和可用性两者中,选择其中一个

CAP权衡

CA without P:舍弃P(不允许分区容错),则C(强一致性)和A(可用性)是可以保证的。但其实分区不是想不想的问题,而是始终会存在,因此CA的系统更多的是允许分区后各子系统依然保持CA

CP without A:舍弃A(可用性),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长。很多传统的数据库分布式事务都属于这种模式
AP wihtout C:舍弃C(一致性),要高可用并允许分区,一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性,现在众多的NoSQL都属于此类

Teorema-CAP-2

高可用性:指系统无中断地执行其功能的能力,代表系统的可用性程度

其度量方式,是根据系统损害、无法使用的时间,以及由无法运作恢复到可运作状况的时间,与系统总运作时间的比较。计算公式为: \{\\displaystyle A=\{\\rm \{\\frac \{MTBF\}\{MTBF+MTTR\}\}\}\}

A(可用性),MTBF(平均故障间隔),MDT(平均修复时间)

在线系统和执行关键任务的系统通常要求其可用性要达到5个9标准(99.999%)—-年故障时间为5分15秒

发表评论

表情:
评论列表 (有 0 条评论,387人围观)

还没有评论,来说两句吧...

相关阅读

    相关 分布式理论 - CAP

    tip: 作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 推荐:[体系化学习Java(Java面试

    相关 分布式系统CAP理论和BASE理论

    随着现在系统越来越复杂,单机系统很难满足业务的发展,因此分布式系统应用越来越广泛,在两极不是很大的时候单机系统可以很好的满足需求,但是随着应用不断扩大,这个时候就需要分布式系统

    相关 分布式理论基础CAP和BASE理论

    对于集中式的事务处理系统,我们可以使用很成熟的ACID模型来保证数据的强一致性。而对于分布式系统,如果我们期望实现一个满足ACID特性的分布式事务,很可能就会在系统的可用性和强