spring cloud alibaba之Nacos架構(gòu)安裝及配置

Nacos 架構(gòu)

基本架構(gòu)及概念

nacos_arch.jpg

服務(wù) (Service)

服務(wù)是指一個(gè)或一組軟件功能(例如特定信息的檢索或一組操作的執(zhí)行),其目的是不同的客戶端可以為不同的目的重用(例如通過跨進(jìn)程的網(wǎng)絡(luò)調(diào)用)。Nacos 支持主流的服務(wù)生態(tài),如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service.

服務(wù)注冊中心 (Service Registry)

服務(wù)注冊中心,它是服務(wù),其實(shí)例及元數(shù)據(jù)的數(shù)據(jù)庫。服務(wù)實(shí)例在啟動時(shí)注冊到服務(wù)注冊表,并在關(guān)閉時(shí)注銷。服務(wù)和路由器的客戶端查詢服務(wù)注冊表以查找服務(wù)的可用實(shí)例。服務(wù)注冊中心可能會調(diào)用服務(wù)實(shí)例的健康檢查 API 來驗(yàn)證它是否能夠處理請求。

服務(wù)元數(shù)據(jù) (Service Metadata)

服務(wù)元數(shù)據(jù)是指包括服務(wù)端點(diǎn)(endpoints)、服務(wù)標(biāo)簽、服務(wù)版本號、服務(wù)實(shí)例權(quán)重、路由規(guī)則、安全策略等描述服務(wù)的數(shù)據(jù)

服務(wù)提供方 (Service Provider)

是指提供可復(fù)用和可調(diào)用服務(wù)的應(yīng)用方

服務(wù)消費(fèi)方 (Service Consumer)

是指會發(fā)起對某個(gè)服務(wù)調(diào)用的應(yīng)用方

配置 (Configuration)

在系統(tǒng)開發(fā)過程中通常會將一些需要變更的參數(shù)、變量等從代碼中分離出來獨(dú)立管理,以獨(dú)立的配置文件的形式存在。目的是讓靜態(tài)的系統(tǒng)工件或者交付物(如 WAR,JAR 包等)更好地和實(shí)際的物理運(yùn)行環(huán)境進(jìn)行適配。配置管理一般包含在系統(tǒng)部署的過程中,由系統(tǒng)管理員或者運(yùn)維人員完成這個(gè)步驟。配置變更是調(diào)整系統(tǒng)運(yùn)行時(shí)的行為的有效手段之一。

配置管理 (Configuration Management)

在數(shù)據(jù)中心中,系統(tǒng)中所有配置的編輯、存儲、分發(fā)、變更管理、歷史版本管理、變更審計(jì)等所有與配置相關(guān)的活動統(tǒng)稱為配置管理。

名字服務(wù) (Naming Service)

提供分布式系統(tǒng)中所有對象(Object)、實(shí)體(Entity)的“名字”到關(guān)聯(lián)的元數(shù)據(jù)之間的映射管理服務(wù),例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服務(wù)發(fā)現(xiàn)和 DNS 就是名字服務(wù)的2大場景。

配置服務(wù) (Configuration Service)

在服務(wù)或者應(yīng)用運(yùn)行過程中,提供動態(tài)配置或者元數(shù)據(jù)以及配置管理的服務(wù)提供者。

更多概念...

邏輯架構(gòu)及其組件介紹

