Golang微服務框架go-kratos分析:框架架構分析

一、kratos設計理念

這裏主要講解 kratos v2 的設計理念。

kratos 框架制定接口規範,然後通過插件來實現具體需求,實現自由定製、可插拔的微服務框架。

我們既可以選擇 kratos 框架提供的插件,也可以自己定製實現相關插件,實現高度定製化。

也能整合相關 Go 的第三方工具。構建一個 Go 微服務的工具箱。

面向包的設計,參考了 Go 的基礎庫設計思想,包名按照實際功能劃分,每個包都具有單一的職責,當用戶不可見或者不穩定的接口放到了 internal 目錄中

通過 Protobuf IDL 來構建應用程序。

kratos v2 版本中 API定義(http、gRPC定義)、gRPC ServiceHTTP Service請求參數校驗錯誤定義Swagger API json應用配置模版等都是基於 Protobuf IDL 來構建的:

image-20220924194048028

二、kratos設計原則

  • 簡單:不過度設計,代碼平實簡單;
  • 通用:通用業務開發所需要的基礎庫的功能;
  • 高效:提高業務迭代的效率;
  • 穩定:基礎庫可測試性高,覆蓋率高,有線上實踐安全可靠;
  • 健壯:通過良好的基礎庫設計,減少錯用;
  • 高性能:性能高,但不特定爲了性能做 hack 優化,引入 unsafe ;
  • 擴展性:良好的接口設計,來擴展實現,或者通過新增基礎庫目錄來擴展功能;
  • 容錯性:爲失敗設計,大量引入對 SRE 的理解,魯棒性高;
  • 工具鏈:包含大量工具鏈,比如 cache 代碼生成,lint 工具等等;

三、kratos功能特性

  • APIs(Protocol):協議通信以 HTTP/gRPC 爲基礎,通過 Protobuf 進行定義;
  • Errors:通過 Protobuf 的 Enum 作爲錯誤碼定義,以及工具生成判定接口;
  • Metadata:在協議通信 HTTP/gRPC 中,通過 Middleware 規範化服務元信息傳遞;
  • Config:支持多數據源方式,進行配置合併鋪平,通過 Atomic 方式支持動態配置;
  • Logger:標準日誌接口,可方便集成三方 log 庫,並可通過 fluentd 收集日誌;
  • Metrics:統一指標接口,可以實現各種指標系統,默認集成 Prometheus;
  • Tracing:遵循 OpenTelemetry 規範定義,以實現微服務鏈路追蹤;
  • Encoding:支持 Accept 和 Content-Type 進行自動選擇內容編碼;
  • Transport:通用的 HTTP/gRPC 傳輸層,實現統一的 Middleware 插件支持;
  • Registry:實現統一註冊中心接口,可插件化對接各種註冊中心;

通過下面的架構圖也可以看出來。

擴展性:

  1. 通過制定接口規範,用戶可以通過實現接口來實現自己的定製功能,實現可插拔的插件功能。
  2. 中間件功能

四、框架架構設計

4.1 架構設計

image-20220924195505946

(from: https://mp.weixin.qq.com/s/tA6Vm9MtjCfN9O95h0B3kQ kratos v2 版本演進)

  • kratos 框架核心(core):包括基礎的 CLI 工具,內置的 HTTP/gRPC 接口生成工具和服務生命週期管理,並提供鏈路追蹤、配置文件、日誌、服務發現等組件(component)功能。這些組件都定義了相關接口,組件實現了這些接口。用戶實現的自定義插件功能也是根據這些接口來實現的。
  • Transport:傳輸層使用 HTTP/gRPC 。
  • Application:用戶編寫的應用服務。

contrib plugins:

用戶貢獻的插件或叫第三方插件。根據定義的接口,實現的插件功能。有配置、日誌、服務發現、監控等插件。

aegis:

服務可用性的一些算法,比如熔斷、限流等。獨立的項目,幾乎沒有依賴,跟不依賴 kratos。

command line tools:

工具鏈,用 CLI 命令來幫助用戶快速生成各種代碼,加快服務和應用的快速開發。具體可見:CLI 工具使用

kratos cmd:爲了進行快速開發,定義的一些 cli 命令。比如根據 proto 文件生成相應的 http/gRPC 的 Go 代碼命令 - kratos proto client

protoc plugins:proto 插件的一些命令。

看看 kratos v2.5.0 的代碼結構:

image-20220924201124295

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章