注册中心流程
1)服务提供者启动时把服务注册到nacos注册中心。
2)服务提供者注册成功后,定时发http请求(即心跳)到注册中心,证明自身服务实例可用。
3)如果注册中心长时间没有收到服务提供者的心跳,则剔除该实例或把监控状态设置为false。
4)服务消费者发现服务支持两种方式:
4.1)一种是主动请求注册中心获取服务列表
4.2)订阅注册中心的服务并注册一个listener,如果注册中心的服务有变更,由listener来通知服务消费者更新本地服务列表
5)服务消费者获取服务相关信息进行远程调用。
服务实例类型
1)临时实例,注册中心的服务类型默认为临时实例,健康检查,客户端主动删,如果超过30秒没有收到心跳,则移除实例
1.1)可能产生的问题:大面积删除实例 ,当Nacos 本身网络故障时,可能大面积删除临时实例,极端情况下会导致注册列表全部清空,如果清空后的列表成功下发到 消费者的客户端,会造成严重故障
2)永久实例,可以通过配置参数实现,监控检查使用反向探测机制,会保留不健康的实例。
优点:保护阈值存在的意义在于当服务A健康实例数/总实例数 < 保护阈值时,说明健康的实例不多了,保护阈值会被触发(状态true). Nacos会把该服务所有的实例信息(健康的+不健康的)全部提供给消费者,消费者可能访问到不健康的实例,请求失败,但这样也⽐造成雪崩要好。牺牲了⼀些请求,保证了整个系统的可⽤。
健康检查
1)注册中心的两种服务实例,临时实例和永久实例
2)临时实例的健康检查使用的是客户端主动上报机制,每个5秒会主动上报一次自己的健康状态,这种机制也叫心跳机制。如果心跳包的间隔时间超过15秒,那么nacos服务端就会将此服务实例标记为非健康实例,如果心跳包超过30s秒,那么nacos服务端将会把此服务实例从服务列表中删除。
3)永久实例采用的是服务端反向探测机制。可以使用http探测和tcp探测,http探测是调用nacos客户端的接口是否返回200,tcp探测是通过与注册实例建立信道,不断ping注册实例的端口,来判断实例是否健康。
nacos 集群选举机制
nacos的集群是通过raft共识算法实现的