nacos 源码解析系列(五)
2020-07-20 本文已影响0人
逗逼程序员
为什么把配置文件Dump到磁盘中
今天我们来探讨一个问题,Nacos 为什么要将配置文件全部dump到磁盘中,这样有什么好处呢?哪些地方读取了磁盘中的文件?
直接上结论思想:
Dump配置文件到磁盘中可以提高性能,客户端想要请求配置数据的时候,发起Http请求给服务端;服务端会去磁盘读取对应的文件返回,读取磁盘文件比直接读取数据库效率要高;然后服务端会跟最新的数据保持一致,如果修改了配置,不仅jvm内存数据会更新,也会把最新的content内容及时保存奥磁盘中;
1、快速启动,将数据库中的数据与磁盘对比MD5判断是否修改
try {
final String md5 = MD5Utils.md5Hex(content, Constants.ENCODE);
if (!PropertyUtil.isDirectRead()) {
String loacalMd5 = DiskUtil.getLocalConfigMd5(dataId, group, tenant);
if (md5.equals(loacalMd5)) {
dumpLog.warn("[dump-ignore] ignore to save cache file. groupKey={}, md5={}, lastModifiedOld={}, "
+ "lastModifiedNew={}", groupKey, md5, ConfigCacheService.getLastModifiedTs(groupKey),
lastModifiedTs);
} else {
DiskUtil.saveToDisk(dataId, group, tenant, content);
}
}
updateMd5(groupKey, md5, lastModifiedTs);
return true;
} catch (IOException ioe) {
dumpLog.error("[dump-exception] save disk error. " + groupKey + ", " + ioe.toString(), ioe);
return false;
} finally {
releaseWriteLock(groupKey);
}