nacos
nacos copied to clipboard
特殊场景下,listen 未推送最新值
特殊场景:
- 一个主机同时启动两个进程
- 两个进程都先get,然后做业务方法,然后listen 配置
- 同时另外一个客户端会进行更新配置
因为两个进程会公用同一个磁盘缓存目录,第一次listen 时会读取磁盘上的md5值。所以以下情况时
时间 | 服务端客户端 | 服务端A | 服务端B | 磁盘缓存 |
---|---|---|---|---|
T1 | 写入T1 | |||
T2 | Get V1 | V1 | ||
T3 | 写入T2 | |||
T4 | Get V2 | V2 | ||
T4 | Listen 无返回 | Listen 无返回 | V2 |
如果配置不再更新,那么服务端A 将永远无法拿到V2 的值
现在想到的方式是为磁盘缓存目录追加pid ,但是如何清理历史的目录就是个问题
md5应该是内存级别的比对, 如果是不同的两个进程,内存是不共享的,应该不会出现这个情况。
md5应该是内存级别的比对, 如果是不同的两个进程,内存是不共享的,应该不会出现这个情况。
第一次listen 是会读磁盘的
可以通过不同进程指定不同缓存目录避免,或者指定nacos.cache.data.init.snapshot=false
,让首次listen必定回调callback
nacos.cache.data.init.snapshot
nacos.cache.data.init.snapshot go 客户端中 好像没这个配置项,java我看到了
正常不同的服务端的本地缓存目录是不同的,不会相互影响
正常不同的服务端的本地缓存目录是不同的,不会相互影响 业务可能会使用固定目录
本地
业务只能指定缓存目录的主目录,实际访问每个服务端的缓存目录nacos内部会在主目录下创建不同的缓存子目录
我看到
在go语言sdk中也可以加上这个机制
本地
业务只能指定缓存目录的主目录,实际访问每个服务端的缓存目录nacos内部会在主目录下创建不同的缓存子目录
我知道,但是现在就是他们访问的是同一个服务端