nacos
作为注册中心,nacos默认使用客户端主动上报心跳,服务端如果长时间没收到某一个实例的心跳,则会先标记此实例为不健康,之后再剔除该实例。服务启动时,要调用nacos的注册接口(/nacos/v1/ns/instance),入参ephemeral要设为true,表示这是临时实例,需要心跳。客户端会定期(默认是5s执行一次)向服务端发送请求(/nacos/v1/ns/instance/beat),心跳内容包括serviceName、ip、port。服务端收到心跳后,会更新实例的最后心跳时间,并标记实例为健康状态。服务端内部有一个定时任务(5s执行一次),若实例的最后心跳时间距现在超过15s,则服务端会标记此实例为不健康状态。若超过30s,则会剔除此实例。nacos有保护机制,当大量实例unhealthy时,不会立即全部删除。
zookeeper和nacos的心跳方式不一样,zookeeper是靠session+watch,consul是靠ttl+http检查。
如果ephemeral为false,则客户端不会主动向服务端发送心跳。
作为注册中心,nacos集群是AP。同步采用distro协议。客户端注册到某个nacos节点,比如A,A节点会本地写入实例数据,并异步同步给其他节点,实现最终一致性。
作为配置中心,nacos集群是CP,即是强一致性的。同步基于Raft协议,各节点分为leader、follower,leader收到写请求后,会先写本地日志,然后同步给followers,如果超过半数节点写入成功,则返回成功,否则返回失败。
综上,Nacos 采用AP+CP混合架构:服务注册基于Distro协议实现最终一致(AP),配置中心基于Raft协议实现强一致(CP),在可用性与一致性之间做了业务级别的权衡。Nacos的AP和CP不能通过配置切换。
浙公网安备 33010602011771号