nacos源碼分析


D:\newWorkSpace\nacos-2.0.0-bugfix\naming\src\main\java\com\alibaba\nacos\naming\consistency\ephemeral\distro\DistroConsistencyServiceImpl.java


/**

*一種稱為Distro的一致性協議算法

*<p>使用distro算法將數據划分為多個塊。每個Nacos服務器節點負責

*一塊數據。每個數據塊都由其負責的服務器生成、刪除和同步。所以每

*Nacos服務器只處理總服務數據的一個子集的寫入。

*同時每個Nacos服務器都接收到其他Nacos服務器的數據同步,所以每個Nacos服務器最終都會有一套完整的數據。

*/

@Override
public void put(String key, Record value) throws NacosException {
onPut(key, value);
// If upgrade to 2.0.X, do not sync for v1.
if (ApplicationUtils.getBean(UpgradeJudgement.class).isUseGrpcFeatures()) {
return;
}
distroProtocol.sync(new DistroKey(key, KeyBuilder.INSTANCE_LIST_KEY_PREFIX), DataOperation.CHANGE,
globalConfig.getTaskDispatchPeriod() / 2);
}

 


D:\newWorkSpace\nacos-2.0.0-bugfix\core\src\main\java\com\alibaba\nacos\core\distributed\distro\DistroProtocol.java
/**
* Start to sync data to all remote server.
* 開始將數據同步到所有遠程服務器
* @param distroKey distro key of sync data
* @param action the action of data operation
* @param delay delay time for sync
*/
public void sync(DistroKey distroKey, DataOperation action, long delay) {
for (Member each : memberManager.allMembersWithoutSelf()) {
syncToTarget(distroKey, action, each.getAddress(), delay);
}
}

 

 

服務注冊

D:\newWorkSpace\nacos-2.0.0-bugfix\naming\src\main\java\com\alibaba\nacos\naming\core\v2\upgrade\doublewrite\execute\DoubleWriteInstanceChangeToV2Task.java
instanceOperator.registerInstance(namespace, serviceName, instance);
D:\newWorkSpace\nacos-2.0.0-bugfix\naming\src\main\java\com\alibaba\nacos\naming\core\InstanceOperatorClientImpl.java
/**
* This method creates {@code IpPortBasedClient} if it don't exist.
*/
@Override
public void registerInstance(String namespaceId, String serviceName, Instance instance) {
boolean ephemeral = instance.isEphemeral();//Ephemeral 短暫的,臨時的
String clientId = IpPortBasedClient.getClientId(instance.toInetAddr(), ephemeral);
createIpPortClientIfAbsent(clientId, ephemeral);
Service service = getService(namespaceId, serviceName, ephemeral);
clientOperationService.registerInstance(service, instance, clientId);
}
D:\newWorkSpace\nacos-2.0.0-bugfix\naming\src\main\java\com\alibaba\nacos\naming\core\v2\service\impl\EphemeralClientOperationServiceImpl.java
@Override
public void registerInstance(Service service, Instance instance, String clientId) {
Service singleton = ServiceManager.getInstance().getSingleton(service);
Client client = clientManager.getClient(clientId);
InstancePublishInfo instanceInfo = getPublishInfo(instance);
client.addServiceInstance(singleton, instanceInfo);
client.setLastUpdatedTime();
NotifyCenter.publishEvent(new ClientOperationEvent.ClientRegisterServiceEvent(singleton, clientId));
NotifyCenter
.publishEvent(new MetadataEvent.InstanceMetadataEvent(singleton, instanceInfo.getMetadataId(), false));
}

 


D:\newWorkSpace\nacos-2.0.0-bugfix\naming\src\main\java\com\alibaba\nacos\naming\core\ServiceManager.java


免責聲明!

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



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