當前位置:編程學習大全網 - 源碼下載 - Kitex 源碼解析 —— 將服務註冊進入註冊中心的細節

Kitex 源碼解析 —— 將服務註冊進入註冊中心的細節

Kitex為 字節跳動 內部的 Golang 微服務 RPC 框架,具有 高性能 強可擴展 的特點,在字節內部已廣泛使用。如果對微服務性能有要求,又希望定制擴展融入自己的治理體系,Kitex 會是壹個不錯的選擇。

這次我們可以從 官方示例 中的 easy_note 這個demo 開始分析,因為它基本展示了 Kitex 的基本使用方法。

下面圖例為官方在 demo 中展示的架構圖,通過簡單的分析可得, note , user 通過 註冊中心 (Etcd) 進行註冊 , api 通過 註冊中心 來發現 note , user 兩個 rpc 服務, 並進行業務處理。

kitex-examples/hello 這個最簡單示例分析,從 cloudwego/kitex 的快速上手可知,這裏用了最簡單的 直鏈 來鏈接 server 和 client。而這次的 easy_note 中使用了 註冊中心 來作為 服務之間的 橋梁 (middleware), 為什麽不使用之前的方式而是使用了註冊中心?

我們搜索壹下註冊中心的作用,可知: 服務註冊中心的主要作用就是「服務的註冊」和「服務的發現」

我們將服務交給註冊中心管理,雖然可以避免處理復雜的手動管理,我們也許需要還要考慮更多問題,例如:

這次目標之壹就是來解析解析服務是如何在服務啟動時進行 註冊 ( Register ) 這個操作的, 這次我們從 easy_note/cmd/user 這個服務開始分析, 因為它是被 註冊 進入 Etcd 的服務之壹。

我們從其中的 main.go 開始下手,以下的內容是經過簡化後的文件,是實現配置服務,啟動服務的文件

由註釋可知 WithRegister() 為配置 註冊信息 的函數 ,那為什麽直接就看這個函數呢?

壹是因為主要配置註冊的主要邏輯在其中,二是因為 With... 的函數結構都是大同小異,十分相似的。

再然後我們進入 kitex/server/option.go ,先看看 di.Push(fmt.Sprintf("WithRegistry(%T)", r)) 這壹行,

這個 *util.Slice 是什麽 ?進去看看?

進入 kitex/pkg/utils/slice.go , 我發現它很簡短。但是它好眼熟,它好像是壹個非常常見的數據結構 —— Stack (棧)

在這個文件之下有它的 slice__test.go 文件 ,看到這裏的朋友可以去試驗壹下是否這個 Slice 和我的想法是否壹致,大家看文章是要思考的嘛!最好可以動動手!

我們再進入 o.Registry = r 這壹行,可以得知 Options 用於初始化 server, Option 用於配置 Options (我覺得這種命名方式很巧妙,我感覺基本達到了 見名知意 的作用),裏面東西很多,我們今天只看 Register 部分

到了這裏我們可以暫停思考壹下,到達這壹步是怎麽個過程呢?是通過 main.go/user.NewServer() 的方法進來的。

NewServer() 的作用是什麽?是用於配置初始化服務器的 可選參數

配置完了參數什麽時候生效呢 ( Register 是什麽時候發生的呢) ?其實配置的實現就在 main.go NewServer() 的下壹句, Run() !

進入Run方法的實現,可以得知 register 是發生在 server 啟動成功後 的,停止也是會向 Etcd 進行註銷操作的 (大家可以在同文件的 Stop() 中查看)

至此 服務完成了向 Etcd 的註冊,我忽略了許多其他細節,這些細節也很有意思,希望大家可以自己試著探索

這次文章其實向大家分析了如何配置服務,以及向註冊中心進行註冊的方法和時機。

雖然省略了許多細節,但是通過這篇文章可以學到什麽呢?

  • 上一篇:寒假裏妳讀了哪些課外書和報刑,把妳的感想寫下來。分4段來寫。
  • 下一篇:為什麽網站源代碼中開始的代碼都是壹樣的是什麽意思?(如下代碼)
  • copyright 2024編程學習大全網