nacos 集群管理服務臨時實例數據


1. 按服務名選擇 nacos 節點,即一個服務的實例增刪改,只由特定的 nacos 節點負責

com.alibaba.nacos.naming.web.DistroFilter#doFilter
com.alibaba.nacos.naming.core.DistroMapper#responsible(java.lang.String)

2. 當前 nacos 節點對服務實例增刪改后,會重新把數據同步給其他節點

// com.alibaba.nacos.naming.consistency.ephemeral.distro.DistroConsistencyServiceImpl#put
public void put(String key, Record value) throws NacosException {
    onPut(key, value);
    // 把同步數據的任務放入隊列
    taskDispatcher.addTask(key);
}
// com.alibaba.nacos.naming.consistency.ephemeral.distro.DataSyncer#submit

用到了一些技巧,批量同步

3. 當前 nacos 節點定時計算自己所負責的服務實例的 md5 值,同步給其他 server,這是對 2 的一個后備

// com.alibaba.nacos.naming.consistency.ephemeral.distro.DataSyncer.TimedSync#run

這是一個全量數據 md5 值的同步

當目標節點收到全量數據 md5 值后,篩選出 toUpdateKeys 和 toRemoveKeys,然后從源節點同步數據

// DistroConsistencyServiceImpl#onReceiveChecksums
try {
    byte[] result = NamingProxy.getData(toUpdateKeys, server);
    processData(result);
} catch (Exception e) {
    Loggers.DISTRO.error("get data from " + server + " failed!", e);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM