久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進行Nacos Go微服務中Dubbo

154次閱讀
沒有評論

共計 4102 個字符,預計需要花費 11 分鐘才能閱讀完成。

如何進行 Nacos Go 微服務中 Dubbo-go 云原生核心引擎的探索,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

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

圖 1

根據上表的對比我們可以從以下幾個維度得出結論:

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

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

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

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

綜合上面各維度的對比,可以了解到 Nacos 作為注冊中心有一定的優勢,那么它對 Go 微服務生態的集成做得如何?為此,我們策劃了本系列文章,該系列將為大家介紹 Nacos 在 Go 微服務生態集成中做的一些工作和實踐經驗,系列內容將主要包含以下三個篇章:

Dubbo-go 云原生核心引擎探索;

Sentinel-go 外部動態數據源初探;

go-micro 集成 Nacos 實踐;

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

引言

Dubbo-go 目前是 Dubbo 多語言生態中最火熱的一個項目,從 2016 年發布至今,已經走過 5 個年頭。最近,Dubbo-go 發布了 v1.5 版本,全面兼容 Dubbo 2.7.x 版本,支持了應用維度的服務注冊與發現,和主流的注冊模型保持一致,標志著 Dubbo-go 向云原生邁出了關鍵的一步。

作為驅動服務運轉的核心引擎 – 注冊中心,在切換到應用維度的注冊模型后,也需要做相應的適配,本文將解析如何以 Nacos 為核心引擎實現應用維度的服務注冊與發現,并且給出相應的實踐案例。此外,本文代碼基于 Dubbo-go v1.5.1,Nacos-SDK-go v1.0.0 和 Nacos v1.3.2。

服務注冊與發現架構

從架構中,我們可以看到,與接口級別的服務注冊發現不同的是,Dubbo-go 的 provider 啟動后會調用 Nacos-go-sdk 的 RegisterInstance 接口向 Nacos 注冊服務實例,注冊的服務名即為應用名稱,而不是接口名稱。Conusmer 啟動后則會調用 Subscribe 接口訂閱該應用的服務實例變化,并對的實例發起服務調用。

圖 2

服務模型

圖 3 是我們 Dubbo-go 的應用維度服務發現模型,主要有服務和實例兩個層級關系,服務實例的屬性主要包含實例 Id、主機地址、服務端口、激活狀態和元數據。圖 4 為 Nacos 的服務分級存儲模型,包含服務、集群和實例三個層次。兩者對比,多了一個集群維度的層級,而且實例屬性信息能夠完全匹配。

所以在 Dubbo-go 將應用服務實例注冊到 Nacos 時,我們只需要將集群設置為默認集群,再填充服務和實例的相關屬性,即可完成服務模型上的匹配。此外 Nacos 可以將服務注冊到不同的 Namespace 下,實現多租戶的隔離。

圖 3

圖 4

服務實例心跳維持

Dubbo-go 的 Provider 在向 Nacos 注冊應用服務實例信息后,需要主動上報心跳,讓 Nacos 服務端感知實例的存活與否,以判斷是否將該節點從實例列表中移除。維護心跳的工作是在 Nacos-SDK-go 完成的,從圖 5 代碼中可以看到,當 Dubbo-go 調用 RegisterInstance 注冊一個服務實例時,SDK 除了調用 Nacos 的 Register API 之外,還會調用 AddBeatInfo,將服務實例信息添加到本地緩存,通過后臺協程定期向 Nacos 發送服務實例信息,保持心跳。

當服務下線時,可以通過調用 DeRegisterInstance 執行反注冊,并移除本地的心跳保持任務,Nacos 實例列表中也會將該實例移除。

圖 5

訂閱服務實例變化

Dubbo-go 的 Consumer 在啟動的時候會調用 Nacos-SDK-go 的 Subscribe 接口,該接口入參如圖 6,訂閱的時候只需要傳遞 ServiceName 即應用名和回調函數 SubscribeCallback,Nacos 在服務實例發生變化的時候即可通過回調函數通知 Dubbo-go。Nacos-SDK-go 是如何感知 Nacos 的服務實例變化的呢?主要有兩種方式:

Nacos 服務端主動推送,Nacos-SDK-go 在啟動的時候會監聽一個 UDP 端口,該端口在調用 Nacos Register API 的時候作為參數傳遞,Nacos 會記錄 Ip 和端口,當服務實例發生變化時,Nacos 會對所有監聽該服務的 Ip 和端口發送 UDP 請求,推送變化后的服務實例信息;

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

圖 6

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

范例實踐 1. 環境準備

dubbo-go samples 代碼下載:https://github.com/apache/dubbo-samples/tree/master/golang,基于 Nacos 注冊中心的應用級服務發現的 hello world 代碼目錄在 registry/servicediscovery/nacos;

圖 7

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

2. Server 端搭建

進入 registry/servicediscovery/nacos/go-server/profiles 文件,可以看到有 dev、release 和 test 三個文件夾,分別對應開發、測試和生產配置。我們使用 dev 配置來搭建開發環境,dev 文件下有 log.yml 和 server.yml 文件,下面對 server.yml 配置進行修改。

remote 配置,這里使用公共的 Nacos 服務,address 支持配置多個地址,用逗號分割。params 參數配置 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 端環境變量:

export CONF_PROVIDER_FILE_PATH=server 端的 server.yml 文件路徑
export APP_LOG_CONF_FILE=server 端的 log.yml 文件路徑 

進入 registry/servicediscovery/nacos/go-server/app,運行 server.go 的 main 方法,可以從 Nacos 的控制臺看到,應用 user-info-server 已經注冊成功。

Nacos 的控制臺地址:http://console.nacos.io/nacos/#/serviceManagement?dataId= group= appName= namespace=

圖 8

圖 9

3. Client 端搭建

client 的配置文件在 registry/servicediscovery/nacos/go-server/profiles 目錄下,需要修改的地方跟 server 端一樣,這里不贅述。

配置 client 端環境變量:

export CONF_CONSUMER_FILE_PATH=client 端的 server.yml 文件路徑
export APP_LOG_CONF_FILE=client 端的 log.yml 文件路徑 

進入 registry/servicediscovery/nacos/go-client/app,運行 client.go 的 main 方法,看到如下日志輸出,表示調用 server 端成功。

圖 10

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計4102字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 静乐县| 绥芬河市| 寻乌县| 遵义县| 来宾市| 青阳县| 尼玛县| 万州区| 裕民县| 辉县市| 嫩江县| 镇沅| 眉山市| 新田县| 诸暨市| 丹凤县| 青岛市| 腾冲县| 十堰市| 辽源市| 武隆县| 巴彦淖尔市| 兴安盟| 桑植县| 江城| 天门市| 台江县| 临高县| 紫阳县| 龙泉市| 贺兰县| 涞源县| 亳州市| 通城县| 闽侯县| 仲巴县| 文昌市| 山阴县| 佛教| 措美县| 芜湖县|