![开源之夏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 任务插件的目前的维护工作,考虑进一步提升该插件的可维护性,替换掉一些可维护性较低的组件。