Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nacos [配置中心] 缓存不一致,Config dump的时候,通过时间戳判断是否是旧数据不合理 #12879

Open
dongyun-coder opened this issue Nov 21, 2024 · 3 comments
Assignees
Labels
area/Config kind/discussion Category issues related to discussion

Comments

@dongyun-coder
Copy link

dongyun-coder commented Nov 21, 2024

问题描述

  1. nacos 配置中心不同节点出现了缓存不一致
  2. 原因描述

ConfigCacheService 在更新dump的逻辑 (最新代码)
如果时间戳小于当前值,拒绝此次dump

//check timestamp
          boolean lastModifiedOutDated = lastModifiedTs < ConfigCacheService.getLastModifiedTs(groupKey);
          if (lastModifiedOutDated) {
              DUMP_LOG.warn("[dump-ignore] timestamp is outdated,groupKey={}", groupKey);
              return true;
          }

生产上出现了日志,导致最新的变更, 没有成功更新缓存
image

  1. 问题

这里用时间戳预期是避免旧数据的覆盖,可能是考虑到 集群内部同步的一些retry任务(retry任务时间戳可能比较旧),但是没有什么道理!

  • dump 单线程的,都是从db拉取的最新的数据,不存在覆盖的问题,永远都是最新的数据
  • 这个时间戳在短时间如果高频写入,会出现丢失更新的问题。
    这里举一个反例,比如 t1\t2 针对同一个dataid修改两次,t1<t2,但是因为gc等原因,t2先执行的 update db, 并且完成集群内部广播,成功执行完dump,t1 此时刚刚执行update db 成功,磁盘缓存就会导致最后一个更新丢失。
@dongyun-coder dongyun-coder changed the title Nacos [配置中心] 缓存不一致,Config dump的时候,通过时间戳判断是否是旧数据不合理,并导致磁盘缓存不一致 Nacos [配置中心] 缓存不一致,Config dump的时候,通过时间戳判断是否是旧数据不合理 Nov 21, 2024
@KomachiSion KomachiSion added area/Config kind/discussion Category issues related to discussion labels Nov 22, 2024
@KomachiSion
Copy link
Collaborator

我影响中这个lastModified时间是由数据库自动生成的, 所以应该不存在并发写时, 旧时间戳覆盖新时间戳的问题。如果我记错了请纠正。

dump的触发有几个不同的触发点, 比较常见的时配置变更时的主动dump,和定时进行的全量对账dump, 这两种dump是处于不同的线程进行,所以问题1:dump 单线程的,都是从db拉取的最新的数据,不存在覆盖的问题,永远都是最新的数据 可能不一定对。

@KomachiSion
Copy link
Collaborator

@shiyiyue1102 帮忙确认一下

@Sunrisea
Copy link
Contributor

使用的服务端是什么版本的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/Config kind/discussion Category issues related to discussion
Projects
None yet
Development

No branches or pull requests

4 participants