專訪|GraphScope 社區(qū) 王哲:將開源社區(qū)的熱情和溫暖傳遞下去

開源之夏專訪持續(xù)開放中,歡迎已從開源之夏畢業(yè)或正在參與開源之夏活動的學(xué)生、導(dǎo)師一同加入專訪行動,掃描文末二維碼填寫專訪問卷,與大家分享你眼中的開源之夏!
本期采訪人物是開源之夏 2023?活動?GraphScope 社區(qū)中選學(xué)生王哲同學(xué),他所承擔(dān)的項目是?為 GraphScope 的圖存檔格式 GraphAr 的讀寫提供 JAVA SDK。
項目鏈接:https://summer-ospp.ac.cn/org/prodetail/2313e0401

# 關(guān)于王哲
OSPP:請簡單介紹一下自己。
王哲:嗨,我是王哲,社區(qū)里大家叫我 John,西南民族大學(xué)計算機科學(xué)與工程學(xué)院 22 級學(xué)生。我喜歡編程、折騰和思考,熱愛開源。目前是標準化圖存貯格式?GraphAr[1]?Java SDK 的開發(fā)者、維護者。
OSPP:據(jù)了解,你參加本屆開源之夏時正在讀大一,在這之前有接觸過開源么?參與開源是一種什么體驗?
王哲:如果說使用開源代碼就是接觸開源,想必每個人都接觸過開源吧(笑)。
不過在此之前,我確實更直接地接觸過開源。大一寒假參加了學(xué)校的算法訓(xùn)練營,我每周都需要寫算法的總結(jié)和錯題,我嘗試了很多現(xiàn)有的平臺,它們或多或少地有我不滿意的地方,我卻無法根據(jù)我的需求自由地調(diào)整。最后我通過 Hexo 搭建了自己的博客,并把它托管在 GitHub 上。
這次開源之夏是我第一次參與開發(fā)一個實際的項目,也是我第一次和別人協(xié)作。和課上的小 Demo 不同,一個實際的項目常常依賴于很多現(xiàn)有的項目,同時也可能作為其他項目的依賴,這個整合、抽象的過程讓我真切地感受到計算機技術(shù)的發(fā)展。第一次向其他人(社區(qū))的倉庫提交 PR,哪怕只是簡單地修改文檔,也讓我既興奮,又緊張。社區(qū)中的開發(fā)者總是很耐心地回答我的問題,在 PR 下面表示感謝和鼓勵,有時也會提出改進的意見,這些都讓我覺得很溫暖。

# 參與開源之夏與開源
OSPP:最初是如何了解到開源之夏?為什么決定參與活動呢?第一次參與開源之夏活動的感受如何?
王哲:我原本就對開源和開發(fā)實際項目感興趣,也一直在留意相關(guān)的機會。逛 GitHub 的時候,看到有人想找一起參加 GSoC、開源之夏這類開源活動的朋友。我進一步了解之后,發(fā)現(xiàn)開源之夏就是我一直在尋找的機會——結(jié)合了開源和開發(fā),有豐厚的報酬,提供了一個“名正言順”的參與開源和留在社區(qū)的機會,每一個項目都有對應(yīng)的導(dǎo)師……這些都非常吸引我。
這次開發(fā)的過程很充實,開發(fā)的經(jīng)歷也讓我收獲很多。中途遇到難以解決的問題也會焦慮和煩躁,擔(dān)心無法按時完成,但每次一步一步地解決問題后,都會長舒一口氣,心中很有成就感。我不僅學(xué)到了很多具體的工具和技術(shù),還提升了自己檢索信息、解決問題、溝通協(xié)作的能力。
OSPP:請簡單介紹一下你在本屆活動中承擔(dān)的開源項目?在項目開發(fā)過程中你有哪些收獲?
王哲:GraphAr 為圖數(shù)據(jù)定義了一套標準化的、獨立于計算 / 存儲系統(tǒng)的文件格式,并提供了一系列接口用來生成、訪問和轉(zhuǎn)換這些格式化的文件。GraphAr 的三大特點是方便、高效和通用。
GraphAr 原先只提供了 C++ 和 Spark 的 SDK,與所追求的通用仍有一定距離。JAVA 在圖數(shù)據(jù)庫和圖計算領(lǐng)域具有廣泛的應(yīng)用場景,為 GraphAr 添加 JAVA SDK 有助于提高其通用性。我選擇了基于 C++ 和 FFI 的實現(xiàn)方案,它具有高性能、易開發(fā)、易維護、易擴展等優(yōu)點。
收獲主要在兩個方面,一個是能力方面,我提高了解決問題、檢索信息、溝通交流等能力;另一個是學(xué)習(xí)了具體的工具,如 CMake、Maven、JNI,也更熟悉了 Git 和 GitHub。
關(guān)于?GraphAr
GraphAr(Graph Archive,簡稱 GAR)為圖數(shù)據(jù)定義了一套標準化的、獨立于計算 / 存儲系統(tǒng)的文件格式,并提供了一系列接口用來生成、訪問和轉(zhuǎn)換這些格式化的文件。GraphAr 可以幫助各類圖計算應(yīng)用或現(xiàn)有系統(tǒng)方便快捷地構(gòu)建和訪問圖數(shù)據(jù),它既可以作為圖計算應(yīng)用的直接數(shù)據(jù)源,也可以服務(wù)于圖數(shù)據(jù)的導(dǎo)入 / 導(dǎo)出和持久化存儲,減少各類圖系統(tǒng)之間協(xié)同工作的開銷。
倉庫地址:https://github.com/alibaba/GraphAr
OSPP:在項目開發(fā)過程中有遇到什么困難或挑戰(zhàn)么?遇到問題你是如何解決的?這些問題經(jīng)歷為你帶來了什么收獲?
王哲:有三個我記憶比較深刻的困難。
(1)FastFFI 環(huán)境配置以及使用問題:
FastFFI 是一個跨 C++ 與 Java 的項目,需要依賴 LLVM11。我先通過 WSL 配置好 Linux 環(huán)境,但是由于缺乏相關(guān)經(jīng)驗,在安裝 LLVM11 這一步卡住了一周多。后來通過 GitHub issue 與開發(fā)者交流,并得到了相關(guān)的指導(dǎo)[2],成功配置好了環(huán)境。我也從中學(xué)習(xí)到:配置環(huán)境可以參考項目中給出的 Dockerfile 和 CI 文件、提問時應(yīng)該附上相關(guān)的環(huán)境和錯誤日志。
此外,我在使用 FastFFI 的過程中碰到了一些問題,我先給開發(fā)者發(fā)送郵件請求幫助,后來加上了釘釘以便更好地交流:


