Skip to content

零实例保护

Haotian Zhang edited this page Dec 18, 2024 · 8 revisions

目录

简介

当服务端因为某种原因推送了空的服务实例列表,可选用零实例保护开关,使用上一次服务实例列表。以防止没有实例带来的请求调用报错。零实例保护机制在2.0.0.0及以上版本提供。

服务端推送空的实例列表有如下可能:

  • 因为某些网络原因,部分实例与北极星注册中心无法连通,导致实例变为不健康,并触发北极星注册中心针对不健康实例的清理行为,导致某服务下的实例列表清空。但其实,这些实例都是正常运行的,只是没能正确注册到北极星注册中心。

实现设计

SCT 在服务发现中拉取到空的服务实例列表时,首先会读取当前缓存中的数据,也就是上一次服务实例列表,然后填充到本次服务发现中。与此同时,SCT 会提交一个异步探测任务,通过尝试建立 socket 连接来探测上一次服务实例列表中的实例是否真的正常运行中。最后将探测后的服务实例列表,再更新到内存中。

image

完整的的配置列表如下

配置项Key 默认值 是否必填 初始版本 配置项说明
spring.cloud.polaris.discovery.zero-protection.enabled false 是否开启零实例保护
spring.cloud.polaris.discovery.zero-protection.is-need-test-connectivity false 零实例保护时,是否探测节点是否连通
Clone this wiki locally