Nacos數據模型


Nacos 數據模型 Key 由三元組唯一確定, Namespace默認是空串,公共命名空間(public),分組默認是 DEFAULT_GROUP。

 

 

 

以上都是nacos官網上面的圖片及描述,綜合一下應該是這個樣子

 

 

 

 

可以在nacos控制台看到與之對應的界面

 

 

 

 

我們來看下這些東西都是用來干嘛的,

NameSpace可以用來進行資源的隔離,比如我們dev環境的服務和test環境的服務都往同一個nacos服務上面注冊,dev環境是調用不到test環境的服務的。

我們在nacos控制台新建兩個namespacetestdev會生成兩個ID

 

 設置我們訂單服務和庫存服務的namespace,一個為dev一個為test

 

 

 

 

 

 

 

 

 再來查看nacos控制台的服務列表會看見兩個服務並不在public的命名空間下了,而是去到了testdev下面,調用我們創建訂單的接口,會發現在訂單服務里面無法去扣減庫存了。因為這兩個服務現在已經不在同一個namespace下面了,無法進行調用了。

 

 

Group顧名思義就是分組了,比如訂單和支付服務是支付組,庫存物流屬於物流組,不同的分組之前的服務也是不能進行調用的。將上面的服務設置成同樣的namespace之后,發現服務可以調用了。但是我們有設置成不同的分組,發現服務又不能調用了。

 

 

 

 

 

 

 

兩個擴展點:spring.cloud.nacos.discovery.cluster-name參數

 

cluster-name,可以設置上之后通過自己的負載均衡算法可以實現優先同集群調用,減少網絡開銷,比如在成都這邊都有部署訂單服務和庫存服務,那么訂單調庫存的時候優先調用成都機房的庫存服務(spring.cloud.nacos.discovery.cluster-name=CD)。

 

spring.cloud.nacos.discovery.metadata參數

 

元數據參數可以配置一些額外的信息,比如設置一個版本進去,通過自己的負載均衡算法實現同版本之間的服務調用。比如線上有10個訂單服務和10個庫存服務都是V1版本,現在改部分改動,都上了2V2版本,通過實現我們自己的負載算法,使得V2版本的訂單只能調用V2庫存服務。

 

 

以上的數據模型詳見Nacos源碼:com.alibaba.nacos.naming.core.ServiceManager

 

 

 

 

 

 

這個雙層Mapkey分別是namespacegroup::serviceName

 

com.alibaba.nacos.naming.core.Service中可以看到有一個Map<String, Cluster>

 

 

 

 

com.alibaba.nacos.naming.core.Cluster中才是具體的服務實例com.alibaba.nacos.naming.core.InstanceSet集合,一個是持久化實例,一個非持久化實例。

 

完整代碼:https://github.com/bluedarkni/study/tree/master/cloud-alibaba

 


免責聲明!

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



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