Dubbo-go v3.0——打造一流開源 Go 服務框架(dubbo服務啟動)

簡介:2021 年底 dubbogo 社區(qū)正式推出集成 新通信協(xié)議、新序列化協(xié)議、新應用注冊模型、新路由以及新的服務治理能力的 v3.0 版本

作者介紹:
李志信(github @laurencelizhixin),dubbo-go 3.0 負責人,apache dubbo PMC,來自阿里云中間件團隊,從事 Go 語言中間件的研發(fā)和開源工作。
于雨 (github @AlexStocks),dubbo-go 社區(qū)負責人,Apache Dubbo PMC,螞蟻集團可信原生部【TNT】基礎設施和中間件研發(fā)一線程序員。工作十一年來陸續(xù)參與和改進過 Redis/Pika/Pika-Port/etcd/Muduo/Dubbo/dubbo-go/Sentinel-golang/Seata-golang 等知名項目。
牛學蔚(github @justxuewei),Apache Dubbo Committer,北郵計算機學院二年級研究生,對中間件、云原生領域有著濃厚的興趣。
董劍輝(github @Mulavar),Apache Dubbo Committer,目前主要關注的開源方向為 Dubbo、Flink、Calcite。

Dubbo-go v3.0——打造一流開源 Go 服務框架(dubbo服務啟動)

Go 語言作為最流行的云原生語言,近些年擁有很高的熱度,一度備受國內(nèi)開源生態(tài)的關注,據(jù)筆者了解,眾多企業(yè)也在近年來從自身傳統(tǒng)技術棧轉(zhuǎn)型 Go 語言技術棧。Go 以其開發(fā)敏捷、易用性高、入門較為容易的優(yōu)勢深受廣大開發(fā)者青睞。而在 Go 語言生態(tài)成日益蓬勃發(fā)展之勢下,其生態(tài)的完備性,相比于飽經(jīng)考驗的 Java 生態(tài)依然有著很大的 Gap,對中小型企業(yè)來說,依然需要類似于 Spring 的 Go 框架來支撐日常業(yè)務開發(fā),渴望具備 Dubbo 生態(tài)的易用性和穩(wěn)定性,在這樣的訴求之下,初衷為 “Bridging The Gap Between Java And Go” 的 Dubbo-go 服務框架在 2016 年應運而生,發(fā)展至今。

我們在今年下半年的云計算基礎架構(gòu)大會上了解到了“基礎架構(gòu)能力下沉”的重大意義,從單體架構(gòu)到云原生架構(gòu)的一步步發(fā)展,都在努力將業(yè)務代碼與中間件解耦,盡可能提供統(tǒng)一的編程接口,通過AOP的思路將服務調(diào)用抽象化,將接口標準化,將基礎設施的實現(xiàn)下沉化。而 Dubbo-go 正是在原有保證網(wǎng)絡通信的高可用、穩(wěn)定性的前提下,整合了一批常用開源組件,提供一致的編程接口可供擴展和調(diào)用。在此之上,對齊 Dubbo 生態(tài)主流控制面,嘗試與云原生結(jié)合,朝向 Proxyless Service Mesh 方向發(fā)展,是我們整個生態(tài)項目的一致的愿景。

在 3.0 時代,我們的“野心” 不會止步于已有的用戶使用場景和基礎框架能力,我們選擇追求高可用、多語言、跨生態(tài)的優(yōu)點,打造新一代微服務基礎設施,實現(xiàn) “Bridging The Gap Between Dubbo And X”,在擴展 Go 生態(tài)的同時,也實現(xiàn)各種基礎設施的云原生化。

一 Dubbo-go 簡介

Dubbo-go 是常新的,每年都在不斷進化。介紹 Dubbo-go 3.0 工作之前,先回顧其過往 6 年的發(fā)展歷程,以明晰未來的方向。

1 什么是 Dubbo-go

github.com/apache/dubbo-go 是一款高性能 Go 語言微服務 RPC 框架,在 Dubbo 多語言生態(tài)中扮演重要角色,是編寫 go 語言微服務的最佳選擇之一。

開發(fā)者可以使用 Dubbo-go 框架高效地編寫 RPC 服務,并支持與 Dubbo、gRPC 服務跨語言互通;您可以使用 Dubbo 生態(tài)強大的服務治理能力和運維能力,例如服務注冊發(fā)現(xiàn)、負載均衡、配置中心、可視化等功能;您也可以使用 Dubbo-go 生態(tài)的 pixiu 網(wǎng)關將服務暴露給集群外部訪問。