nacos-logic.jpg
  • 服務(wù)管理:實(shí)現(xiàn)服務(wù)CRUD,域名CRUD,服務(wù)健康狀態(tài)檢查,服務(wù)權(quán)重管理等功能
  • 配置管理:實(shí)現(xiàn)配置管CRUD,版本管理,灰度管理,監(jiān)聽管理,推送軌跡,聚合數(shù)據(jù)等功能
  • 元數(shù)據(jù)管理:提供元數(shù)據(jù)CURD 和打標(biāo)能力
  • 插件機(jī)制:實(shí)現(xiàn)三個(gè)模塊可分可合能力,實(shí)現(xiàn)擴(kuò)展點(diǎn)SPI機(jī)制
  • 事件機(jī)制:實(shí)現(xiàn)異步化事件通知,sdk數(shù)據(jù)變化異步通知等邏輯
  • 日志模塊:管理日志分類,日志級別,日志可移植性(尤其避免沖突),日志格式,異常碼+幫助文檔
  • 回調(diào)機(jī)制:sdk通知數(shù)據(jù),通過統(tǒng)一的模式回調(diào)用戶處理。接口和數(shù)據(jù)結(jié)構(gòu)需要具備可擴(kuò)展性
  • 尋址模式:解決ip,域名,nameserver、廣播等多種尋址模式,需要可擴(kuò)展
  • 推送通道:解決server與存儲、server間、server與sdk間推送性能問題
  • 容量管理:管理每個(gè)租戶,分組下的容量,防止存儲被寫爆,影響服務(wù)可用性
  • 流量管理:按照租戶,分組等多個(gè)維度對請求頻率,長鏈接個(gè)數(shù),報(bào)文大小,請求流控進(jìn)行控制
  • 緩存機(jī)制:容災(zāi)目錄,本地緩存,server緩存機(jī)制。容災(zāi)目錄使用需要工具
  • 啟動模式:按照單機(jī)模式,配置模式,服務(wù)模式,dns模式,或者all模式,啟動不同的程序+UI
  • 一致性協(xié)議:解決不同數(shù)據(jù),不同一致性要求情況下,不同一致性機(jī)制
  • 存儲模塊:解決數(shù)據(jù)持久化、非持久化存儲,解決數(shù)據(jù)分片問題
  • Nameserver:解決namespace到clusterid的路由問題,解決用戶環(huán)境與nacos物理環(huán)境映射問題
  • CMDB:解決元數(shù)據(jù)存儲,與三方cmdb系統(tǒng)對接問題,解決應(yīng)用,人,資源關(guān)系
  • Metrics:暴露標(biāo)準(zhǔn)metrics數(shù)據(jù),方便與三方監(jiān)控系統(tǒng)打通
  • Trace:暴露標(biāo)準(zhǔn)trace,方便與SLA系統(tǒng)打通,日志白平化,推送軌跡等能力,并且可以和計(jì)量計(jì)費(fèi)系統(tǒng)打通
  • 接入管理:相當(dāng)于阿里云開通服務(wù),分配身份、容量、權(quán)限過程
  • 用戶管理:解決用戶管理,登錄,sso等問題
  • 權(quán)限管理:解決身份識別,訪問控制,角色管理等問題
  • 審計(jì)系統(tǒng):擴(kuò)展接口方便與不同公司審計(jì)系統(tǒng)打通
  • 通知系統(tǒng):核心數(shù)據(jù)變更,或者操作,方便通過SMS系統(tǒng)打通,通知到對應(yīng)人數(shù)據(jù)變更
  • OpenAPI:暴露標(biāo)準(zhǔn)Rest風(fēng)格HTTP接口,簡單易用,方便多語言集成
  • Console:易用控制臺,做服務(wù)管理、配置管理等操作
  • SDK:多語言sdk
  • Agent:dns-f類似模式,或者與mesh等方案集成
  • CLI:命令行對產(chǎn)品進(jìn)行輕量化管理,像git一樣好用

領(lǐng)域模型

數(shù)據(jù)模型

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

nacos_data_model

服務(wù)領(lǐng)域模型

nacos_naming_data_model

配置領(lǐng)域模型

圍繞配置,主要有兩個(gè)關(guān)聯(lián)的實(shí)體,一個(gè)是配置變更歷史,一個(gè)是服務(wù)標(biāo)簽(用于打標(biāo)分類,方便索引),由 ID 關(guān)聯(lián)。

nacos_config_er

類視圖

Nacos-SDK 類視圖

服務(wù)部分待續(xù)

nacos_sdk_class_relation

構(gòu)建物、部署及啟動模式

undefined

兩種交付工件

Nacos 支持標(biāo)準(zhǔn) Docker 鏡像(TODO: 0.2版本開始支持)及 zip(tar.gz)壓縮包的構(gòu)建物。

兩種啟動模式

Nacos 支持將注冊中心(Service Registry)與配置中心(Config Center) 在一個(gè)進(jìn)程合并部署或者將2者分離部署的兩種模式。

免費(fèi)的公有云服務(wù)模式

除了您自己部署和啟動 Nacos 服務(wù)之外,在云計(jì)算時(shí)代,Nacos 也支持公有云模式,在阿里云公有云的商業(yè)產(chǎn)品(如ACM, EDAS) 中會提供 Nacos 的免費(fèi)的公有云服務(wù)。我們也歡迎和支持其他的公有云提供商提供 Nacos 的公有云服務(wù)。



Nacos 快速開始

這個(gè)快速開始手冊是幫忙您快速在您的電腦上,下載、安裝并使用 Nacos。

