分布式-CAP理论

CAP理论:一个分布式系统最多能同时满足一致性、可用性、分区容错性这三项中的两项。CAP中的一致说的是强一致性

Consistency 一致性 : 所有节点上的数据,时刻保持一致

 一致性分为强一致性、弱一致性、最终一致性

  例子:有一个mysql集群(a,b),  mysql中有一份数据初始值为1,现有一个用户User,User有两步操作:

  1. 修改mysql集群中的数据为2(假设修改的是a, b中的更改需要同步)

  2. 读取mysql集群中的数据(假设读取的是b)

  强一致性:要求步骤2读取的时候,一定要读取的是2,那么要求mysql之间同步非常迅速或在步骤2上加锁以待数据同步完成

  弱一致性:允许步骤2读取的时候,可以读取的是1,其实就是不需要一致

  最终一致性:允许步骤2读取的时候,可以先读到1,过一段时间再读到2

Availablility可用性 :每个请求在正常响应时间内都能够收到一个响应,无论响应成功或者失败。

Partion Tolerance分区容错性:分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

CAP证明

CAP权衡

1. CA without P : 这种情况在分布式系统中几乎是不存在的。分布式环境下,分区是必然的,如果舍弃P,意味着要舍弃分布式系统。

2. CP without A : 一旦发生网络故障或信息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问。如Rediszookeeper

3. AP without C: 一旦发生网络问题,为了保证高可用,需要在用户访问时马上得到响应,则每个节点只能用本地数据提供服务,这样会导致全局数据的不一致性。

适用场景

对于涉及到钱财这样不能有一丝让步的场景,C必须保证。网络发生故障宁可停止服务。

对于其他场景,比较普遍的做法是AP,舍弃强一致性,使用最终一致性来保证数据的安全。

BASE理论

即使无法做到强一致性(CAP的一致性就是强一致性),但应用可以采用合适的方式达到最终一致性。

BASE是指基本可用、软状态、最终一致性。

基本可用:分布式系统在出现故障时,允许损失部分可用性,保证核心可用。比如

数据库采用分片模式, 把100W的用户数据分布在5个实例上。如果破坏了其中一个实例,仍然可以保证80%的用户可用

软状态:允许系统存在中间状态,该状态不会影响系统整体可用性。分布式存储中一般数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。

最终一致性:系统中所有数据副本经过一定时间后,最终能达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

原文地址:https://www.cnblogs.com/yintingting/p/5680183.html