Dubbo-go 項目由于雨于 2016 年創(chuàng)立,2018 年開始組建開源社區(qū),2019 年項目正式進入 Apache 軟件基金會,經(jīng)歷三年多不斷地迭代和優(yōu)化,2021 年底 dubbogo 社區(qū)正式推出集成 新通信協(xié)議、新序列化協(xié)議、新應用注冊模型、新路由以及新的服務治理能力的 v3.0 版本,該版本在前期研發(fā)階段已經(jīng)擁有了眾多生產(chǎn)用戶的關注和使用。

Dubbo-go 是阿里開源項目中最活躍的開源社區(qū)之一,多年的發(fā)展使社區(qū)積累了眾多熱愛開源的活躍貢獻者、 Apache Committer/PMC 成員。不僅給 Dubbo 以及其他 Dubbo 生態(tài)項目示范了通過社區(qū)的組織運營幫助項目發(fā)展,而且?guī)椭颂嵘苏麄€ Dubbo 大社區(qū)的活躍度:

  • 包括 Apache/Dubbo 與 Apache/Dubbo-go 在內(nèi)的 Dubbo 生態(tài)被評為 2021 年中國 20 大最活躍社區(qū)之一,位居阿里所有開源項目第二【第一是螞蟻集團的 AntD】

  • Dubbo-go 已經(jīng)成功申報中國科學技術協(xié)會主辦的「 2021“科創(chuàng)中國”開源創(chuàng)新榜評選 」

  • Dubbo-go 開源社區(qū)被 OSCHINA 評為“2021 年度 OSCHINA 優(yōu)秀開源技術團隊”

2 功能介紹

Dubbo-go 目前已經(jīng)達成了其初始使命 “Bridging The Gap Between Java And Go” ,具備了強大的互聯(lián)互通能力,并在云原生方向取得了長足的進展。

  • 互聯(lián)互通能力

Dubbo-go v3.0——打造一流開源 Go 服務框架(dubbo服務啟動)Dubbo-go v3.0——打造一流開源 Go 服務框架(dubbo服務啟動)

Dubbo-go 生態(tài)覆蓋多種網(wǎng)絡協(xié)議:Triple、Dubbo、JSONRPC、grpc、HTTP、HTTP2等。其中 Triple 協(xié)議是 Dubbo3 生態(tài)主推的協(xié)議,是基于 gRPC 的擴展協(xié)議,底層為HTTP2,可與 gRPC 服務互通。相當于在 gRPC 可靠的傳輸基礎上,增加了 Dubbo 的服務治理能力。

Dubbo-go 生態(tài)整體已經(jīng)與 Dubbo、gRPC、Spring Cloud 等生態(tài)互聯(lián)互通,把東西向和南北向數(shù)據(jù)面流量統(tǒng)一于一體:既可以通過 Dubbo-go 進行東西方向服務調(diào)用,也可以在 Dubbo-go-pixiu 中進行南北向流量治理。

  • Devops 能力

Dubbo-go v3.0——打造一流開源 Go 服務框架(dubbo服務啟動)

在服務注冊發(fā)現(xiàn)方面,支持 Nacos 、Zookeeper、ETCD、Consul、Polaris-mesh(騰訊開源) 等服務注冊中間件,并擁有可擴展能力。我們也會根據(jù)用戶使用情況,進一步擴展出用戶需要的實現(xiàn)。

在配置中心方面,開發(fā)者可以使用Nacos、Apollo(攜程開源)、Zookeeper 進行框架/用戶的配置的發(fā)布和拉取。

流量控制方面,我們內(nèi)置實現(xiàn)了固定窗口、滑動窗口等知名的限流算法,同時也支持與第三方成熟的限流熔斷框架 Hystrix,Sentinel-golang 等集成提供治理功能。

分布式事務方面,我們支持 Seata-golang,實現(xiàn)了 TCC 模式分布式事務的調(diào)用。

在鏈路追蹤方面,我們支持基于 Jaeger、ZipKin 的鏈路追蹤能力。在指標可視化方面,我們支持使用 Prometheus 收集框架指標和用戶指標。

