- Zookeeper:保证CP,放弃可用性;一旦zookeeper集群中master节点宕了,则会重新选举leader,这个过程可能非常漫长,在这过程中服务不可用。
- Eureka:保证AP,放弃一致性;Eureka集群中的各节点平等,一旦某个节点宕了,其他节点正常服务(一旦客户端发现注册失败,则将会连接集群中其他节点),虽然保证了可用性,但是每个节点的数据可能不是最新的。
- Nacos:同时支持CP和AP,默认是AP,可以切换;AP模式下以临时实例注册,CP模式下服务永久实例注册。
1、AP模式
默认,临时实例 ,
健康检查:主动上报服务端,异常服务端自动剔除
spring:cloud:nacos:discovery:server-addr: 192.168.20.113:8848namespace: cedb1f46-d9ae-43b1-99db-39b245152543group: DEFAULT_GROUP# true=临时实例ephemeral: true
2、CP模式
设置为永久实例,ephemeral=false
永久实例,
健康检查:服务端广播,异常标记为不健康
下线需要通过APi接口调用
curl -X DELETE 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=user&groupName=DEFAULT_GROUP&namespaceId=cedb1f46-d9ae-43b1-99db-39b245152543&ip=169.254.100.102&clusterName=DEFAULT&port=8001&ephemeral=false'
服务端集群部署下开启CP模式
# 数据库连接信息
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://your-mysql-server:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root# 使用CP模式
nacos.core.auth.enabled=true
nacos.core.auth.cache.enable=false
3、保护阈值:
实例异常,流量转移,导致雪崩。
健康实例数/总实例数 < 保护阈值(0-1) ,进行限流(返回健康与不健康实例),确保剩余实例可用