专访|GraphScope 社区 王哲:将开源社区的热情和温暖传递下去

开源之夏专访持续开放中,欢迎已从开源之夏毕业或正在参与开源之夏活动的学生、导师一同加入专访行动,扫描文末二维码填写专访问卷,与大家分享你眼中的开源之夏!
本期采访人物是开源之夏 2023 活动 GraphScope 社区中选学生王哲同学,他所承担的项目是 为 GraphScope 的图存档格式 GraphAr 的读写提供 JAVA SDK。
项目链接:https://summer-ospp.ac.cn/org/prodetail/2313e0401

# 关于王哲
OSPP:请简单介绍一下自己。
王哲:嗨,我是王哲,社区里大家叫我 John,西南民族大学计算机科学与工程学院 22 级学生。我喜欢编程、折腾和思考,热爱开源。目前是标准化图存贮格式 GraphAr[1] Java SDK 的开发者、维护者。
OSPP:据了解,你参加本届开源之夏时正在读大一,在这之前有接触过开源么?参与开源是一种什么体验?
王哲:如果说使用开源代码就是接触开源,想必每个人都接触过开源吧(笑)。
不过在此之前,我确实更直接地接触过开源。大一寒假参加了学校的算法训练营,我每周都需要写算法的总结和错题,我尝试了很多现有的平台,它们或多或少地有我不满意的地方,我却无法根据我的需求自由地调整。最后我通过 Hexo 搭建了自己的博客,并把它托管在 GitHub 上。
这次开源之夏是我第一次参与开发一个实际的项目,也是我第一次和别人协作。和课上的小 Demo 不同,一个实际的项目常常依赖于很多现有的项目,同时也可能作为其他项目的依赖,这个整合、抽象的过程让我真切地感受到计算机技术的发展。第一次向其他人(社区)的仓库提交 PR,哪怕只是简单地修改文档,也让我既兴奋,又紧张。社区中的开发者总是很耐心地回答我的问题,在 PR 下面表示感谢和鼓励,有时也会提出改进的意见,这些都让我觉得很温暖。

# 参与开源之夏与开源
OSPP:最初是如何了解到开源之夏?为什么决定参与活动呢?第一次参与开源之夏活动的感受如何?
王哲:我原本就对开源和开发实际项目感兴趣,也一直在留意相关的机会。逛 GitHub 的时候,看到有人想找一起参加 GSoC、开源之夏这类开源活动的朋友。我进一步了解之后,发现开源之夏就是我一直在寻找的机会——结合了开源和开发,有丰厚的报酬,提供了一个“名正言顺”的参与开源和留在社区的机会,每一个项目都有对应的导师……这些都非常吸引我。
这次开发的过程很充实,开发的经历也让我收获很多。中途遇到难以解决的问题也会焦虑和烦躁,担心无法按时完成,但每次一步一步地解决问题后,都会长舒一口气,心中很有成就感。我不仅学到了很多具体的工具和技术,还提升了自己检索信息、解决问题、沟通协作的能力。
OSPP:请简单介绍一下你在本届活动中承担的开源项目?在项目开发过程中你有哪些收获?
王哲:GraphAr 为图数据定义了一套标准化的、独立于计算 / 存储系统的文件格式,并提供了一系列接口用来生成、访问和转换这些格式化的文件。GraphAr 的三大特点是方便、高效和通用。
GraphAr 原先只提供了 C++ 和 Spark 的 SDK,与所追求的通用仍有一定距离。JAVA 在图数据库和图计算领域具有广泛的应用场景,为 GraphAr 添加 JAVA SDK 有助于提高其通用性。我选择了基于 C++ 和 FFI 的实现方案,它具有高性能、易开发、易维护、易扩展等优点。
收获主要在两个方面,一个是能力方面,我提高了解决问题、检索信息、沟通交流等能力;另一个是学习了具体的工具,如 CMake、Maven、JNI,也更熟悉了 Git 和 GitHub。
关于 GraphAr
GraphAr(Graph Archive,简称 GAR)为图数据定义了一套标准化的、独立于计算 / 存储系统的文件格式,并提供了一系列接口用来生成、访问和转换这些格式化的文件。GraphAr 可以帮助各类图计算应用或现有系统方便快捷地构建和访问图数据,它既可以作为图计算应用的直接数据源,也可以服务于图数据的导入 / 导出和持久化存储,减少各类图系统之间协同工作的开销。
仓库地址:https://github.com/alibaba/GraphAr
OSPP:在项目开发过程中有遇到什么困难或挑战么?遇到问题你是如何解决的?这些问题经历为你带来了什么收获?
王哲:有三个我记忆比较深刻的困难。
(1)FastFFI 环境配置以及使用问题:
FastFFI 是一个跨 C++ 与 Java 的项目,需要依赖 LLVM11。我先通过 WSL 配置好 Linux 环境,但是由于缺乏相关经验,在安装 LLVM11 这一步卡住了一周多。后来通过 GitHub issue 与开发者交流,并得到了相关的指导[2],成功配置好了环境。我也从中学习到:配置环境可以参考项目中给出的 Dockerfile 和 CI 文件、提问时应该附上相关的环境和错误日志。
此外,我在使用 FastFFI 的过程中碰到了一些问题,我先给开发者发送邮件请求帮助,后来加上了钉钉以便更好地交流:


我在解决问题的过程中,会把与有价值的问题记录收集起来,以便为 FastFFI 贡献一些文档或是常见问题的解决方案,以此作为反馈:

