隨着使用 Nacos 的企業愈來愈多,遇到的最頻繁的兩個問題就是:如何在個人生產環境正確的來使用 namespace 以及 endpoint。這篇文章主要就是針對這兩個問題來聊聊使用 nacos 過程當中關於這兩個參數配置的最佳實踐方式。架構
關於 namespace ,如下主要從 namespace 的設計背景 和 namespace 的最佳實踐 兩個方面來討論。框架
namespace 的設計是 nacos 基於此作多環境以及多租戶數據(配置和服務)隔離的。即:分佈式
注意: 該功能還在規劃中。函數
關於 namespace 的最佳實踐 ,這部分主要包含有兩個 Action:阿里雲
不管您是基於 Spring Cloud 或者 Dubbo 來使用 nacos,都會涉及到 namespace 的參數輸入,那麼這個時候 namespace 的值從哪裏能夠獲取呢?spa
說明: namesace 爲 public 是 nacos 的一個保留控件,若是您須要建立本身的 namespace,最好不要和 public 重名,以一個實際業務場景有具體語義的名字來命名,以避免帶來字面上不容易區分本身是哪個 namespace。設計
nacos client 對 namespace 的初始化流程以下圖所示:3d
nacos client 對 namespace 的初始化,主要包含兩部分,server
關於 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 Client 是開啓 endpoint 參數規則解析的能力。若是你想關閉該能力,可在 Nacos Client 初始化的時候在傳入的 properties 實例中指定 key 爲 isUseEndpointParsingRule,值爲 false 便可關閉。
本文做者:彭兵庭,花名得少,GitHub ID @pbting,阿里巴巴高級開發工程師,主要研究方向分佈式系統中間件,致力於打造一套通用的分佈式系統中間件開發框架,下降分佈式系統中間件的開發門檻。Spring Cloud Alibab 和 Nacos 開源項目 committer。目前在軟負載團隊參與產品架構升級的相關工做。
本文做者:中間件小哥
本文爲雲棲社區原創內容,未經容許不得轉載。