隨着使用 Nacos 的企業愈來愈多,遇到的最頻繁的兩個問題就是:如何在個人生產環境正確的來使用 namespace 以及 endpoint。這篇文章主要就是針對這兩個問題來聊聊使用 nacos 過程當中關於這兩個參數配置的最佳實踐方式。架構
關於 namespace ,如下主要從 namespace 的設計背景 和 namespace 的最佳實踐 兩個方面來討論。框架
namespace 的設計是 nacos 基於此作多環境以及多租戶數據(配置和服務)隔離的。即:分佈式
注意: 該功能還在規劃中。函數
關於 namespace 的最佳實踐 ,這部分主要包含有兩個 Action:阿里雲
不管您是基於 Spring Cloud 或者 Dubbo 來使用 nacos,都會涉及到 namespace 的參數輸入,那麼這個時候 namespace 的值從哪裏能夠獲取呢?spa
能夠在 nacos 的控制檯左邊功能側看到有一個 命名空間 的功能,點擊就能夠看到 新建命名空間 的按鈕,那麼這個時候就能夠建立本身的命名空間了。建立成功以後,會生成一個命名空間ID,主要是用來避免命名空間名稱有可能會出現重名的狀況。所以當您在應用中須要配置指定的 namespace 時,填入的是命名空間ID。重要的事情說三遍,設計
說明: namesace 爲 public 是 nacos 的一個保留控件,若是您須要建立本身的 namespace,最好不要和 public 重名,以一個實際業務場景有具體語義的名字來命名,以避免帶來字面上不容易區分本身是哪個 namespace。3d
nacos client 對 namespace 的初始化流程以下圖所示:server
nacos client 對 namespace 的初始化,主要包含兩部分,中間件
可經過 -Duse.cloud.namespace.parsing=true/false 來控制是否須要在雲環境自動解析 namespace 參數,默認爲 true,是會自動解析,其目的就是方便用戶上雲時能夠以零成本的方式平滑上雲。若是用戶在雲上須要用自建的 nacos 下的 namespace,那這個時候只需將 -Duse.cloud.namespace.parsing=false 便可。
關於 endpoint ,也主要從 endpoint 的設計背景 和 endpoint 的參數初始化 兩個方面來討論。
當 nacos server 集羣須要擴縮容時,客戶端須要有一種能力可以及時感知到集羣發生變化。及時感知到集羣的變化是經過 endpoint 來實現的。也即客戶端會定時的向 endpoint 發送請求來更新客戶端內存中的集羣列表。
Nacos Client 提供一種能夠對傳入的 endpoint 參數規則解析的能力。即當經過構造函數的 properties 來初始化 endpoint 時,指定的 endpoint 值能夠是一個具體的值,也能夠是一個佔位符的形式,以下所示:
${endpoint.options:defaultValue}。
說明:
整個 endpoint 的解析規則比較複雜,總體的一個解析流程圖以下所示:
注意: 藍色特別區分的是支持雲環境下(阿里雲上的 EDAS)自動從系統環境變量中來讀取 endpoint 值,以此來達到用戶本地開發或者將應用往雲上遷移的時候以零成本的改造方式實現平滑上雲。
說明:
1. 開啓 endpoint 參數規則解析
1.1. 若是在初始化 Nacos Client 的時候,沒有經過 properties 來指定 endpoint,這個時候會從系統環境變量中變量名爲 ALIBABA_ALIWARE_ENDPOINT_URL 指定的值來初始化,若是系統環境變量也沒有設置,那麼這個時候將會返回一個空字符串。
1.2. 若是設置了 endpoint,
1.2.1 設置的 endpoint 是一個指定具體的值。
這時會先從系統環境變量中變量名爲 ALIBABA_ALIWARE_ENDPOINT_URL 指定的值來初始化,若是系統環境變量沒有設置,那麼這個時候用用戶態傳入的具體值來初始化 endpoint。
1.2.2 以佔位符的形式輸入。
這時會解析出具體佔位符的值,而後:
例如,您輸入的是 ${nacos.endpoint:defaultValue},那麼解析出來的 佔位符是 nacos.endpoint。解析出來後,會先讀取系統屬性中(即 System.getProperty("nacos.endpoint"))是否設置了 nacos.endpoint 變量值,若是沒有,則會從系統環境變量中變量名爲 nacos.endpoint指定的值來初始化。
當關閉了 endpoint 參數規則解析的時候,這個時候就以用戶態在構造 Nacos Client 時經過 properties 參數輸入的 endpoint 值爲主。
默認狀況下, Nacos Client 是開啓 endpoint 參數規則解析的能力。若是你想關閉該能力,可在 Nacos Client 初始化的時候在傳入的 properties 實例中指定 key 爲 isUseEndpointParsingRule,值爲 false 便可關閉。
本文做者:彭兵庭,花名得少,GitHub ID @pbting,阿里巴巴高級開發工程師,主要研究方向分佈式系統中間件,致力於打造一套通用的分佈式系統中間件開發框架,下降分佈式系統中間件的開發門檻。Spring Cloud Alibab 和 Nacos 開源項目 committer。目前在軟負載團隊參與產品架構升級的相關工做。
本文爲雲棲社區原創內容,未經容許不得轉載。