3 目標用戶

Dubbo-go 從開始即是面向生產(chǎn)環(huán)境基于用戶的實際需求構(gòu)建開發(fā)的,其目標用戶如下。

  • 廣大 Go 語言微服務開發(fā)者
    如果您是 Go 語言微服務開發(fā)者,希望基于輕量級微服務框架快速開發(fā)自己的服務,那么 Dubbo-go 3.0 將是您很好的一個選擇。

  • Dubbo 生態(tài)多語言使用者
    如果您是 Dubbo 生態(tài)使用者,或者在語言切換的過程中面對兼容性問題,Dubbo-go 在多協(xié)議跨語言互通的場景下會祝您一臂之力。

  • gRPC 使用者
    如果您希望在 gRPC 生態(tài)中增加服務治理能力,Dubbo-go 可幫助您很容易地從 gRPC 接入 Dubbo 生態(tài),在不改變業(yè)務代碼的情況下提供服務治理能力的支持。

  • 云原生架構(gòu)師

如果你在為公司選擇云原生解決方案,dubbogo 3.0 提供的 proxyless service mesh 也是一個很好的選擇,它可以幫助你以最低的成本助你從微服務體系接入 istio 控制面。當然,dubbogo 的控制面能力還需要進一步加強,在未來的 3.1 版本中提供 proxyless 和 proxy 兩套 service mesh 方案。

二 Dubbo-go 3.0 有哪些不同

Apache 軟件基金會頂級項目 Dubbo 開源至今已有十年時間,而作為第三個里程碑,也是云原生時代的全新版本,Dubbo 3.0 的研發(fā)工作最早可以追溯到2018年,作為 Dubbo 多語言生態(tài)的重要一環(huán),Dubbo-go 社區(qū)也在2020年年底,將 3.0 版本作為主推方向。

在官方新特性支持(Triple 協(xié)議、應用級服務發(fā)現(xiàn)、路由規(guī)則、柔性服務等等)的基礎之上,Dubbo-go 社區(qū)針對使用友好性,多語言多生態(tài)的兼容性,用戶編程和使用習慣等方面重點進行了優(yōu)化,與其說 Go 社區(qū)的 3.0 是一次版本對齊的迭代,不如說是一個富有生命力的新開始。

1 新配置方案

  • 配置結(jié)構(gòu)

在 3.0 時代,我們更清晰地規(guī)范出了應用層級配置和接口層級配置的概念,相比于之前版本,在配置結(jié)構(gòu)上進行了重構(gòu)和精簡化。例如開發(fā)者在微服務場景之下,會關注注冊中心地址、協(xié)議、接口名等信息。只需要在配置文件中制定好:

dubbo: registries: ZKRegistry: # 注冊中心配置 Protocol: zookeeper # 注冊中心類型 address: 127.0.0.1:2181 # 注冊中心配置 protocols: triple: # 協(xié)議配置 name: tri # 協(xié)議名 port: 20000 # 服務端監(jiān)聽端口 provider: services: GreeterProvider: # 服務提供者類名 interface: com.dubbogo.sample.DemoServiceName # 接口 ID

  • 配置中心
    在 Dubbo-go 3.0 中,可以將上述框架配置或用戶配置放置在配置中心內(nèi)便于管理。在容器內(nèi)只需要放置配置中心相關信息即可基于該配置啟動框架。

dubbo: config-center: # 配置中心信息 protocol: nacos address: 127.0.0.1:8848 data-id: dubbo-go-samples-configcenter-nacos-server

  • 配置API
    開發(fā)者可以在代碼內(nèi)通過配置 API 生成配置實例結(jié)構(gòu),代碼中生成的配置與從文件內(nèi)讀取的配置等價。參考于 Java Builder 的設計來自于社區(qū)同學們,也代表了開發(fā)者對于接口易用性的訴求。

// 1. 通過 Builder 模式創(chuàng)建配置中心的配置configCenterConfig := config.NewConfigCenterConfigBuilder(). SetProtocol("nacos").SetAddress("127.0.0.1:8848"). SetDataID("dubbo-go-samples-configcenter-nacos-server"). SetGroup("dubbogo"). Build()// 2. 通過 Builder 模式創(chuàng)建根配置rootConfig := config.NewRootConfigBuilder(). SetConfigCenter(configCenterConfig). Build()// 3. 加載配置并啟動框架rootConfig.Load() // 啟動框架

