Golang 微服務工具包 Go kit

大家好,我是 frank。
歡迎大家點擊標題下方藍色文字「Golang 語言開發棧」關注公衆號。
設爲星標,第一時間接收推送文章。
文末掃碼,加羣一起學 Golang 語言。

01 介紹

Go kit 是 Go 包的集合,可幫助您構建健壯、可靠、可維護的微服務。它最初被設想爲一個工具包,以幫助大型(所謂的現代企業)組織採用 Go 作爲實現語言。但它很快就 "向下增長",現在也爲較小的初創公司和組織提供服務。

Go kit 服務分爲三層:

請求在傳輸層進入服務,向下傳輸經過端點層到達服務層,響應採用相反的過程。

Transports

Go kit 附帶了對 HTTP、gRPC、Thrift 和 net/rpc 的支持。傳輸域綁定到具體的傳輸協議,比如 HTTP 或 gRPC。可以讓我們的單個微服務同時支持 HTTP API 和 RPC 服務。

Endpoints

Endpoints 類似在 Controller 中的 action 或 handler,用於接收 transports 的請求。

Services

Services 實現核心業務邏輯,它通常將多個 Endpoints 組合在一起。在 Go kit 中,Services 通常會定義接口,通過實現接口去實現業務邏輯。

Services 應該不知道 Endpoints,尤其 Transport-domain 的概念。Services 也應該不知道有關 HTTP headers 或 gRPC 錯誤碼的任何信息。

Middlewares

Go kit 嘗試通過使用中間件(裝飾器模式)來分離與業務邏輯無關的功能。中間件可以包裝 Endpoints 或 Services,來添加功能,例如日誌記錄、限流、負載均衡或鏈路跟蹤。通常圍繞 Endpoints 或 Services 使用多箇中間件。

02 Go kit 架構模型

在瞭解了 Transports、Endpoints、Services 和 Middlewares 的概念後,我們可以發現 Go kit 架構模型類似「洋蔥」,包含多層。這些層從內到外可以分組到我們的三個域中。在最內層的 Service 域中,所有內容都基於特定 service 定義,並且所有核心業務邏輯都在 service 中實現;中間層 Endpoint 域是將 Service 的每個方法抽象到通用的 Endpoint;在最外層的 Transport 域是 Endpoints 綁定到 HTTP 或 gRPC。

圖片來自 Go kit 官網

我們可以通過爲 service 定義 interface,並提供具體實現來實現核心業務邏輯。然後,通過編寫 service 中間件添加額外功能,比如日誌記錄、分析、檢測等。

Go kit 提供 Endpoint 域和 Transport 域中間件,用於限流、熔斷、負載均衡和鏈路跟蹤等功能。

03 微服務示例

在瞭解以上關於 Go kit 的知識之後,我們通過一個簡單的微服務示例,學習怎麼使用 Go kit 開發項目。

項目包含服務端和客戶端,並採用 Consul 作爲服務註冊與發現組件。

代碼目錄:

.
├── README.md
├── client
│   ├── endpoint
│   ├── main.go
│   └── transport
├── go.mod
├── go.sum
└── server
    ├── config
    ├── endpoint
    ├── main.go
    ├── service
    └── transport

完整代碼,請參閱 Github。

04 總結

本文我們介紹 Golang 微服務工具包 Go kit 的基礎知識和架構設計,並提供了一個簡單的微服務示例代碼,讀者朋友們在瞭解 Go kit 之後,可以通過閱讀代碼,學習怎麼使用 Go kit 開發項目。

參考資料:
https://gokit.io/faq/#architecture-and-design 
https://pkg.go.dev/github.com/go-kit/kit@v0.12.0

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ifT3k_Q9ucVBfyTdW1B3Zg