Dubbo-go的核心注冊引擎Nacos怎么使用

這篇文章主要介紹“Dubbo-go的核心注冊引擎Nacos怎么使用”,在日常操作中,相信很多人在Dubbo-go的核心注冊引擎Nacos怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Dubbo-go的核心注冊引擎Nacos怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

我們一直強(qiáng)調(diào)網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)對于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對待,選擇一個安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)網(wǎng)站制作公司不一定是大公司,創(chuàng)新互聯(lián)公司作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。

近幾年,隨著Go語言社區(qū)逐漸發(fā)展和壯大,越來越多的公司開始嘗試采用Go搭建微服務(wù)體系,也涌現(xiàn)了一批Go的微服務(wù)框架,如go-micro、go-kit、Dubbo-go等,跟微服務(wù)治理相關(guān)的組件也逐漸開始在Go生態(tài)發(fā)力,如Sentinel、Hystrix等都推出了Go語言版本,而作為微服務(wù)框架的核心引擎--注冊中心,也是必不可缺少的組件,市面已經(jīng)有多款注冊中心支持Go語言,應(yīng)該如何選擇呢?我們可以對目前主流的支持Go語言的注冊中心做個對比。

Dubbo-go的核心注冊引擎Nacos怎么使用

                   圖1

根據(jù)上表的對比我們可以從以下幾個維度得出結(jié)論:

  • 生態(tài):各注冊中心對Go語言都有支持,但是Nacos、 Consul、Etcd 社區(qū)活躍,zookeeper和Eureka社區(qū)活躍度較低;

  • 易用性:Nacos、Eureka、Consul都有現(xiàn)成的管控平臺,Etcd、zookeeper本身作為kv存儲,沒有相應(yīng)的管控平臺,Nacos支持中文界面,比較符合國人使用習(xí)慣;

  • 場景支持:CP模型主要針對強(qiáng)一致場景,如金融類,AP模型適用于高可用場景,Nacos可以同時滿足兩種場景,Eureka主要滿足高可用場景,Consul、Zookeepr、Etcd主要滿足強(qiáng)一致場景,此外Nacos支持從其它注冊中心同步數(shù)據(jù),方便用戶注冊中心遷移;

  • 功能完整性:所有注冊中心都支持健康檢查,Nacos、Consul支持的檢查方式較多,滿足不同應(yīng)用場景,Zookeeper通過keep alive方式,能實(shí)時感知實(shí)例變化;Nacos、Consul和Eureka都支持負(fù)載均衡策略,Nacos通過Metadata selector支持更靈活的策略;此外,Nacos、Eureka都支持雪崩保護(hù),避免因?yàn)檫^多的實(shí)例不健康對健康的實(shí)例造成雪崩效應(yīng)。

綜合上面各維度的對比,可以了解到Nacos作為注冊中心有一定的優(yōu)勢,那么它對Go微服務(wù)生態(tài)的集成做得如何?接下來我們首先探索下Nacos是如何與Dubbo-go集成。

引言

Dubbo-go目前是Dubbo多語言生態(tài)中最火熱的一個項(xiàng)目,從2016年發(fā)布至今,已經(jīng)走過5個年頭。最近,Dubbo-go發(fā)布了v1.5版本,全面兼容Dubbo 2.7.x版本,支持了應(yīng)用維度的服務(wù)注冊與發(fā)現(xiàn),和主流的注冊模型保持一致,標(biāo)志著Dubbo-go向云原生邁出了關(guān)鍵的一步。作為驅(qū)動服務(wù)運(yùn)轉(zhuǎn)的核心引擎--注冊中心,在切換到應(yīng)用維度的注冊模型后,也需要做相應(yīng)的適配,本文將解析如何以Nacos為核心引擎實(shí)現(xiàn)應(yīng)用維度的服務(wù)注冊與發(fā)現(xiàn),并且給出相應(yīng)的實(shí)踐案例。此外,本文代碼基于Dubbo-go v1.5.1,Nacos-SDK-go v1.0.0和Nacos v1.3.2。

服務(wù)注冊與發(fā)現(xiàn)架構(gòu)

從架構(gòu)中,我們可以看到,與接口級別的服務(wù)注冊發(fā)現(xiàn)不同的是,Dubbo-go的provider啟動后會調(diào)用Nacos-go-sdk的RegisterInstance接口向Nacos注冊服務(wù)實(shí)例,注冊的服務(wù)名即為應(yīng)用名稱,而不是接口名稱。Conusmer啟動后則會調(diào)用Subscribe接口訂閱該應(yīng)用的服務(wù)實(shí)例變化,并對的實(shí)例發(fā)起服務(wù)調(diào)用。

Dubbo-go的核心注冊引擎Nacos怎么使用

                        圖2

服務(wù)模型