2 Triple PB 協(xié)議

Dubbo-go 在上半年首次發(fā)布的 3.0.0-rc1 版本內(nèi)已經(jīng)支持 Triple 協(xié)議。在此期間,由合作方釘釘部門相關同學提出了較多針對響應時延、穩(wěn)定性等優(yōu)化建議。時至今日,在性能、用戶使用體驗、泛化調(diào)用、異常回傳、PB反射等方面都進行了大量的優(yōu)化工作。

  • 性能優(yōu)化
    將舊版本基于 net/http2 的實現(xiàn)切換為基于 grpc 的 http2 層實現(xiàn)方案。增強了底層傳輸?shù)姆€(wěn)定性和性能。經(jīng)過壓測,4c8g 單機 Provider 可以處理 7萬 tps 的簡單請求。
    我們使用了 3 臺相同規(guī)格機器,一臺作為Server(運行一個 triple-server),一臺作為Client(運行一個triple-server 和triple client) ,一臺作為施壓機向 Client 發(fā)起針對整個鏈路的調(diào)用施壓,并進行數(shù)據(jù)記錄,記錄rt、真實 tps 以及client 和 server 的 CPU 占比數(shù)據(jù)。

TPS

Consumer CPU (%)

Provider CPU(%)

RT(ms)

1000

8.9

4.6

0.6

2000

16.5

8.5

0.6

5000

18.8

10

1

10000

37

18.3

1

20000

72

37

1

25000

77

40

1.2

通過壓測結(jié)果我們可以看到,我們在多跳鏈路和單機上萬級別tps的實驗環(huán)境下,可以保證毫秒級請求時延,并維持合理的 CPU 資源占用率。

  • 反射支持Triple 默認開啟 proto 反射,用戶可以使用 grpc_cli 針對 Triple 協(xié)議暴露的pb序列化服務進行展示和調(diào)試。 在 proto 反射支持的前提下,dubbo-go-pixiu 提供了網(wǎng)關層協(xié)議轉(zhuǎn)換調(diào)用 triple 服務的支持。

$ grpc_cli ls localhost:20000org.apache.dubbogo.samples.api.Greetergrpc.reflection.v1alpha.ServerReflection

  • 用戶編程方式
    新 PB 編譯插件,新版本 dubbo-go 推薦 go 用戶使用 proto 文件定義接口,與 gRPC-go 的使用方式類似。

$ go install github.com/dubbogo/tools/cmd/protoc-gen-go-triple@v1.0.5$ protoc --go_out=. --go-triple_out=. ./helloworld.proto

關于 Triple 協(xié)議,最早是阿里云中間件團隊在 Dubbo3 形成概念的時候就提出的。它相比于上一代 Dubbo 協(xié)議,解決了 Dubbo 生態(tài)與其他云原生架構(gòu)生態(tài)不互通的特點,并且用戶很難理解位于傳輸層的上一代二進制協(xié)議?;?HTTP2 協(xié)議的 gRPC 擴展協(xié)議就很好滴解決了這一問題。第二是點是對 Mesh 等網(wǎng)關型組件不夠友好,在 3.0 時代,我們可以直接通過解析協(xié)議頭來獲取必要的元數(shù)據(jù),并很自然地適配網(wǎng)關對于 HTTP 協(xié)議的轉(zhuǎn)發(fā)實現(xiàn)。

從我們社區(qū)所對接的 Go 語言開發(fā)者考慮,PB 序列化更能適配與他們的開發(fā)習慣,方便從已有 gRPC 服務遷移業(yè)務代碼,還解決了升級過程中跨協(xié)議通信的兼容性問題,而在使用 Triple 協(xié)議后,跨語言互通的優(yōu)勢將進一步體現(xiàn),從“可互通” 轉(zhuǎn)變?yōu)榛诔墒煨蛄谢桨傅摹胺€(wěn)定性互通”,方便用戶業(yè)務更廣泛的擴展,簡單來說,在 Dubbo 時代,用戶進行跨語言互通需要依賴多語言生態(tài)的 Dubbo 協(xié)議實現(xiàn),而在3.0 時代,您可以使用任意語言的 gRPC 實現(xiàn)來與 Dubbo 服務直接進行互通,并共享 gRPC 生態(tài)的一系列組件,例如鏈路追蹤、可視化、cli 工具等等。

