CAP理论这一篇够了

CAP

  C(Consistency):强一致性

  A(Availability):可用性

  P(Parition tolerance):分区容错性

  这三个基本需求,最多只能同时满足其中的两项,在分布式环境下因为P是必须的,因此往往选择就在 CP 或者 AP 中

各种组合的场景

  CA - 这个比较特殊,在分布式场景下这个不可能被实现。一般在 单点 或 单点集群上来实现,满足一致性 和 可用性,通常扩展性上不太友好。

  CP - 满足一致性 和 分区容错性 的系统,通常性能不是特别高。

  AP - 满足可用性 和 分区容错性 的系统,通常可能对一致性要求比较低。

Nacos/Eureka 和 Zookeeper 的区别

  结论:

    nacos/eureka 遵循 AP 原则

    zookeeper 遵循 CP 原则

  zookeeper 保证 CP 原则:

    当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟之前的注册信息,但不能接受服务直接 down 掉不可用。也就是说,服务注册功能对可用性的要求高于一致性。

    但是 zk 会出现这一种情况,当 master 节点因为网络原因与其他节点失去联系时,剩余注册功能就会重新进行 leader 选举。

    问题就在于 zk 选择 leader 的时间太长,30~120s,且选举期间整个 zk 集群都是不可用的,这就导致在选举期间注册服务瘫痪。

  nacos/eureka 保证 AP 原则:

    nacos/eureka 看明白了这一点,因此在设计时就优先保证可用性。nacos/eureka 各个节点都是平等的,几个节点挂掉不影响其他节点的正常工作,剩余节点仍然可以提供注册和查询服务。

    而如果 nacos 客户端向某个 nacos 注册 或 查询 发现链接失败时,会自动切换至其他节点,只要有一台 nacos 存在,就能保证服务的可用,只不过可能查到的信息不是最新的。

    除此以外,nacos 还有一种自我保护机制,如果在 15min 之内超过 85% 的节点都没有正常的心跳,那么 nacos 就认为客户端 与 注册中心 出现了网络故障。

    出现网络故障后,nacos 会做以下几件事情:

    1. nacos 不会从注册列表中 移除 因为长时间没收到心跳而过期的服务

    2. nacos 仍然能够接受新服务的 注册 和 查询 请求,但是不会被同步到其他节点上(保证当前节点仍然可用)

    3. 当网络稳定时,当前实例新的注册信息会被同步到其他节点上

    因此,nacos 可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像 zookeeper 那样导致整个注册服务瘫痪。

猜你喜欢

转载自www.cnblogs.com/liang1101/p/13186479.html