【一句话】CAP原则

首先一句话:

如果出现网络分区(P),持有旧数据的节点是否要继续提供服务,提供就保证了可用(A),但数据不一定新,放弃了C;如果不提供服务,则意味着放弃了可用性A,但是保证数据一致(C)。

我的理解:

P就是网络延迟,CAP不可兼得,但是分布式系统必然会有网络延迟问题,即分布式系统必然具备P的属性。那剩下的C和A其实就是在分区发生时对分布式系统的取舍。如果注重C,则保持强一致性,如ES,需要primary分片及所有副本全部写入才可查。虽然某个副本写入失败ES也认为是一次成功的写入,不过副本分配重新启动后会处于INITIALIZING状态,从primary分片同步数据,此时放弃了A,即不对外提供查询服务,直到数据完全恢复至与主分片完全一致,才对外提供查询服务。如果注重A,即放弃强一致性,保持最终一致性,用户写入后,查询可能查询到旧数据。
以上对ES的CAP仅限于我的理解,网络上好多文章其实对ES是AP还是CP是有争议的,目前没找到一个特别通透的说法,如果你看到过,还望指点。

 

posted @ 2023-01-05 17:06  马儿跑  阅读(41)  评论(0编辑  收藏  举报