因此,我們認為 Triple 的意義并不是一個簡單的擴展協(xié)議,而是一個跨語言、跨生態(tài)概念的實現(xiàn),也是 Dubbo3 的核心 Feature 所在。

3 柔性服務

大規(guī)模分布式系統(tǒng)承載的用戶流量呈指數(shù)級增長,需要使用負載均衡算法將流量均勻地分散到各個機器中,提升集群的吞吐率和資源利用率。

傳統(tǒng)負載均衡算法大多是基于消費者視角,它們共同的局限性是無法根據(jù)服務提供者的當前狀態(tài)動態(tài)調(diào)整分流策略,如 RR、hash 等算法。這些算法總是以盡可能公平的概率分配流量,但在實踐中公平不等于負載均衡。

我們期望的均衡分流策略是:

  • 動態(tài)性能評估:用戶不需要事先設置機器權重,框架在運行時自動評估系統(tǒng)性能,性能好的機器承擔更多流量,性能不足的機器承擔更少的流量;

  • 故障自愈能力:負載均衡算法能夠自動摘除故障的節(jié)點,并具備故障自愈能力;

  • 適當限流策略:避免服務雪崩問題。

柔性服務作為新一代負載均衡策略被引入 Dubbo-go 3.0 中,核心能力包括容量評估和智能分流。

容量評估是評估當前服務提供者狀態(tài)以保持最優(yōu)請求隊列長度。容量評估關注的兩個核心指標是 TPS 和延遲,TPS 評估系統(tǒng)的每秒處理事物的速度,延遲反映用戶等待時間。在評估服務端容量時,要平衡系統(tǒng)吞吐率和用戶等待時間兩者之間的關系,理想狀態(tài)下在系統(tǒng)吞吐率盡可能大的情況下用戶延遲盡可能小。

Dubbo-go v3.0——打造一流開源 Go 服務框架(dubbo服務啟動)

真實容量受到硬件和下游依賴的限制,一次性預測真實容量難度較高。如上圖所示,TPS 在到達最佳值之前,與請求數(shù)呈單調(diào)遞增的關系。在 Dubbo-go 3.0.0 版本中,我們引入了爬山算法(HillClimbing),在調(diào)用過程中逐步逼近系統(tǒng)的最佳承載量。

HillClimbing 算法作用于服務提供者,周期性地判定當前是否處于最佳狀態(tài)并動態(tài)更新系統(tǒng)容量。

探測間隔隨著時間逐步拉長,直至趨向穩(wěn)定。剛啟動時沒有歷史數(shù)據(jù),此時需要頻繁更新容量評估值,保證系統(tǒng)以盡可能快的速度探測到最優(yōu)容量。我們假定最優(yōu)容量短時間內(nèi)不會再強烈波動,且容量評估也會額外消耗資源,因此當趨向穩(wěn)定的時候,算法將逐步延長探測周期。

容量更新策略與 TCP 擁塞控制相似。下面公示表示 HillClimbing 算法預設的兩種增量類型:

Dubbo-go v3.0——打造一流開源 Go 服務框架(dubbo服務啟動)Dubbo-go v3.0——打造一流開源 Go 服務框架(dubbo服務啟動)

其中,lim 表示當前容量,itv 表示當前探測間隔。

在初期采用慢啟動策略,取一個較低水平的值作為容量初始值,但是以較高增量(alpha)向最優(yōu)容量逼近。如果當前容量已經(jīng)增長到 TPS 降低的情況,則使用較低增量(beta)以更精準的方式向最優(yōu)容量移動。

在每次調(diào)用過程結(jié)束后,服務提供者會通過 Dubbo-go 的附件(attachment)特性將最新的預估容量返回給服務消費者,消費者將信息緩存至本地并使用 P2C 算法實現(xiàn)智能分流。

P2C(Pick Two Random Choices)算法作用于服務消費者,它有著更科學的負載均衡策略并廣泛的應用在多個知名開源項目中,如 Linkerd、Rsocket 等。該算法首先隨機選擇兩個節(jié)點,然后對比節(jié)點的剩余容量,選擇其中一個剩余容量較多的節(jié)點作為本次調(diào)用的服務提供者。

