博客 / 詳情

返回

Apache DolphinScheduler 新增 gRPC 任務插件 | 開源之夏成果總結

開源之夏DS

今年的開源之夏活動已接近尾聲,Apache DolphinScheduler 社區的開發者在經過漫長的開發過程收穫了自己的成果,同時為 Apache DolphinScheduler 帶來了全新的任務插件 gRPC。

這項成果是由來自北京交通大學電氣工程專業的優秀同學趙海波帶來的,今天我們就來看看他是如何在本次活動中圓滿完成開發任務的吧!

個人介紹

趙海波,北京交通大學 電氣工程專業
導師:譚恆亮
GitHub ID:npofsi
個人感興趣或擅長的研究領域:時序數據分析,模型優化控制
興趣愛好:板繪、美食

項目名稱

  • 為Apache DolphinScheduler 新增 gRPC 任務插件

    項目簡介

    在OSPP2025中,我主要承擔了“為Apache DolphinScheduler 新增 gRPC 任務插件”的工作,這為 DolphinScheduler 添加了與 gRPC 接口進行交互的任務節點。

與 DolphinSchedulerHTTP 任務訪問外部 HTTP 接口相似,這個插件主要用於訪問外部 gRPC 服務器提供的網絡接口,並參考了 HTTP 插件,使用相似的配置參數,結合 DolphinScheduler 插件的 SPI 進行設計。

DolphinScheduler 作為一個進入 CNCF Landscape 的分佈式工作流調度系統,在雲原生的場景中得到了廣泛應用,但目前缺少對雲原生場景中普遍存在的 gRPC 協議的支持,因而催生了本項目的需求。

開發路徑

我以此需求為基礎,考慮用户實際工作流中調用 gRPC 服務的過程,在導師的指導下結合了接口調試工具的交互邏輯,提供了 schema 和請求消息分別設置的交互方式,在任務執行時進行合併。也因此設計了將 protobuf 和數據在前端預處理、在後端合併的插件實現方式。

配置該 gRPC 任務時,插件在前端接收 gRP C服務入口點、gRPC的protobuf服務定義、請求用消息和SSL等參數,並在保存時將 protobuf 經 protobuf.js 編譯為特定描述傳遞到後端。運行該任務時,在後端按照該描述組裝 protobuf descriptor(protobuf內部用於描述消息的二進制格式),然後經相關格式化工具將用户提供的 JSON 格式消息合併到 protobuf descriptor,之後經用户配置的服務入口請求相應的gRPC 調用。

開發成果

  • 完成 DolphinScheduler gRPC 插件設計與開發,可以實現在 java 運行時中動態發起 gRPC 調用,提供了和 gRPC 調試場景相似的配置模式,可以複用相關配置文件和測試消息。
  • 完成單元測試與集成測試,覆蓋主要功能以及邊界情況。
  • 提供詳細插件使用文檔、參數列表與示例。

    主要技術點

    開發這個插件時遇到的主要技術點是 gRPC 動態調用的實現。

區別於在 RESTful API 中使用的 schema-on-read 的 JSON 格式,gRPC 使用的是 schema-on-write 的 protobuf 定義,其格式由預先準備的定義文件決定,而不是跟隨數據一起傳遞,這樣可以減少傳輸的載荷,提高效率,並且具有更高的一致性和更多編譯期檢查,但是需要預先編譯描述文件到二進制格式,一般情況下無法在運行時動態調整。

在這個插件中我使用了 protobuf.js 作為編譯器,將protobuf 在前端提前進行編譯,任務數據同時保存protobuf 源代碼和中間描述,在後端根據中間描述直接構建二進制格式,接觸了對 protoc 的依賴,使得用户可以在無需安裝 protoc 的情況下發起 gRPC 請求。

項目開發完畢後,為了更好地瞭解同學們在參與開源之夏項目中的開發心得和感受,Apache DolphinScheduler 社區對同學們進行了簡短的採訪,以下為採訪實錄

Q1:在眾多項目中,為什麼選擇參與Apache DolphinScheduler的項目?