我在解決問題的過程中,會把與有價值的問題記錄收集起來,以便為 FastFFI 貢獻一些文檔或是常見問題的解決方案,以此作為反饋:

(2)學(xué)習(xí)項目構(gòu)建工具:
本人沒有大型項目的開發(fā)經(jīng)驗,也不熟悉 CMake、Maven 等常見的項目構(gòu)建工具。一方面,GraphAr 和 FastFFI 使用了這些工具,因此要求對這兩個項目構(gòu)建工具有基本的了解,另一方面,我選取的方案需要同時調(diào)用 C++ 代碼和 Java 代碼,這又離不開用于生成動態(tài)庫的 CMake 和用于管理 Jar 依賴的 Maven。
我先是通過視頻了解學(xué)習(xí)這兩個項目構(gòu)建工具,然后在開發(fā)過程中學(xué)習(xí)現(xiàn)有的項目是如何使用的。遇到特殊的需求時,先通過 ChatGPT、搜索引擎、官方文檔等工具尋找答案,如果嘗試之后仍然無法解決問題,就會請教導(dǎo)師或有關(guān)的開發(fā)者。
(3)跨語言對象的轉(zhuǎn)換
Apache Arrow 定義了一系列跨語言的、高效的列式內(nèi)存格式。GraphAr 中的許多數(shù)據(jù)就是使用 arrow::Table 存儲的。由于我采用了 FFI 的方案,因此在向 GraphAr 中寫入數(shù)據(jù)時,需要把 arrow Java 的對象轉(zhuǎn)換為 arrow C++ 的對象。
但實際上,Apache arrow 不同語言的 SDK 仍然會有差異,例如 C++ 的 arrow::Table 使用了獨屬于 C++ 的實現(xiàn)方式,加之本人之前對 Apache arrow 并不熟悉,這些都使得轉(zhuǎn)換工作頗具阻礙。
我大量地查閱了 Apache Arrow 的文檔,必要時閱讀實現(xiàn)的源碼,在加上導(dǎo)師一定程度的指導(dǎo),我最終完成了把原生 arrow Java 對象寫入 GraphAr 的功能。導(dǎo)師的指導(dǎo)也讓我學(xué)到一個技巧:如果不知道一個接口的具體用法,可以在單元測試中檢索,看看開發(fā)者是怎樣調(diào)用的。
開發(fā)的經(jīng)歷讓我總結(jié)出一套解決問題的方法論,我相信這有助于更快、更好地解決問題:
途徑:ChatGPT —— 搜索引擎 —— 官方文檔 —— 詢問有關(guān)技術(shù)人員。
思路:明確問題和需求 —— 拆分為更小的問題 —— 逐一解決。
流程:

