What’s new in dubbo-go-pixiu 0.4.0

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 為 //github.com/apache/dubbo-go-pixiu/pull/255//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 為 //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 是 //github.com/apache/dubbo-go-pixiu/pull/236

4 支援 cors 策略

Pixiu 支援跨域資源共享策略,具體的 pr 是 //github.com/apache/dubbo-go-pixiu/pull/249

5 支援 HTTPS 安全加密

Pixiu 支援 HTTPS 安全加密,具體的 pr 是 //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 年從南京大學畢業。目前就職於南京本地一家創業公司。