A: DolphinScheduler 作為一個分佈式的工作流調度系統,其架構設計本身就非常有吸引力。首先DS涉及了的任務調度、分佈式、雲原生等多種概念,這是我希望想要深入學習的領域。而且gRPC 是現代微服務架構中首選的 RPC 框架,一直以來都想要深入的學習一下這項技術。此外,DolphinScheduler 社區非常完善,在申請階段,我與社區的導師進行了溝通,他們非常耐心,能清晰地闡述項目目標和預期,還有豐富的説明文檔、成熟的社區制度和友好的溝通體驗,讓我對順利完成項目擁有足夠的信心。

Q2:Apache DolphinScheduler的項目與你的學業有什麼交集嗎?

A: 我的學業背景是電氣工程,主要聚焦於新能源系統的控制與優化。在我的研究領域中,新能源電網本身就是一個複雜的、需要高度協同的分佈式系統,所以我很注重雲原生相關的技術發展,國家電網就有使用 kubernetes 管理大量的監測節點。因此,我最希望能夠在開源社區學習更多的知識,這些知識可以應用到我所在的領域中。

此外,開源社區為我提供了一個與優秀開發者思維碰撞的平台,我非常享受這種圍繞具體技術問題,與來自不同領域的同伴進行深度討論、共同迭代解決方案的氛圍。十分希望能夠結識志同道合的夥伴、發現新的機遇。

Q3:參與這個項目給你的學業和未來個人規劃帶來了哪些影響?對於這些影響,您有什麼感受和評價?

A: 參加這次項目最主要還是學習了很多 gRPC 相關的知識,之後也會考慮把 gRPC 用在其他的系統當中,也對 Apache DolphinScheduler 這樣的工作流系統有了更深的理解,也學習到了很多測試的知識。然後是非常多的參與感,在導師的熱情鼓勵下能夠完成從提 RFC 到 ISSUE 再到 PR 合併的整個流程,這件事情非常讓我滿足。

Q4:參與這個項目的過程中遇到的最大的挑戰是什麼?您是如何克服的?

A: 在整個項目過程中,我遇到的最大挑戰,並非是某個技術難題,而是如何平衡時間,我的主要時間精力還是需要投入到實驗室的研究任務中,這意味着參與開源項目依賴於晚上和週末的時間。不過社區持續的、正向的回饋構成了我堅持下來的核心動力。參與社區所帶來的成就感和歸屬感、“創造價值”並被認可的喜悦,是一種強大的內驅力。

Q5:您參與開源有多長時間了?喜歡開源嗎?開源給你帶來了哪些改變?

A: 我最早接觸開源社區是買了一本有關前端 JavaScript 優化的書籍,裏面介紹了一些技術和項目,當時雖然沒有實際參與到社區裏,也瞭解了許多相關的知識。後來實際用到了一些由開源社區產出的軟件,並且領會到了很多相關的理念之後,就嘗試參加了進來。參加開源的過程還是十分快樂的,而且相比於閉門造車,成果的共享使得個人的貢獻得以放大,進而獲得更多反饋。而我也會在使用軟件時更加關注上游的事情,學習到了很多寶貴的經驗知識。

Q6:Apache DolphinScheduler社區貢獻給您的第一印象是怎樣的?您希望在這裏有何收穫?社區還有哪些地方你覺得可以改進?

A: 我的第一印象還是在申請階段和 Mentor 的互動,當時社區導師十分友好,細心地解答了我許多問題。之後在撰寫申請、構建軟件時也藉由社區豐富的文檔資源而順利完成了環境的搭建和軟件的運行,從這些地方都可以看出社區的專業、成熟。

通過這次 OSPP 我也學到了很多軟件開發的知識,我也希望能從這裏學到更多開源社區運作的原理。社區目前已經非常成熟,個人感覺文檔方面還可以進一步改進,在插件開發的過程中發現相關的 SPI 文檔內容較為滯後,這可能會影響 Apache DolphinScheduler 在功能化插件方面的貢獻進度,希望未來能夠進一步完善。

Q7:您後續還會持續在Apache DolphinScheduler社區活躍嗎?

A: 會的,尤其是 gRPC 任務插件的目前的維護工作,考慮進一步提升該插件的可維護性,替換掉一些可維護性較低的組件。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.