圖3是我們Dubbo-go的應(yīng)用維度服務(wù)發(fā)現(xiàn)模型,主要有服務(wù)和實(shí)例兩個層級關(guān)系,服務(wù)實(shí)例的屬性主要包含實(shí)例Id、主機(jī)地址、服務(wù)端口、激活狀態(tài)和元數(shù)據(jù)。圖4為Nacos的服務(wù)分級存儲模型,包含服務(wù)、集群和實(shí)例三個層次。兩者對比,多了一個集群維度的層級,而且實(shí)例屬性信息能夠完全匹配。所以在Dubbo-go將應(yīng)用服務(wù)實(shí)例注冊到Nacos時,我們只需要將集群設(shè)置為默認(rèn)集群,再填充服務(wù)和實(shí)例的相關(guān)屬性,即可完成服務(wù)模型上的匹配。此外Nacos可以將服務(wù)注冊到不同的Namespace下,實(shí)現(xiàn)多租戶的隔離。 Dubbo-go的核心注冊引擎Nacos怎么使用

                           圖3

Dubbo-go的核心注冊引擎Nacos怎么使用

                           圖4

服務(wù)實(shí)例心跳維持

Dubbo-go的Provider在向Nacos注冊應(yīng)用服務(wù)實(shí)例信息后,需要主動上報(bào)心跳,讓Nacos服務(wù)端感知實(shí)例的存活與否,以判斷是否將該節(jié)點(diǎn)從實(shí)例列表中移除。維護(hù)心跳的工作是在Nacos-SDK-go完成的,從圖5代碼中可以看到,當(dāng)Dubbo-go調(diào)用RegisterInstance注冊一個服務(wù)實(shí)例時,SDK除了調(diào)用Nacos的Register API之外,還會調(diào)用AddBeatInfo,將服務(wù)實(shí)例信息添加到本地緩存,通過后臺協(xié)程定期向Nacos發(fā)送服務(wù)實(shí)例信息,保持心跳。當(dāng)服務(wù)下線時,可以通過調(diào)用DeRegisterInstance執(zhí)行反注冊,并移除本地的心跳保持任務(wù),Nacos實(shí)例列表中也會將該實(shí)例移除。

Dubbo-go的核心注冊引擎Nacos怎么使用

                        圖5

訂閱服務(wù)實(shí)例變化

Dubbo-go的Consumer在啟動的時候會調(diào)用Nacos-SDK-go的Subscribe接口,該接口入?yún)⑷鐖D6,訂閱的時候只需要傳遞ServiceName即應(yīng)用名和回調(diào)函數(shù)SubscribeCallback,Nacos在服務(wù)實(shí)例發(fā)生變化的時候即可通過回調(diào)函數(shù)通知Dubbo-go。Nacos-SDK-go是如何感知Nacos的服務(wù)實(shí)例變化的呢?主要有兩種方式:

  • Nacos服務(wù)端主動推送,Nacos-SDK-go在啟動的時候會監(jiān)聽一個UDP端口,該端口在調(diào)用Nacos Register API的時候作為參數(shù)傳遞,Nacos會記錄Ip和端口,當(dāng)服務(wù)實(shí)例發(fā)生變化時,Nacos會對所有監(jiān)聽該服務(wù)的Ip和端口發(fā)送UDP請求,推送變化后的服務(wù)實(shí)例信息。

  • Nacos-SDK-go定期查詢,SDK會對訂閱的服務(wù)實(shí)例定時調(diào)用查詢接口,如果查詢有變化則通過回調(diào)接口通知Dubbo-go。作為兜底策略保證Nacos服務(wù)端推送失敗后,仍能感知到變化。

    Dubbo-go的核心注冊引擎Nacos怎么使用

                                        圖6

此外Nacos-SDK-go還支持推空保護(hù),當(dāng)Nacos推送的實(shí)例列表為空時,不更新本地緩存,也不通知Dubbo-go變更,避免Consumer無可用實(shí)例調(diào)用,造成故障。同時,SDK還支持服務(wù)實(shí)例信息本地持久化存儲,可以保證在Nacos服務(wù)故障過程中,Consumer重啟也能獲取到可用實(shí)例,具備容災(zāi)效果。

范例實(shí)踐

環(huán)境準(zhǔn)備

dubbo-go samples代碼下載:https://github.com/apache/dubbo-samples/tree/master/golang,基于Nacos注冊中心的應(yīng)用級服務(wù)發(fā)現(xiàn)的hello world代碼目錄在 registry/servicediscovery/nacos。

Dubbo-go的核心注冊引擎Nacos怎么使用

                                圖7

Server端搭建

進(jìn)入registry/servicediscovery/nacos/go-server/profiles文件,可以看到有dev、release和test三個文件夾,分別對應(yīng)開發(fā)、測試和生產(chǎn)配置。我們使用dev配置來搭建開發(fā)環(huán)境,dev文件下有l(wèi)og.yml和server.yml文件,下面對server.yml配置進(jìn)行修改。

remote配置,這里使用公共的Nacos服務(wù),address支持配置多個地址,用逗號分割。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的控制臺(http://console.nacos.io/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=)

看到,應(yīng)用user-info-server已經(jīng)注冊成功。

Dubbo-go的核心注冊引擎Nacos怎么使用

Dubbo-go的核心注冊引擎Nacos怎么使用

Client端搭建

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端成功。

Dubbo-go的核心注冊引擎Nacos怎么使用

到此,關(guān)于“Dubbo-go的核心注冊引擎Nacos怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

網(wǎng)站欄目:Dubbo-go的核心注冊引擎Nacos怎么使用
URL地址:http://bm7419.com/article2/jddooc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計(jì)網(wǎng)站維護(hù)、自適應(yīng)網(wǎng)站、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作