OSPP:你眼中的?GraphScope/GraphAr 是一個什么樣的開源社區(qū)?
王哲:GraphScope 給我最大的感覺就是優(yōu)秀、溫暖。
GraphScope 有完備的面向用戶和開發(fā)者的文檔、明確的社區(qū)守則和代碼規(guī)范,清晰的開發(fā)規(guī)劃,為用戶提供在線學(xué)習(xí)體驗的 playground,還建立了釘釘、郵件列表、Slack 等社區(qū)交流方式。GraphScope 可以說是一個圖場景的生態(tài),我所參與的 GraphAr 項目是 GraphScope 生態(tài)下的一個子項目,有著比較完善的開源協(xié)作流程,日常通過郵件列表,Issue和 Pull Request 進行溝通,每周固定在周二舉行開發(fā)者社區(qū)例會,方便開發(fā)者和用戶進行交流。這些都體現(xiàn)出 GraphScope 對項目細致的規(guī)劃和對社區(qū)認真的管理。社區(qū)里的開發(fā)者也都十分優(yōu)秀,有很強的業(yè)務(wù)與工程能力,和他們交流總能讓我學(xué)到很多。
FastFFI 和 GraphScope 同屬于阿里巴巴的開源項目,二者有重合的開發(fā)者。我的導(dǎo)師為我提供了向他們請教的機會,同時這些開發(fā)者也會十分耐心地回答我的問題。對于提交的 PR,開發(fā)者們也毫不吝嗇對于貢獻者的鼓勵,同時也會給出改進的建議。這些都讓我感受到社區(qū)的熱情和溫暖,我希望繼續(xù)參與有關(guān)項目的開發(fā)、繼續(xù)參與開源,將這些熱情和溫暖繼續(xù)傳遞下去。


關(guān)于?GraphScope?社區(qū)
GraphScope 是阿里巴巴達摩院智能計算實驗室研發(fā)并開源的一站式大規(guī)模分布式圖計算系統(tǒng),支持圖交互查詢、圖分析、圖學(xué)習(xí),通過 Python 客戶端,能十分方便的完成圖計算相關(guān)任務(wù)以及對接上下游工作流,具有一站式、開發(fā)便捷、性能極致等特點。GraphScope 具有高效的跨引擎內(nèi)存管理,在業(yè)界首次支持 Gremlin 分布式編譯優(yōu)化,同時支持算法的自動并行化和支持自動增量化處理動態(tài)圖更新,提供了企業(yè)級場景的極致性能。在實際應(yīng)用中,GraphScope 已經(jīng)證明能在多個關(guān)鍵互聯(lián)網(wǎng)領(lǐng)域(如風(fēng)控,電商推薦,廣告,網(wǎng)絡(luò)安全,知識圖譜等)實現(xiàn)重要的業(yè)務(wù)新價值。
官網(wǎng):https://graphscope.io/
順便,也想在這里給我們的 GraphAr 社區(qū)打個廣告(笑)
GraphAr 是從 GraphScope 孵化出的一個子項目,旨在針對不同場景下的圖數(shù)據(jù)建立一套自帶圖語義的,獨立于計算和系統(tǒng)之間的標準化圖格式。這是一個新興的項目,沒有太大的負擔(dān),非常適合對開源感興趣的同學(xué)參與和體驗開源項目的開發(fā)流程。為了標準化的中立性,未來 GraphAr 也考慮加入 Apache 孵化器中。所以 GraphAr 社區(qū)也非常希望任何對圖領(lǐng)域或開源感興趣的同學(xué)可以加入我們的社區(qū),一起共同建設(shè)這個社區(qū)。
GraphAr 社區(qū):https://github.com/alibaba/GraphAr
# 寄語
OSPP:在參與開源項目開發(fā)實踐工作過程中提升技能與你在高校課堂上學(xué)習(xí)知識有什么不同么?
王哲:挺不一樣的,我覺得最大的區(qū)別在于開發(fā)項目需要一個人提前設(shè)計、上手編程、解決各種各樣的問題,中途也會用到很多其他的工具和依賴。如果在一個社區(qū)中,也許還需要與他人協(xié)作。這些都是課堂難以帶來的。
OSPP:有什么話想對計劃參加開源之夏活動的學(xué)弟學(xué)妹們說?
王哲:第一是技術(shù):我在申請項目時最大的困難在于我自身技術(shù)有限,很多選題都看不懂,更不要說開發(fā)了。希望學(xué)弟學(xué)妹可以提早了解到工業(yè)界或是開源項目中常用的技術(shù),并以此多積累。
第二是嘗試:勇敢地抓住機會、參與開源,即使沒有任何項目經(jīng)驗也可以多嘗試(我就是這樣的例子)。要知道,沒有誰生來就經(jīng)驗豐富,都是在實踐中累積出來的。
第三是總結(jié):要意識到自己在開發(fā)的過程中有哪些地方做的不錯、那些地方做的不夠好、怎樣改進,從而把具體的經(jīng)驗抽象成更普適的能力。
END
專欄編輯:大夢
校對:校大山、王哲
制圖:GoodWhite

[1] https://github.com/alibaba/GraphAr
[2] https://github.com/alibaba/fastFFI/issues/38

專欄投稿請聯(lián)系開源小助手:kaiyuanzhixia 或?qū)诰庉嫞篐ungryfish34(備注“專欄投稿”加速通過),或填寫下方專訪信息收集問卷。
