日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Nacos Go 微服务生态系列(一)| Dubbo-go 云原生核心引擎探索

發(fā)布時(shí)間:2025/3/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nacos Go 微服务生态系列(一)| Dubbo-go 云原生核心引擎探索 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 |?李志鵬

近幾年,隨著 Go 語(yǔ)言社區(qū)逐漸發(fā)展和壯大,越來(lái)越多的公司開始嘗試采用 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 通過(guò) keep alive 方式,能實(shí)時(shí)感知實(shí)例變化;Nacos、Consul 和 Eureka 都支持負(fù)載均衡策略,Nacos 通過(guò) Metadata selector 支持更靈活的策略;此外,Nacos、Eureka 都支持雪崩保護(hù),避免因?yàn)檫^(guò)多的實(shí)例不健康對(duì)健康的實(shí)例造成雪崩效應(yīng)。

綜合上面各維度的對(duì)比,可以了解到 Nacos 作為注冊(cè)中心有一定的優(yōu)勢(shì),那么它對(duì) Go 微服務(wù)生態(tài)的集成做得如何?為此,我們策劃了本系列文章,該系列將為大家介紹 Nacos 在 Go 微服務(wù)生態(tài)集成中做的一些工作和實(shí)踐經(jīng)驗(yàn),系列內(nèi)容將主要包含以下三個(gè)篇章:

  • Dubbo-go 云原生核心引擎探索;
  • Sentinel-go 外部動(dòng)態(tài)數(shù)據(jù)源初探;
  • go-micro 集成 Nacos 實(shí)踐;

接下來(lái)我們首先探索下 Nacos 是如何與 Dubbo-go 集成。

引言

Dubbo-go 目前是 Dubbo 多語(yǔ)言生態(tài)中最火熱的一個(gè)項(xiàng)目,從 2016 年發(fā)布至今,已經(jīng)走過(guò) 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。

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

從架構(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

服務(wù)模型

圖 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

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

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í)例信息添加到本地緩存,通過(guò)后臺(tái)協(xié)程定期向 Nacos 發(fā)送服務(wù)實(shí)例信息,保持心跳。

當(dāng)服務(wù)下線時(shí),可以通過(guò)調(diào)用 DeRegisterInstance 執(zhí)行反注冊(cè),并移除本地的心跳保持任務(wù),Nacos 實(shí)例列表中也會(huì)將該實(shí)例移除。


圖 5

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

Dubbo-go 的 Consumer 在啟動(dòng)的時(shí)候會(huì)調(diào)用 Nacos-SDK-go 的 Subscribe 接口,該接口入?yún)⑷鐖D 6,訂閱的時(shí)候只需要傳遞 ServiceName 即應(yīng)用名和回調(diào)函數(shù) SubscribeCallback,Nacos 在服務(wù)實(shí)例發(fā)生變化的時(shí)候即可通過(guò)回調(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)用查詢接口,如果查詢有變化則通過(guò)回調(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ù)故障過(guò)程中,Consumer 重啟也能獲取到可用實(shí)例,具備容災(zāi)效果。

范例實(shí)踐

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

  • 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

  • Nacos 服務(wù)端搭建,參考官方文檔:https://nacos.io/zh-cn/docs/quick-start.html,或者使用官方提供的公共 Nacos 服務(wù):http://console.nacos.io/nacos(賬號(hào)密碼:nacos,僅供測(cè)試),或者購(gòu)買阿里云服務(wù):https://help.aliyun.com/document_detail/139460.html。

2. Server 端搭建

進(jìn)入 registry/servicediscovery/nacos/go-server/profiles 文件,可以看到有 dev、release 和 test 三個(gè)文件夾,分別對(duì)應(yīng)開發(fā)、測(cè)試和生產(chǎn)配置。我們使用 dev 配置來(lái)搭建開發(fā)環(huán)境,dev 文件下有 log.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)看到,應(yīng)用 user-info-server 已經(jīng)注冊(cè)成功。

Nacos 的控制臺(tái)地址:http://console.nacos.io/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=


圖 8


圖 9

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


圖 10

相關(guān)鏈接

  • Dubbo-go 項(xiàng)目地址:https://github.com/apache/dubbo-go

  • Dubbo-go 社區(qū)交流釘釘群:23331795

  • Nacos 項(xiàng)目地址:https://nacos.io/

  • Nacos 社區(qū)交流釘釘群:30438813

  • Nacos golang 生態(tài)交流釘釘群:23191211

  • Nacos-SDK-go 項(xiàng)目地址:https://github.com/nacos-group/nacos-sdk-go

招聘信息

如果你對(duì)我們?cè)谧龅氖虑楦信d趣,歡迎你加入我們團(tuán)隊(duì)。內(nèi)推郵箱:water.lyl@alibaba-inc.com

作者簡(jiǎn)介

李志鵬,Github 賬號(hào):Lzp0412,開源社區(qū)愛好者,Nacos Committer,Nacos-SDK-go 作者,現(xiàn)就職于阿里云云原生應(yīng)用平臺(tái),主要參與服務(wù)發(fā)現(xiàn)、CoreDNS、ServiceMesh 相關(guān)工作,負(fù)責(zé)推動(dòng) Nacos Go 微服務(wù)生態(tài)建設(shè)。

Spring Cloud Alibaba 七天訓(xùn)練營(yíng)

服務(wù)注冊(cè)與發(fā)現(xiàn)是微服務(wù)架構(gòu)體系中最關(guān)鍵的組件之一,為了帶領(lǐng)大家系統(tǒng)入門微服務(wù)架構(gòu),9 月 24 日,由 Spring Cloud Alibaba 創(chuàng)始團(tuán)隊(duì)主筆的 Spring Cloud Alibaba 實(shí)戰(zhàn)訓(xùn)練營(yíng)將正式開營(yíng)。七天時(shí)間了解微服務(wù)各模塊的實(shí)現(xiàn)原理,手把手教學(xué)如何獨(dú)立開發(fā)一個(gè)微服務(wù)應(yīng)用,助力小白開發(fā)者從 0 到 1 建立系統(tǒng)化的知識(shí)體系。點(diǎn)擊鏈接即可參與:https://developer.aliyun.com/learning/trainingcamp/spring/1

“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的公眾號(hào)。”

總結(jié)

以上是生活随笔為你收集整理的Nacos Go 微服务生态系列(一)| Dubbo-go 云原生核心引擎探索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。