CAP 和 BASE 理论

CAP 理论

一个分布式系统最多只能同时知足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这其中这两项mysql

一致性(Consistency)

指全部节点在同一时间看到的数据彻底一致,这里说的就是数据一致性。
其中一致性又能够分为sql

  • 强一致性:CAP 理论中的一致性就是指的强一致性。好比一个主从结构的 MySQL 集群,强一致性则要求对主库的写必须在从库同步完成后才对外部可见,这样全部用户在同一时间点看到的数据就是一致的。
  • 弱一致性:数据更新成功后,系统不承诺当即读到最新的值,也不承诺具体多久能读到最新的值
  • 最终一致性:弱一致性的一种形式,数据更新成功后可能会存在短暂的不一致,可是在过一段时间后,结点间的数据最终会达到一致性。

可用性(Availability)

可用性是指分布式服务一直处于可用状态,即用户发起的请求老是可以在有限时间内处理而且返回。数据库

在衡量分布式系统的可用性的时候,通常是经过停机时间来计算的。服务器

可用性类型 可用水平(%) 年可容忍停机时间
容错可用性 99.9999 < 1 min
极高可用性 99.999 < 5 min
具备故障自动恢复能力的可用性 99.99 < 53 min
高可用性 99.9 < 8.8 h
商品可用性 99 < 43.8h

分区容错性(Partition Tolerance)

分布式系统在遇到某结点或者网络分区故障的时候,仍然可以正常对外提供服务网络

CAP 理论证实

假设此时有 N1 和 N2 两台计算机分别部署应用 A 和 B 同时 A 对应的数据库为 D1,B 对应的数据库是 D2,假设若是能同时知足 CAP 特性他们应该是这样的

  • 知足一致性:D1 和 D2 数据始终一致
  • 知足可用性:不管是请求 N1 服务器仍是请求 N2 服务器,都可以正常响应,而且D1 和 D2 数据可以达到一致性
  • 知足分区容错性:N1 或者 N2 其中一台服务器不可用了,也可以正常对外提供服务

假设架构

  • 外部请求 N1 和 N2 可否正常响应做为可用性
  • N1 和 N2 之间网络环境做为分区容错性
  • D1 和 D2 之间的数据是否同样做为一致性

因为在单机的状况数据库是能够保证其自身事务的 ACID 特性的,在分布式环境中主要影响他们的则是网络通讯问题这个不肯定因数,可是对于分布式服务来讲,在部分服务器网络通讯出现异常的时候也必须可以正常响应也就是分布式系统必需要知足分区容错性,不知足分区容错性的分布式服务没有意义。并发

因此咱们这里只讨论,在知足分区容错性的前提下是否可以同时知足一致性和可用性这 2 种状况异步

  1. 知足一致性,在这种状况下,必须得保证 D1 和 D2 数据的一致性。那么若是要再知足可用性的话,由于某一台服务器可能不可用了,这样 D1 和 D2 没法数据同步了,这样就和一致性冲突了,必须等待等到不可用的服务器恢复以后才能正常提供服务。
  2. 知足可用性,在这种状况下,若是要去知足一致性则没法作到了,由于某一台机器不可用了,数据不可能达到一致性

在此就能看出咱们在知足分区容错性的前提下,只能在一致性和可用性中二选一。分布式

这里的二选一中的一致性是指的是强一致性,咱们能够退而求其次的选择最终一致性方案。由于最终一致性方案可能会致使中间有一段时间内数据是不一致的,因此具体选用仍是要分状况。好比涉及到金钱相关的操做,能够只选择分区容错性和一致性,即出现分区故障的时候优先保证数据的一致性,让服务暂时不可用这样的场景在银行等机构都有使用,咱们能够权衡使用。高并发

CAP 权衡

CA without P

保证一致性和可用性舍弃分区容错性。这样的场景几乎不存在,舍弃分区容错性意味着舍弃分布式系统,咱们只能想办法去增强基础设施建设区下降网络分区的发生。

CP without A

保证一致性和分区容错性而舍弃可用性。这意味着若是发生网络分区,那么系统会处于不可用状态直到网络分区的恢复。

知足这种性质的其实仍是挺多的好比 Zookeeper 它会优先保证 CP,好比金融机构某些核心的金融业务优先保证 CP 系统暂时的不可用也比资金流失好多了。

AP without C

保证可用性和分区容错性舍弃一致性。这里舍弃的是强一致性,某些应用能够退而求其次的选择最终一致性。

强一致性通常是采用 XA 协议来实现的它采用 2 PC 协议 其中可能涉及到长时间的阻塞而致使系统并发性下降吞吐量急剧降低,没法知足高并发下的场景

因此说不少大型应用都是选择的 AP without C 而后保证最终一致性,好比在淘宝商城购买商品发现还有库存,可是下单支付的时候却提示库存不足,好比在 12306 抢票的时候看到还有票结果支付的时候却提示余票不足(相信你们都有过相似体验)这样的状况其实无伤大雅。

BASE 理论

在 CAP 理论中咱们讲了,系统没法同时知足 CAP,可是能够退而求其次的选择 AP 而后保证最终一致性

eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即便没法作到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用能够采用适合的方式达到最终一致性(Eventual Consitency)

基本可用(BASE)

基本可用是指容许损失部分可用性,保证核心可用便可。

好比在秒杀场景中,为了应对用户可能出现的激增状况,要保证服务器不会所以出现错误,那么达到服务器承载的上限后,服务器就只能为后续的请求提供降级服务了,将后面一部分用户的请求进行排队或者是引导到降级页面去,这就是损失部分可用性,保证核心可用的一种体现。

软状态(Soft State)

软状态是指容许系统存在中间状态,而该中间状态不会影响系统的总体可用性。分布式存储中通常至少会有三个副本,容许不一样节点间副本同步的延时就是软状态的体现,mysql replication 的异步复制也是一种体现。

最终一致性(Eventual Consistency)

最终一致性是指系统中的全部数据副本通过必定时间后,最终都能达到一致性的状态,是弱一致性的一种体现

参考:

相关文章
相关标签/搜索