指什么?
c 集群的强数据一致
a 集群的100%可用
p 集群的容错
到底怎么去区分一款软件的cap?
即到底是哪一种?其实很简单。
1.c
只要是单个节点的,就是c。//同时,只要是单个节点的,就不是a。因为单个节点挂了,集群就不能服务。
2.a
说白了,就是一个节点挂了,对集群没有任何影响,任何时候都是可以提供服务的。比如,一个节点挂了,自动访问另外一个节点。
只要是多个节点,且节点之间平等,就是a。//同时,只要是多个节点,且平等,就不是c。因为多个节点,且平等,那么各个节点之间必然是需要复制数据,如果要复制数据,那么各个节点之间必然不是c。
3.p 现在,软件基本上都是分布式的,所以基本上都是p。即可以容错,容错的本质是,一个节点挂了,集群仍然可以提供服务。
这里面仍然可以提供服务,有两种情况:
1)中心化,即对外提供服务的只有一个节点 // 中心节点挂了之后,再选举一个出来。然后集群就仍然可以对外提供服务
2)非中心化,即每个节点平等,都对外提供服务 //一个节点挂了,自动访问另外一个节点,所以集群仍然是可以提供服务的
分布式软件
zk
1.满足CP
满足强数据一致性,因为是中心化的,leader只有一个。
满足容错,因为集群节点具有自恢复能力,即如果leader节点挂了,会选择Leader节点。
2.不满足A
不满足高可用,因为Leader挂了,要选举的这段时间(30s),是不可用的。
springcloud gateway Eureka
每个节点平等,所以满足AP。不满足C。
redis
满足ap。不满足c。