(2)学习项目构建工具:
本人没有大型项目的开发经验,也不熟悉 CMake、Maven 等常见的项目构建工具。一方面,GraphAr 和 FastFFI 使用了这些工具,因此要求对这两个项目构建工具有基本的了解,另一方面,我选取的方案需要同时调用 C++ 代码和 Java 代码,这又离不开用于生成动态库的 CMake 和用于管理 Jar 依赖的 Maven。
我先是通过视频了解学习这两个项目构建工具,然后在开发过程中学习现有的项目是如何使用的。遇到特殊的需求时,先通过 ChatGPT、搜索引擎、官方文档等工具寻找答案,如果尝试之后仍然无法解决问题,就会请教导师或有关的开发者。
(3)跨语言对象的转换
Apache Arrow 定义了一系列跨语言的、高效的列式内存格式。GraphAr 中的许多数据就是使用 arrow::Table 存储的。由于我采用了 FFI 的方案,因此在向 GraphAr 中写入数据时,需要把 arrow Java 的对象转换为 arrow C++ 的对象。
但实际上,Apache arrow 不同语言的 SDK 仍然会有差异,例如 C++ 的 arrow::Table 使用了独属于 C++ 的实现方式,加之本人之前对 Apache arrow 并不熟悉,这些都使得转换工作颇具阻碍。
我大量地查阅了 Apache Arrow 的文档,必要时阅读实现的源码,在加上导师一定程度的指导,我最终完成了把原生 arrow Java 对象写入 GraphAr 的功能。导师的指导也让我学到一个技巧:如果不知道一个接口的具体用法,可以在单元测试中检索,看看开发者是怎样调用的。
开发的经历让我总结出一套解决问题的方法论,我相信这有助于更快、更好地解决问题:
途径:ChatGPT —— 搜索引擎 —— 官方文档 —— 询问有关技术人员。
思路:明确问题和需求 —— 拆分为更小的问题 —— 逐一解决。
流程:

OSPP:你眼中的 GraphScope/GraphAr 是一个什么样的开源社区?
王哲:GraphScope 给我最大的感觉就是优秀、温暖。
GraphScope 有完备的面向用户和开发者的文档、明确的社区守则和代码规范,清晰的开发规划,为用户提供在线学习体验的 playground,还建立了钉钉、邮件列表、Slack 等社区交流方式。GraphScope 可以说是一个图场景的生态,我所参与的 GraphAr 项目是 GraphScope 生态下的一个子项目,有着比较完善的开源协作流程,日常通过邮件列表,Issue和 Pull Request 进行沟通,每周固定在周二举行开发者社区例会,方便开发者和用户进行交流。这些都体现出 GraphScope 对项目细致的规划和对社区认真的管理。社区里的开发者也都十分优秀,有很强的业务与工程能力,和他们交流总能让我学到很多。
FastFFI 和 GraphScope 同属于阿里巴巴的开源项目,二者有重合的开发者。我的导师为我提供了向他们请教的机会,同时这些开发者也会十分耐心地回答我的问题。对于提交的 PR,开发者们也毫不吝啬对于贡献者的鼓励,同时也会给出改进的建议。这些都让我感受到社区的热情和温暖,我希望继续参与有关项目的开发、继续参与开源,将这些热情和温暖继续传递下去。


关于 GraphScope 社区
GraphScope 是阿里巴巴达摩院智能计算实验室研发并开源的一站式大规模分布式图计算系统,支持图交互查询、图分析、图学习,通过 Python 客户端,能十分方便的完成图计算相关任务以及对接上下游工作流,具有一站式、开发便捷、性能极致等特点。GraphScope 具有高效的跨引擎内存管理,在业界首次支持 Gremlin 分布式编译优化,同时支持算法的自动并行化和支持自动增量化处理动态图更新,提供了企业级场景的极致性能。在实际应用中,GraphScope 已经证明能在多个关键互联网领域(如风控,电商推荐,广告,网络安全,知识图谱等)实现重要的业务新价值。
官网:https://graphscope.io/
顺便,也想在这里给我们的 GraphAr 社区打个广告(笑)
GraphAr 是从 GraphScope 孵化出的一个子项目,旨在针对不同场景下的图数据建立一套自带图语义的,独立于计算和系统之间的标准化图格式。这是一个新兴的项目,没有太大的负担,非常适合对开源感兴趣的同学参与和体验开源项目的开发流程。为了标准化的中立性,未来 GraphAr 也考虑加入 Apache 孵化器中。所以 GraphAr 社区也非常希望任何对图领域或开源感兴趣的同学可以加入我们的社区,一起共同建设这个社区。
GraphAr 社区:https://github.com/alibaba/GraphAr
# 寄语
OSPP:在参与开源项目开发实践工作过程中提升技能与你在高校课堂上学习知识有什么不同么?
王哲:挺不一样的,我觉得最大的区别在于开发项目需要一个人提前设计、上手编程、解决各种各样的问题,中途也会用到很多其他的工具和依赖。如果在一个社区中,也许还需要与他人协作。这些都是课堂难以带来的。
OSPP:有什么话想对计划参加开源之夏活动的学弟学妹们说?
王哲:第一是技术:我在申请项目时最大的困难在于我自身技术有限,很多选题都看不懂,更不要说开发了。希望学弟学妹可以提早了解到工业界或是开源项目中常用的技术,并以此多积累。
第二是尝试:勇敢地抓住机会、参与开源,即使没有任何项目经验也可以多尝试(我就是这样的例子)。要知道,没有谁生来就经验丰富,都是在实践中累积出来的。
第三是总结:要意识到自己在开发的过程中有哪些地方做的不错、那些地方做的不够好、怎样改进,从而把具体的经验抽象成更普适的能力。
END
专栏编辑:大梦
校对:校大山、王哲
制图:GoodWhite

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

专栏投稿请联系开源小助手:kaiyuanzhixia 或专栏编辑:Hungryfish34(备注“专栏投稿”加速通过),或填写下方专访信息收集问卷。
