1998年提出了分布式系统的三个指标CAP(Consistency、Availablity、Partition-tolerance)其中:
同一时刻
,必须是同样的
比如图床服务:后台是三台机器A、B、C 做支撑,上传一张图片,通过网关最终可能是A处理的,随后 马上请求这张图片,通过网关轮询算法,这个请求极有可能部落在A上了,那么他说:不管落在B、C哪个机器上,该图片必须存在并返回,否则,就不是一致性
如果就有多个分区要执行写操作,如果分布式存储系统分片
同步、或集群系统的主从
同步总会有个先后顺序,在这个先后顺序中,就产生了不一致的问题,这时候你:
暂时
不一致。强一致性
,那么同步操作就会影响你的可用性
。一致性、可用性、分区容错性
,只能任意选择其中两个。简单看是没错,但是AC满足嘛?要么AP,要么CP,要么AC
,但是不存在CAPAP(Eureka) 选择可可用性
、CP(Zookeeper、HDFS)
都选择了一致性但是AC的模型不存在?如何做到不会通信失败呢?作者的意思是只能CP或者AP因为由于网络问题,将系统的成员隔离成了2个区域,互相无法知道对方的状态,这在分布式环境下是非常常见的.所以说只能从A和C中选一个.所以P必选。要建一个永远不发生多相关故障的网络,对于分布式系统来说是不切实际的。所以设计者必须在一致性(C)和可用性(A)之间做选择,
在分布式环境下面,P是特定存在的,也就是只要我们有多台机器,那么网络隔离分区就一定不可避免,所以在设计系统的时候我们就要选择到底设计的是 AP系统还是 CP系统,但实际上,我们只要深入理解下CAP,就会发现其实有时候系统设计上面没必要这么纠结,主要表现在:
网络分区出现的概率虽然时常有发生但是我们可以通过感知心跳强行剔除下线,将流量平均分往其他节点,毕竟谁也不能保证网络百分百稳定,不出现网络分区。自然而然的没必要刻意A、C 中选一个,而是可以都做得不错。也就是百度百科说的AC系统
CAP 里面规定A是 100% 的可用性,但实际上,我们只需要提供 high availability,也就是像网关一样,全年不宕不可能,但是满足99.99%或者99.999%等几个9就可以了。
原文:https://www.cnblogs.com/qichunlin/p/12145295.html