dubbo-go v1.5.6来喽!
作者 | 鐵城??dubbo-go 社區 committer
來源 | 阿里巴巴云原生公眾號
dubbogo 社區近期發布了 dubbogo v1.5.6。該版本和 dubbo 2.7.8 對齊,提供了命令行工具,并提供了多種加載配置的方式。
相關改進實在太多,本文只列出相關重大 feature 和?性能提升項。
1. 命令行工具
熟悉dubbo?的朋友可能知道 dubbo 支持 telnet 命令行在線調試。
本次發布也增加了 dubbo-go 的 cli 命令行工具,可以方便用戶直連特定服務,通過編寫 json 文件來定義傳輸結構和數據,發起調用進行在線調試,打印返回數據和耗時情況。
目前支持嵌套 struct,但是只支持單個參數的請求包和回包。數據類型由于需要在 json 中定義,只支持 golang 基本數據類型:字符串、整形、浮點。
社區后續會再發一篇文章,著重講解其原理和實現。相關 pr 為 https://github.com/apache/dubbo-go/pull/818,由 dubbogo 最年輕的 00 后 apache committer 李志信同學實現。
2. 代理實現擴展
重構 Proxy,添加 ImplementFunc 函數,允許項目對 Proxy 的代理進行重新實現。在使用 ProxyFactory 自定義注冊的場景下,創建的 proxy.Proxy 也自定義實現,可以對返回數據進行修改。
主要應用場景為在網關泛化調用場景下。懂得的人自然懂。
相關 pr ?https://github.com/apache/dubbo-go/pull/1019,由本文作者親自操刀。
3. 啟動時指定配置文件的路徑
用戶使用之前版本的 dubbogo 時,一直吐槽其只提供環境變量的方式,加載指定的配置文件。
export CONF_PROVIDER_FILE_PATH="../profiles/dev/server.yml" export CONF_CONSUMER_FILE_PATH="../profiles/dev/server.yml" export APP_LOG_CONF_FILE="../profiles/dev/log.yml"v1.5.6 提供了新的配置文件加載接口:在啟動命令行通過 ?proConf、conConf、logConf三個 flag 設定配置文件路徑。
服務提供方:
go run . -proConf ../profiles/dev/server.yml -logConf ../profiles/dev/log.yml服務消費方:
go run . -conConf ../profiles/dev/client.yml -logConf ../profiles/dev/log.yml相關 pr https://github.com/apache/dubbo-go/pull/1039,由南京信息工程大學大三學生 陳家鵬實現。
4. 自定義加載 ServerConfig 和 ReferenceConfig
新增 ConfigPostProcessor 接口,用戶可以依據該接口提供兩個的方法,在部署 dubbogo 服務時加載自定義的配置。
// 服務提供方配置 PostProcessServiceConfig(*common.URL)// 服務消費方配置 PostProcessReferenceConfig(*common.URL)相關 pr ?https://github.com/apache/dubbo-go/pull/943,由即將奔五十的 dubbo chairman 北緯親自操刀實現,chairman 同志老當益壯,號召大家向 chairman 筒子學習。
5. 擴展?URL 的比較
在common/url.go里面提供 CompareURLEqualFunc,可以讓用戶自定義 URL 比較,提高比對效率。相關技術細節見如下鏈接。
common/url.go:https://github.com/apache/dubbo-go/pull/854/files#diff-5111f14762c010c3029a67743796fea97ab1015d35c96670a4cfa25f30145464
目前的 URL 實現并未達到最終狀態。未來的 dubbogo 3.x 版本中,將借鑒 dubbo 的 URL 實現,將 common.URL 拆分為ServiceConfigURL、ServiceAddressURL和InstanceAddressURL,分別對應配置中心、注冊中心和元數據中心的 schema,盡量將變更壓力降低到最低粒度。
該功能對應的?pr??https://github.com/apache/dubbo-go/pull/854 由阿里雙十一中間件大隊長展圖同學實現。展圖同學一直奮戰在編程一線。
6. 注冊中心優化
復用了 zookeeper 鏈接以及優化了服務發現中心邏輯,大大減少了與 zookeeper 的 tcp 鏈接數目,減少了使用的 goroutine 數目,降低了 dubbo-go 的內存占用量。
我們會把同樣的邏輯服用到 nacos、etcd、consul 等各個注冊中心,通過減少 goroutine 數目,減輕注冊中心壓力,并減少 consumer 和 provider 內存的使用。
該功能對應的 pr https://github.com/apache/dubbo-go/pull/1010 由現在螞蟻中間件工作的 王文學 同學在涂鴉工作時實現。
7.?API 形式進行配置
以前版本的 dubbogo 只提供了從配置文件讀取配置選項,該功能增加以 API 的方式進行配置,用戶可以通過調用相關 API 初始化配置。
用戶可以通過 API 進行相關參數設定,無需再加載配置文件。
可以參考示例:?https://github.com/apache/dubbo-go-samples/tree/master/config-api
相關 pr https://github.com/apache/dubbo-go/pull/1020 也是由李志信實現。
8.?grpc 優化
- 打通 dubbo-go中 consumer config 的超時時間 connect_timeout 和 gRPC server 的超時時間,用戶可以自定義 gRPC 超時時間機制。
- 將處理注冊中心服務變更事件的機制改為同步,防止 provider 端服務頻繁重啟導致上下線事件處理順序出錯。
- 使用 gRPC 協議時,異步等待 dubbo-go 的 service 都暴露完后,才將所有 dubbo-go service 對應的 gRPC service 注冊到 gRPC server 上并啟動 gRPC server。以此修復 provider 端的只能注冊一個 service 的問題。
總體功能由 https://github.com/apache/dubbo-go/pull/1056 等多個 pr 構成,由 All In 了 dubbogo 的 上海識裝信息科技有限公司【知名 APP 得物所在公司】工程師 柯瞻、 dubbogo 社區負責人 于雨、阿里工程師云興 以及 南京某公司的張天同學 共同負責實現。
9.?hessian2 go 最新 feature
除了? dubbo-go 自身的改進外,dubbo-go-hessian2 項目截止目前最新版本 v1.9.2 也做了如下重大改進:
- 內置支持 java.util.Locale:https://github.com/apache/dubbo-go-hessian2/pull/264
- 內置支持 java.util.UUID:https://github.com/apache/dubbo-go-hessian2/pull/256
- 支持編碼 no pojo object:https://github.com/apache/dubbo-go-hessian2/pull/243
- 內置支持 java.sql.Time:https://github.com/apache/dubbo-go-hessian2/pull/219
- 內置支持 java.sql.Date:https://github.com/apache/dubbo-go-hessian2/pull/221
dubbo-go-hessian2:https://github.com/apache/dubbo-go-hessian2
總體 pr 由 dubbo-go-hessian2 項目負責人?望哥、李志信、張艷明等同學完成。
10. 回顧與展望
dubbogo 目前處于一個比較穩定成熟的狀態,1.5 版本會被持續維護,以修復 BUG 和進行一些必要的最低幅度的優化。
更多信息:https://github.com/apache/dubbo-go/releases/tag/v1.5.6
目前最新的朝云原生方向的發展3.0 版本基于 v1.5.x,在兼容 dubbo 3.0 的同時,將向后兼容 v2.7.x,計劃于 4 月底發布第一個版本。
如果你有任何疑問,歡迎釘釘掃碼加入交流群【釘釘群號 31363295】
作者簡介
鐵城 (Github ID cityiron),dubbo-go 社區 committer,主要參與 dubbo-go 1.5 版本迭代、 dubbo-go 3.0 服務路由和云原生方面工作、以及 dubbo-go-pixiu 項目負責人。目前就職于阿里盒馬事業群,從事交易流程工作,擅長使用 Java/Go 語言,專注于云原生和微服務等技術方向。
在 PC 端登錄 start.aliyun.com 知行動手實驗室,沉浸式體驗在線交互教程。
原文鏈接:https://developer.aliyun.com/article/783777?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的dubbo-go v1.5.6来喽!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 精彩回顾 | Apache Flink
- 下一篇: Flink 在唯品会的实践