跳到主要内容
📖 本章预览

本章为预览版本,展示部分核心内容。完整内容包含详细源码解析、实战代码和面试要点,加入知识星球即可解锁全部章节。

第十二章:Config 存储与 Dump 同步

Dump 机制是配置中心"DB → 内存 → 推送"三级流水线的核心环节。没有 Dump,配置查询就要直接查 DB,推送也无从触发。

Dump同步机制

12.1 Dump 机制的本质

                    Dump
DB(MySQL/Derby) ─────────→ 内存(CacheItem) ─────→ 磁盘缓存
│ │
│ 配置发布写入 │ MD5 + lastModified
│ │
│ │ MD5 变更时:
│ │ 发布 LocalDataChangeEvent
│ │ → 触发 gRPC 推送
│ │ → 触发长轮询唤醒

Dump 的本质:将 DB 中的配置数据同步到内存 CacheItem 和磁盘缓存

为什么不直接查 DB?

  1. 性能:配置查询直接读内存/磁盘,QPS 可以非常高
  2. 推送驱动:通过 MD5 比对判断配置是否变更,变更才推送
  3. 集群一致:所有节点共享 MySQL,Dump 保证各节点缓存与 DB 一致

12.2 DumpService — 核心抽象类

12.2.1 构造函数 — 初始化任务管理器

public abstract class DumpService {
private TaskManager dumpTaskMgr;
private TaskManager dumpAllTaskMgr;

public DumpService(...) {
this.processor = new DumpProcessor(configInfoPersistService,
configInfoGrayPersistService);
this.dumpAllProcessor = new DumpAllProcessor(configInfoPersistService);

this.dumpTaskMgr = new TaskManager("com.alibaba.nacos.server.DumpTaskManager");
this.dumpTaskMgr.setDefaultTaskProcessor(processor);

// 监听 ConfigDataChangeEvent → 触发增量 Dump
NotifyCenter.registerSubscriber(new Subscriber() {
@Override
public void onEvent(Event event) {
if (event instanceof ConfigDataChangeEvent) {
ConfigDataChangeEvent evt = (ConfigDataChangeEvent) event;
DumpRequest dumpRequest = DumpRequest.create(
evt.dataId, evt.group, evt.tenant,
evt.lastModifiedTs, NetUtils.localIp());
dumpRequest.setGrayName(evt.grayName);
dump(dumpRequest);
}
}
});
}
}

12.2.2 dumpOperate() — 启动时的核心流程

protected void dumpOperate() throws NacosException {
// ① 启动时全量 Dump 所有正式配置
dumpAllConfigInfoOnStartup(dumpAllProcessor);
// ② 启动时全量 Dump 所有灰度配置
dumpAllGrayConfigInfoOnStartup(dumpAllGrayProcessor);
// ③ 非单机模式下,启动定时任务
if (!EnvUtil.getStandaloneMode()) {
// 定时全量 Dump(每 6 小时一次,兜底防止增量遗漏)
// 定时增量 Dump(只处理最近变更的配置)
}
}

🔒 解锁完整内容

本章剩余内容需要解锁后查看

以上仅为本章部分预览内容,完整内容包含更多深度源码解析、实战代码和面试要点。

加入知识星球你将获得:

  • ✅ 全部 17 章完整内容 + 持续更新
  • ✅ 配套源码 + 实战项目
  • ✅ 一对一答疑 + 面试辅导
  • ✅ 简历优化 + 内推机会

📚 本章完整目录

以下为本章完整目录结构,加入知识星球即可解锁全部内容。

12.2.3 全量 Dump 启动流程

12.3 EmbeddedDumpService vs ExternalDumpService

12.4 单配置 Dump 流程详解

12.5 ConfigCacheService — 内存缓存管理(深度分析)

12.6 读写锁设计 — SimpleReadWriteLock

12.7 磁盘缓存 — ConfigDiskServiceFactory