0.版本選擇

您可以在Nacos的release notes博客中找到每個(gè)版本支持的功能的介紹,當(dāng)前推薦的穩(wěn)定版本為1.3.1。

1.預(yù)備環(huán)境準(zhǔn)備

Nacos 依賴 Java 環(huán)境來運(yùn)行。如果您是從代碼開始構(gòu)建并運(yùn)行Nacos,還需要為此配置 Maven環(huán)境,請確保是在以下版本環(huán)境中安裝使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;下載 & 配置。
  3. Maven 3.2.x+;下載 & 配置

2.下載源碼或者安裝包

你可以通過源碼和發(fā)行包兩種方式來獲取 Nacos。

從 Github 上下載源碼方式

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
ls -al distribution/target/

// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

下載編譯后壓縮包方式

您可以從 最新穩(wěn)定版本 下載 nacos-server-$version.zip 包。

  unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
  cd nacos/bin

3.啟動服務(wù)器

Linux/Unix/Mac

啟動命令(standalone代表著單機(jī)模式運(yùn)行,非集群模式):

sh startup.sh -m standalone

如果您使用的是ubuntu系統(tǒng),或者運(yùn)行腳本報(bào)錯提示[[符號找不到,可嘗試如下運(yùn)行:

bash startup.sh -m standalone

Windows

啟動命令:

cmd startup.cmd

或者雙擊startup.cmd運(yùn)行文件。

4.服務(wù)注冊&發(fā)現(xiàn)和配置管理

服務(wù)注冊

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

服務(wù)發(fā)現(xiàn)

curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

發(fā)布配置

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

獲取配置

curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

5.關(guān)閉服務(wù)器

Linux/Unix/Mac

sh shutdown.sh

Windows

cmd shutdown.cmd

或者雙擊shutdown.cmd運(yùn)行文件。



Nacos 系統(tǒng)參數(shù)介紹

Nacos Server

對于Server端來說,一般是設(shè)置在{nacos.home}/conf/application.properties里,如果參數(shù)名后標(biāo)注了(-D)的,則表示是 JVM 的參數(shù),需要在{nacos.home}/bin/startup.sh里進(jìn)行相應(yīng)的設(shè)置。例如像設(shè)置 nacos.home 的值,可以在{nacos.home}/bin/startup.sh進(jìn)行如下設(shè)置:

JAVA_OPT="${JAVA_OPT} -Dnacos.home=${BASE_DIR}"

全局參數(shù)

參數(shù)名 含義 可選值 默認(rèn)值 支持版本
nacos.home(-D) Nacos的根目錄 目錄路徑 Nacos安裝的目錄 >= 0.1.0
nacos.standalone(-D) 是否在單機(jī)模式 true/false false >= 0.1.0
nacos.functionMode(-D) 啟動模式,支持只啟動某一個(gè)模塊,不設(shè)置時(shí)所有模塊都會啟動 config/naming/空 >= 0.9.0
nacos.inetutils.prefer-hostname-over-ip cluster.conf里是否應(yīng)該填hostname true/false false >= 0.3.0
nacos.inetutils.ip-address 本機(jī)IP,該參數(shù)設(shè)置后,將會使用這個(gè)IP去cluster.conf里進(jìn)行匹配,請確保這個(gè)IP的值在cluster.conf里是存在的 本機(jī)IP null >= 0.3.0
nacos.security.ignore.urls 控制臺鑒權(quán)跳過的接口 需要跳過控制臺鑒權(quán)的接口列表 >= 0.9.0

Naming模塊

參數(shù)名 含義 可選值 默認(rèn)值 支持版本
nacos.naming.data.warmup 是否在Server啟動時(shí)進(jìn)行數(shù)據(jù)預(yù)熱 true/false false >= 1.0.2
nacos.naming.expireInstance 是否自動摘除臨時(shí)實(shí)例 true/false true >= 1.0.2
nacos.naming.distro.taskDispatchPeriod 同步任務(wù)生成的周期,單位為毫秒 正整數(shù) 200 >= 1.0.2
nacos.naming.distro.batchSyncKeyCount 同步任務(wù)每批的key的數(shù)目 正整數(shù) 1000 >= 1.0.2
nacos.naming.distro.syncRetryDelay 同步任務(wù)失敗的重試間隔,單位為毫秒 正整數(shù) 5000 >= 1.0.2

除了上面列到的在application.properties里配置的屬性,還有一些可以在運(yùn)行時(shí)調(diào)用接口來進(jìn)行調(diào)節(jié),這些參數(shù)都在Open API里的查看系統(tǒng)當(dāng)前數(shù)據(jù)指標(biāo)這個(gè)API里有聲明。

Config模塊

參數(shù)名 含義 可選值 默認(rèn)值 支持版本
db.num 數(shù)據(jù)庫數(shù)目 正整數(shù) 0 >= 0.1.0
db.url.0 第一個(gè)數(shù)據(jù)庫的URL 字符串 >= 0.1.0
db.url.1 第二個(gè)數(shù)據(jù)庫的URL 字符串 >= 0.1.0
db.user 數(shù)據(jù)庫連接的用戶名 字符串 >= 0.1.0
db.password 數(shù)據(jù)庫連接的密碼 字符串 >= 0.1.0

CMDB模塊

參數(shù)名 含義 可選值 默認(rèn)值 支持版本
nacos.cmdb.loadDataAtStart 是否打開CMDB true/false false >= 0.7.0
nacos.cmdb.dumpTaskInterval 全量dump的間隔,單位為秒 正整數(shù) 3600 >= 0.7.0
nacos.cmdb.eventTaskInterval 變更事件的拉取間隔,單位為秒 正整數(shù) 10 >= 0.7.0
nacos.cmdb.labelTaskInterval 標(biāo)簽集合的拉取間隔,單位為秒 正整數(shù) 300 >= 0.7.0

Nacos Java Client

客戶端的參數(shù)分為兩種,一種是通過-D參數(shù)進(jìn)行指定的配置,一種是構(gòu)造客戶端時(shí),通過Properties對象指定的配置,以下沒有帶-D標(biāo)注的都是通過Properties注入的配置。

通用參數(shù)

參數(shù)名 含義 可選值 默認(rèn)值 支持版本
endpoint 連接Nacos Server指定的連接點(diǎn),可以參考文檔 域名 >= 0.1.0
endpointPort 連接Nacos Server指定的連接點(diǎn)端口,可以參考文檔 合法端口號 >= 0.1.0
namespace 命名空間的ID 命名空間的ID config模塊為空,naming模塊為public >= 0.8.0
serverAddr Nacos Server的地址列表,這個(gè)值的優(yōu)先級比endpoint高 ip:port,ip:port,... >= 0.1.0
nacos.logging.path(-D) 客戶端日志的目錄 目錄路徑 用戶根目錄 >= 0.1.0

Naming客戶端

參數(shù)名 含義 可選值 默認(rèn)值 支持版本
namingLoadCacheAtStart 啟動時(shí)是否優(yōu)先讀取本地緩存 true/false false >= 1.0.0
namingClientBeatThreadCount 客戶端心跳的線程池大小 正整數(shù) 機(jī)器的CPU數(shù)的一半 >= 1.0.0
namingPollingThreadCount 客戶端定時(shí)輪詢數(shù)據(jù)更新的線程池大小 正整數(shù) 機(jī)器的CPU數(shù)的一半 >= 1.0.0
com.alibaba.nacos.naming.cache.dir(-D) 客戶端緩存目錄 目錄路徑 {user.home}/nacos/naming >= 1.0.0
com.alibaba.nacos.naming.log.level(-D) Naming客戶端的日志級別 info,error,warn等 info >= 1.0.0
com.alibaba.nacos.client.naming.tls.enable(-D) 是否打開HTTPS true/false false >= 1.0.0

Config客戶端

參數(shù)名 含義 可選值 默認(rèn)值 支持版本
configLongPollTimeout(config.long-poll.timeout 1.0.1版本) 長輪詢的超時(shí)時(shí)間,單位為毫秒 正整數(shù) 30000 >= 1.0.2
configRetryTime(config.retry.time 1.0.1版本) 長輪詢?nèi)蝿?wù)重試時(shí)間,單位為毫秒 正整數(shù) 2000 >= 1.0.2
maxRetry 長輪詢的重試次數(shù) 正整數(shù) 3 >= 1.0.2
enableRemoteSyncConfig 監(jiān)聽器首次添加時(shí)拉取遠(yuǎn)端配置 布爾值 false >= 1.0.2
com.alibaba.nacos.config.log.level(-D) Config客戶端的日志級別 info,error,warn等 info >= 1.0.0
JM.SNAPSHOT.PATH(-D) 客戶端緩存目錄 目錄路徑 {user.home}/nacos/config >= 1.0.0
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容