柔性服務將在后續(xù)版本中持續(xù)優(yōu)化,與 Dubbo 社區(qū)共同探索出一套適合微服務場景的柔性服務最佳實踐。

4 Pixiu 網(wǎng)關

Dubbo-go-pixiu 網(wǎng)關支持調(diào)用 GO/Java 的 Dubbo 集群。在 Dubbo-go 3.0 的場景下,我們可以通過 Pixiu 網(wǎng)關,在集群外以 HTTP 協(xié)議請求 pixiu 網(wǎng)關,在網(wǎng)關層進行協(xié)議轉(zhuǎn)換,進一步調(diào)用集群內(nèi)的Dubbo-go 服務。

Dubbo-go v3.0——打造一流開源 Go 服務框架(dubbo服務啟動)

用戶調(diào)用 Dubbo-go 服務的 path 為http://$(app_name)/$(service_name)/$(method)。
例如一個proto文件內(nèi)有如下定義:

package org.apache.dubbo.quickstart.samples;service UserProvider { rpc SayHello (HelloRequest) returns (User) {}}message HelloRequest { string name = 1;}

并在dubbo-go 服務啟動時在dubbogo.yml 內(nèi)配置應用名為my-dubbogo-app:

dubbo: application: name: my-dubbogo-app

pixiu 網(wǎng)關即可解析 path 為 my-dubbogo-app/org.apache.dubbo.quickstart.samples.UserProvider/SayHello 的路由,并轉(zhuǎn)發(fā)至對應服務。來自外部HTTP 請求的 body 為 json 序列化的請求參數(shù),例如 {"name":"test"}。我們目前推薦使用 Nacos 作為注冊中心。用戶可以在自己的集群里部署我們的demo,集群最好擁有暴露 lb 類型 service 的能力,從而可以在公網(wǎng)訪問至集群內(nèi)的服務,您也可以直接集群內(nèi)進行請求。

針對您的集群,執(zhí)行:

$ kubectl apply -f https://raw.githubusercontent.com/dubbogo/triple-pixiu-demo/master/deploy/pixiu-triple-demo.yml

會在 dubbogo-triple-nacos 命名空間下創(chuàng)建如下資源,包含三個 triple-server,一個pixiu網(wǎng)關,一個 nacos server。并通過 Servcie 將服務暴露至公網(wǎng)。

namespace/dubbogo-triple-nacos createdservice/dubbo-go-nacos createddeployment.apps/dubbogo-nacos-deployment createddeployment.apps/pixiu createddeployment.apps/server createdservice/pixiu created

獲取 pixiu 公網(wǎng) ip 并進行調(diào)用

$ kubectl get svc -n dubbogo-triple-nacosNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEdubbo-go-nacos ClusterIP 192.168.123.204 <none> 8848/TCP 32spixiu LoadBalancer 192.168.156.175 30.XXX.XXX.XX 8881:30173/TCP 32s

通過curl 調(diào)用 demo 服務,并獲得響應結(jié)果。

$ curl -X POST -d '{"name":"laurence"}' http://30.XXX.XXX.XX:8881/dubbogoDemoServer/org.apache.dubbo.laurence.samples.UserProvider/SayHello{"name":"Hello laurence","id":"12345","age":21}

5 運維能力與工具

  • 可觀測性

相比于上一版本的 Dubbo-go,本次發(fā)布在原來Dubbo協(xié)議的可觀測性的基礎上,提供了基于 Triple 協(xié)議可觀測性支持,適配于 Jaeger 的鏈路追蹤展示。對于數(shù)據(jù)上報,我們在框架中為之提供了接口,方便用戶實時上報業(yè)務埋點數(shù)據(jù),并默認開啟 promehteus 的拉模式數(shù)據(jù)收集的支持。

框架對于 RPC調(diào)用相關信息,例如請求RT,接口名、方法名等數(shù)據(jù),也提供了默認的 metrics 字段,供用戶收集和統(tǒng)計。

  • 日志

本次發(fā)版對日志模塊進行了較大的改變和更新,用戶可以根據(jù)需求配置日志打印的級別、分片、文件輸出、保留時常等信息,并支持用戶自定義日志組件。

  • cli工具

