分布式 cap

176 阅读2分钟

指什么?

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。

参考

juejin.cn/post/684490…

www.hollischuang.com/archives/66…