分布式中CAP原理

CAP

C(一致性),A(可用性),P(分区容错)

在这里插入图片描述

AP:满足可用性和分区容错

当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。

数据可以短暂不一致,但最终是需要一致的,无论如何都要保证服务的可用。

AP模式为临时实例,默认情况下,启动服务后,每隔5秒会向nacos发送一个"心跳包",这个心跳包中包含了当前服务的基本信息,Nacos收到这个“心跳包”如果发现这个服务的信息不在注册列表中,就进行注册,如果这个服务的信息在注册列表中就表明这个服务还是健康的。

客户端通过心跳上报的方式告知nacos 注册中心健康状态(默认心跳间隔5s,nacos将超过超过15s未收到心跳的实例设置为不健康,超过30s将实例删除)

这种特性适合于需要应对流量突增的场景,服务可以弹性扩容,当流量过去后,服务停掉即可自动注销。

CP:满足一致性和分区容错

当网络分区出现后,为了保证一致性,就必须拒绝请求,否则无法保证一致性。

我们服务可以不能用,但必须要保证数据的一致性。

CP模式为永久实例,启动时向nacos注册,nacos会对这个实例进行持久化处理,nacos主动检查客户端的健康状态(默认时间间隔20s,健康检查失败后会设置为不健康,不会立即删除),优点就是可以实时的监控到实例的健康状态,便于后续的告警和扩容等一系列处理。只有项目的主干业务才会设置为永久实例。

CP和AP模式之间的相互转换

curl -X PUT "$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP"

curl -X PUT "$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=AP"

成功示例:

在这里插入图片描述

需配置如下选项指明注册为临时/永久实例
AP模式不支持数据一致性,所以只支持服务注册的临时实例,CP模式支持服务注册的永久实例,满足配置文件的一致性

spring: 
  cloud:
    nacos:
      discovery:
        # 示例类型(true为临时实例,false为永久实例 ==> CP模式)
        ephemeral: true

tip:

  • 这个不能随便切,建议保持默认的AP即可。
  • 集群环境下所有的服务都要切换
  • 可以使用postman模拟,必须使用put请求。用get和post均无效

猜你喜欢

转载自blog.csdn.net/weixin_49339471/article/details/128933816