Dubbo-go-pixiu 是一款高效能 API 閘道器,支援 Dubbo 和 Http 等多種協議。具體介紹文章可以參考《Dubbo 跨語言呼叫神獸:dubbo-go-pixiu》。
近期社群釋出了 0.4.0 版本,具體請檢視 v0.4.0。相關改進實在太多,本文只列出相關重大 feature、bugfix 、 效能提升項。
1 動態從 Spring Cloud 和 Dubbo 註冊中心拉取路由和叢集配置資料
Pixiu 原本依賴本地配置檔案讀取路由和 upstream 叢集配置資料,對於真實生產場景十分不方便。因此,Pixiu 需要支援從叢集註冊中心動態獲取路由和叢集配置資料的功能。
如上圖所示,服務A、B、C 進行服務註冊,將自身後設資料儲存在註冊中心。而 Pixiu 則從註冊中心拉取註冊的服務後設資料,構建自己的路由規則和轉發叢集配置。當客戶端傳送請求時,Pixiu 會基於構建的轉發規則,將請求轉發給對應的後端服務。
社群同學分別就目前主流的兩大微服務解決方案 Spring Cloud 和 Dubbo 進行了相關特性開發,相關的 pr 為 https://github.com/apache/dubbo-go-pixiu/pull/255 和 https://github.com/apache/dubbo-go-pixiu/pull/256
目前,該特性只支援從 zk 和 nacos 拉取後設資料,更多服務註冊中心的支援工作正在進行中,歡迎感興趣的同學參與,可以加入釘釘群 31203920。
2 支援 Http 協議 轉換為 gRPC 協議
gRPC 協議已經是事實上的雲原生基礎通訊協議。etcd、istio、dapr 等大量雲原生中介軟體都提供 gRPC 相關的 API 介面供外界使用,dubbogo 3.0 也是基於 gRPC 構建了完全相容 gRPC 的 triple協議。
但是對於外部系統而言,傳統 HTTP 請求仍然是最為簡單和穩定的通訊手段,所以 Pixiu 提供了 Http 協議請求轉換為 gRPC 協議請求的能力,方便將內部服務的 gRPC API 以 Http 的形式進行對外暴露。具體模式如下圖所示,Pixiu 負責將客戶端的 Http 請求進行解碼,然後編碼為 gRPC 請求,並轉發給後端服務。
目前 Pixiu 是基於本地配置的 proto 檔案進行相關協議的編解碼工作的,具體pr 為 https://github.com/apache/dubbo-go-pixiu/pull/244。下一階段將通過 gRPC 的反射能力,來動態獲取 proto 配置資訊,減少閘道器處的配置工作。
3 支援 jaeger 規範的鏈路傳播協議
可觀測性是大型軟體系統的重要質量指標之一,而分散式鏈路追蹤是其中的重中之重。
Pixiu 基於 opentelemetry 規範構建了分散式鏈路追蹤體系,並支援將資料上傳到 jaeger 上進行記錄和展示。Pixiu 還會將 Span 相關資訊向 upstream 服務傳遞,由此開發者可以看到每一個經過 Pixiu 進行轉發的網路請求的完整處理鏈路,方便使用者進行鏈路追蹤和排查線上問題。
OpenTelemetry 合併了 OpenTracing 和 OpenCensus 專案,提供了一組 API 和庫來標準化遙測資料的採集和傳輸,使用該規範可用方便的在不同分散式鏈路追蹤資料儲存端進行切換。目前 Pixiu 支援將資料上傳到 jaeger 上,後續可以進行擴充套件,支援不同種類的 TracerProvider。
使用 Jaeger 進行追蹤的效果圖如下所示。
具體的 pr 是 https://github.com/apache/dubbo-go-pixiu/pull/236
4 支援 cors 策略
Pixiu 支援跨域資源共享策略,具體的 pr 是 https://github.com/apache/dubbo-go-pixiu/pull/249
5 支援 HTTPS 安全加密
Pixiu 支援 HTTPS 安全加密,具體的 pr 是 https://github.com/apache/dubbo-go-pixiu/pull/213
6 新增了更多的案例專案
Pixiu 專案的 samples 資料夾下新增了更多案例專案,包括並不限於:
spring cloud 和 Dubbo 叢集的服務發現案例,路徑是 samples/springcloud 和 samples/dubbogo/simple/registry;
分散式鏈路追蹤案例,路徑是samples/dubbo/simple/jaeger;
http to grpc 案例,路徑是 samples/http/grpc/。
7 docker 示例
目前 Pixiu 社群開發了一個 docker 映象,方便你進行測試,當前支援dubbo服務的zookeeper和nacos註冊中心,配置指定環境變數的註冊中心(你自己的dubbo服務註冊中心地址)地址即可使用:
docker pull phial3/dubbo-go-pixiu:0.0.1
docker run --name you-pixiu-name -e DUBBO_REGISTRY_ADDRESS=zookeeper://10.170.224.25:2181 phial3/dubbo-go-pixiu:0.0.1
docker run --name you-pixiu-name -e DUBBO_REGISTRY_ADDRESS=nacos://10.170.224.25:8848 phial3/dubbo-go-pixiu:0.0.1
如果你有任何疑問,歡迎加入 dubbogo社群群【釘釘搜尋群號 23331795 或者 釘釘掃碼如下群二維碼】
作者:張天,山東人,2018 年從南京大學畢業。目前就職於南京本地一家創業公司。