這篇文章主要介紹“Dubbo-go的核心注冊(cè)引擎Nacos怎么使用”,在日常操作中,相信很多人在Dubbo-go的核心注冊(cè)引擎Nacos怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Dubbo-go的核心注冊(cè)引擎Nacos怎么使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
我們一直強(qiáng)調(diào)網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)對(duì)于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對(duì)待,選擇一個(gè)安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)網(wǎng)站制作公司不一定是大公司,創(chuàng)新互聯(lián)公司作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。
近幾年,隨著Go語(yǔ)言社區(qū)逐漸發(fā)展和壯大,越來越多的公司開始嘗試采用Go搭建微服務(wù)體系,也涌現(xiàn)了一批Go的微服務(wù)框架,如go-micro、go-kit、Dubbo-go等,跟微服務(wù)治理相關(guān)的組件也逐漸開始在Go生態(tài)發(fā)力,如Sentinel、Hystrix等都推出了Go語(yǔ)言版本,而作為微服務(wù)框架的核心引擎--注冊(cè)中心,也是必不可缺少的組件,市面已經(jīng)有多款注冊(cè)中心支持Go語(yǔ)言,應(yīng)該如何選擇呢?我們可以對(duì)目前主流的支持Go語(yǔ)言的注冊(cè)中心做個(gè)對(duì)比。
圖1
根據(jù)上表的對(duì)比我們可以從以下幾個(gè)維度得出結(jié)論:
生態(tài):各注冊(cè)中心對(duì)Go語(yǔ)言都有支持,但是Nacos、 Consul、Etcd 社區(qū)活躍,zookeeper和Eureka社區(qū)活躍度較低;
易用性:Nacos、Eureka、Consul都有現(xiàn)成的管控平臺(tái),Etcd、zookeeper本身作為kv存儲(chǔ),沒有相應(yīng)的管控平臺(tái),Nacos支持中文界面,比較符合國(guó)人使用習(xí)慣;
場(chǎng)景支持:CP模型主要針對(duì)強(qiáng)一致場(chǎng)景,如金融類,AP模型適用于高可用場(chǎng)景,Nacos可以同時(shí)滿足兩種場(chǎng)景,Eureka主要滿足高可用場(chǎng)景,Consul、Zookeepr、Etcd主要滿足強(qiáng)一致場(chǎng)景,此外Nacos支持從其它注冊(cè)中心同步數(shù)據(jù),方便用戶注冊(cè)中心遷移;
功能完整性:所有注冊(cè)中心都支持健康檢查,Nacos、Consul支持的檢查方式較多,滿足不同應(yīng)用場(chǎng)景,Zookeeper通過keep alive方式,能實(shí)時(shí)感知實(shí)例變化;Nacos、Consul和Eureka都支持負(fù)載均衡策略,Nacos通過Metadata selector支持更靈活的策略;此外,Nacos、Eureka都支持雪崩保護(hù),避免因?yàn)檫^多的實(shí)例不健康對(duì)健康的實(shí)例造成雪崩效應(yīng)。
綜合上面各維度的對(duì)比,可以了解到Nacos作為注冊(cè)中心有一定的優(yōu)勢(shì),那么它對(duì)Go微服務(wù)生態(tài)的集成做得如何?接下來我們首先探索下Nacos是如何與Dubbo-go集成。
Dubbo-go目前是Dubbo多語(yǔ)言生態(tài)中最火熱的一個(gè)項(xiàng)目,從2016年發(fā)布至今,已經(jīng)走過5個(gè)年頭。最近,Dubbo-go發(fā)布了v1.5版本,全面兼容Dubbo 2.7.x版本,支持了應(yīng)用維度的服務(wù)注冊(cè)與發(fā)現(xiàn),和主流的注冊(cè)模型保持一致,標(biāo)志著Dubbo-go向云原生邁出了關(guān)鍵的一步。作為驅(qū)動(dòng)服務(wù)運(yùn)轉(zhuǎn)的核心引擎--注冊(cè)中心,在切換到應(yīng)用維度的注冊(cè)模型后,也需要做相應(yīng)的適配,本文將解析如何以Nacos為核心引擎實(shí)現(xiàn)應(yīng)用維度的服務(wù)注冊(cè)與發(fā)現(xiàn),并且給出相應(yīng)的實(shí)踐案例。此外,本文代碼基于Dubbo-go v1.5.1,Nacos-SDK-go v1.0.0和Nacos v1.3.2。
從架構(gòu)中,我們可以看到,與接口級(jí)別的服務(wù)注冊(cè)發(fā)現(xiàn)不同的是,Dubbo-go的provider啟動(dòng)后會(huì)調(diào)用Nacos-go-sdk的RegisterInstance接口向Nacos注冊(cè)服務(wù)實(shí)例,注冊(cè)的服務(wù)名即為應(yīng)用名稱,而不是接口名稱。Conusmer啟動(dòng)后則會(huì)調(diào)用Subscribe接口訂閱該應(yīng)用的服務(wù)實(shí)例變化,并對(duì)的實(shí)例發(fā)起服務(wù)調(diào)用。
圖2
圖3是我們Dubbo-go的應(yīng)用維度服務(wù)發(fā)現(xiàn)模型,主要有服務(wù)和實(shí)例兩個(gè)層級(jí)關(guān)系,服務(wù)實(shí)例的屬性主要包含實(shí)例Id、主機(jī)地址、服務(wù)端口、激活狀態(tài)和元數(shù)據(jù)。圖4為Nacos的服務(wù)分級(jí)存儲(chǔ)模型,包含服務(wù)、集群和實(shí)例三個(gè)層次。兩者對(duì)比,多了一個(gè)集群維度的層級(jí),而且實(shí)例屬性信息能夠完全匹配。所以在Dubbo-go將應(yīng)用服務(wù)實(shí)例注冊(cè)到Nacos時(shí),我們只需要將集群設(shè)置為默認(rèn)集群,再填充服務(wù)和實(shí)例的相關(guān)屬性,即可完成服務(wù)模型上的匹配。此外Nacos可以將服務(wù)注冊(cè)到不同的Namespace下,實(shí)現(xiàn)多租戶的隔離。
圖3
圖4
Dubbo-go的Provider在向Nacos注冊(cè)應(yīng)用服務(wù)實(shí)例信息后,需要主動(dòng)上報(bào)心跳,讓Nacos服務(wù)端感知實(shí)例的存活與否,以判斷是否將該節(jié)點(diǎn)從實(shí)例列表中移除。維護(hù)心跳的工作是在Nacos-SDK-go完成的,從圖5代碼中可以看到,當(dāng)Dubbo-go調(diào)用RegisterInstance注冊(cè)一個(gè)服務(wù)實(shí)例時(shí),SDK除了調(diào)用Nacos的Register API之外,還會(huì)調(diào)用AddBeatInfo,將服務(wù)實(shí)例信息添加到本地緩存,通過后臺(tái)協(xié)程定期向Nacos發(fā)送服務(wù)實(shí)例信息,保持心跳。當(dāng)服務(wù)下線時(shí),可以通過調(diào)用DeRegisterInstance執(zhí)行反注冊(cè),并移除本地的心跳保持任務(wù),Nacos實(shí)例列表中也會(huì)將該實(shí)例移除。
圖5
Dubbo-go的Consumer在啟動(dòng)的時(shí)候會(huì)調(diào)用Nacos-SDK-go的Subscribe接口,該接口入?yún)⑷鐖D6,訂閱的時(shí)候只需要傳遞ServiceName即應(yīng)用名和回調(diào)函數(shù)SubscribeCallback,Nacos在服務(wù)實(shí)例發(fā)生變化的時(shí)候即可通過回調(diào)函數(shù)通知Dubbo-go。Nacos-SDK-go是如何感知Nacos的服務(wù)實(shí)例變化的呢?主要有兩種方式:
Nacos服務(wù)端主動(dòng)推送,Nacos-SDK-go在啟動(dòng)的時(shí)候會(huì)監(jiān)聽一個(gè)UDP端口,該端口在調(diào)用Nacos Register API的時(shí)候作為參數(shù)傳遞,Nacos會(huì)記錄Ip和端口,當(dāng)服務(wù)實(shí)例發(fā)生變化時(shí),Nacos會(huì)對(duì)所有監(jiān)聽該服務(wù)的Ip和端口發(fā)送UDP請(qǐng)求,推送變化后的服務(wù)實(shí)例信息。
Nacos-SDK-go定期查詢,SDK會(huì)對(duì)訂閱的服務(wù)實(shí)例定時(shí)調(diào)用查詢接口,如果查詢有變化則通過回調(diào)接口通知Dubbo-go。作為兜底策略保證Nacos服務(wù)端推送失敗后,仍能感知到變化。
圖6
此外Nacos-SDK-go還支持推空保護(hù),當(dāng)Nacos推送的實(shí)例列表為空時(shí),不更新本地緩存,也不通知Dubbo-go變更,避免Consumer無(wú)可用實(shí)例調(diào)用,造成故障。同時(shí),SDK還支持服務(wù)實(shí)例信息本地持久化存儲(chǔ),可以保證在Nacos服務(wù)故障過程中,Consumer重啟也能獲取到可用實(shí)例,具備容災(zāi)效果。
dubbo-go samples代碼下載:https://github.com/apache/dubbo-samples/tree/master/golang,基于Nacos注冊(cè)中心的應(yīng)用級(jí)服務(wù)發(fā)現(xiàn)的hello world代碼目錄在 registry/servicediscovery/nacos。
圖7
進(jìn)入registry/servicediscovery/nacos/go-server/profiles文件,可以看到有dev、release和test三個(gè)文件夾,分別對(duì)應(yīng)開發(fā)、測(cè)試和生產(chǎn)配置。我們使用dev配置來搭建開發(fā)環(huán)境,dev文件下有l(wèi)og.yml和server.yml文件,下面對(duì)server.yml配置進(jìn)行修改。
remote配置,這里使用公共的Nacos服務(wù),address支持配置多個(gè)地址,用逗號(hào)分割。params參數(shù)配置nacos-sdk的日志目錄。
remote: nacos: address: "console.nacos.io:80" timeout: "5s" params: logDir: "/data/nacos-sdk/log" configCenter配置 config_center: protocol: "nacos" address: "console.nacos.io:80"
配置server端環(huán)境變量
export CONF_PROVIDER_FILE_PATH=server端的server.yml文件路徑 export APP_LOG_CONF_FILE=server端的log.yml文件路徑
進(jìn)入registry/servicediscovery/nacos/go-server/app,運(yùn)行server.go的main方法,可以從Nacos的控制臺(tái)(http://console.nacos.io/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=)
看到,應(yīng)用user-info-server已經(jīng)注冊(cè)成功。
client的配置文件在registry/servicediscovery/nacos/go-server/profiles目錄下,需要修改的地方跟server端一樣,這里不贅述。
配置client端環(huán)境變量
export CONF_CONSUMER_FILE_PATH=client端的server.yml文件路徑 export APP_LOG_CONF_FILE=client端的log.yml文件路徑
進(jìn)入registry/servicediscovery/nacos/go-client/app,運(yùn)行client.go的main方法,看到如下日志輸出,表示調(diào)用server端成功。
到此,關(guān)于“Dubbo-go的核心注冊(cè)引擎Nacos怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!