Dubbo-go 3.0 會針對命令行工具進行重點開發(fā),目前社區(qū)已提供用于發(fā)起 Dubbo RPC 調(diào)用的dubbo-go-cli;用于編譯 pb 文件的protoc-gen-go-triple 插件;并且 Dubbo-go 已經(jīng)適配 grpc_cli 工具的調(diào)試,在未來,我們會在健康檢查、服務信息獲取、RPC 調(diào)用調(diào)試、框架代碼初始化和接口編譯、服務部署等方面,進一步增強命令行工具的能力,以提供更完備的服務治理和運維生態(tài)。

三 用戶視角的 Dubbo-go

作為一款站在用戶角度設計的框架,我們更希望給予廣大用戶更簡潔,更直觀,更“約定大于配置”的使用體驗,因此在研發(fā)階段,我們重點進行了多輪的配置迭代以及 samples 倉庫的建設和維護,為用戶提供了更為精簡的概念和重點突出的 samples 示例。

1 面向接口和配置的開發(fā)

Dubbo-go 3.0 為開發(fā)者屏蔽掉了底層實現(xiàn)細節(jié),只需要關注幾個關鍵點即可使用本框架進行開發(fā),以 triple 服務為例。

  • 框架配置文件:dubbogo.yaml
    框架啟動所依賴的配置項。

  • 接口定義
    編寫 proto 文件,并使用提供的 protoc-gen-go-triple 插件以及官方 protoc-gen-go 插件進行編譯。

  • 接口代碼實現(xiàn)
    編寫服務實現(xiàn),并使用框架進行啟動即可。

接口、實現(xiàn)、配置。是常見 go 微服務的基本依賴元素。Dubbo-go 提供一整套微服務的解決方案,并提供豐富的服務治理能力和可擴展能力,從而可以讓用戶容易地接入使用。

2 代碼示例倉庫 dubbo-go-samples

我們在apache/dubbo-go-samples 倉庫的 master 分支維護了豐富的 dubbo-go 3.0 的代碼示例。包括多種協(xié)議的 rpc 調(diào)用,多種注冊中心的支持,多種配置中心的使用,以及泛化調(diào)用、配置API、日志、數(shù)據(jù)上報、鏈路追蹤等運維能力的展示,幾乎框架擁有的全部能力都可以在 samples 倉庫中找到對應的常見用例。用戶也可以在1.5分支找到適配與dubbo-go 1.5.x 的示例。

通過 3.0 前期階段對于配置重構(gòu)和大幅度的用戶友好性優(yōu)化,目前 samples 倉庫內(nèi)的代碼和配置都已經(jīng)高度精簡化,從而突出單個模塊的能力。開發(fā)者可以下載倉庫后直接按照server 到 client 的順序來啟動一個示例模塊的服務,即可體驗框架提供的能力。

samples 倉庫在迭代過程中也被賦予了更多的功能,社區(qū)開發(fā)同學都會熟悉,我們將框架倉庫、samples 倉庫通過 ci 集成測試的方式結(jié)合起來,保證框架開發(fā)者每次提交的代碼都能通過所有用例的 e2e 測試,從而保障開發(fā)質(zhì)量,提高迭代的效率。

四 社區(qū)協(xié)作

作為一個能力功能非常豐富的服務平臺,dubbogo 社區(qū)很重視與各大開源社區(qū)特別是阿里系開源產(chǎn)品社區(qū)以及各個公司的合作。

  • Nacos 社區(qū)

早期 Dubbo-go 社區(qū)就與 Nacos 社區(qū)展開密切合作,由多位核心貢獻者參與 Dubbo-go 研發(fā)支持中,在 3.0.0 版本中,增加了多位 Nacos 社區(qū)成員,在社區(qū)迭代中作出了許多建設性的建議和貢獻。

點擊鏈接查看原文Dubbo-go v3.0 正式發(fā)布 ——打造國內(nèi)一流開源 Go 服務框架,關注公眾號【阿里技術】獲取更多福利!

版權聲明:本文內(nèi)容由阿里云實名注冊用戶自發(fā)貢獻,版權歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權,亦不承擔相應法律責任。具體規(guī)則請查看《阿里云開發(fā)者社區(qū)用戶服務協(xié)議》和《阿里云開發(fā)者社區(qū)知識產(chǎn)權保護指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權投訴表單進行舉報,一經(jīng)查實,本社區(qū)將立刻刪除涉嫌侵權內(nèi)容。

相關新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部