本篇文章已投稿至“从 X 到 GreptimeDB——分享真实故事,赢取专属奖励”征稿计划,经 GreptimeDB 社区整理发表(最终解释权归社区所有)。欢迎大家继续投稿,最高赢取 5,000¥ 奖金和专属大礼包。投稿参考。
📢 介绍一下作者
伊洪,喜欢跑步,看书游戏开源,幸会! GitHub
写在前面
项目地址:
GreptimeDB 是一款用 Rust 写的开源可观测数据库。官方的介绍是:
化繁为一的可观测数据库。OpenTelemetry 原生、云原生,实时处理指标、日志和链路追踪数据,在任何规模下提供亚秒级洞察。
到现在为止,我已经提交了 51 个 PR,其中 44 个被合并,在所有贡献者里排第 20 名。
这篇文章想聊聊,我是怎么从一个“路人”,逐渐变成 GreptimeDB 的长期贡献者,还成为了社区的布道师(Advocator)。
契机:看似偶然的叠加
我和 GreptimeDB 的缘分,没有直接的目的,而是一连串偶然的推波助澜:
- 第一次听说:在大连云原生大会上,马道长提到有个用 Rust 写的数据库;
- 认识 CTO:很早就在 Twitter 上关注了 @sunng87,后来才发现他是 Greptime 的 CTO;
- Good First Issue:那时 Tison 在 Greptime,经常发一些对新人友好的 Issue;
- Rust 的契机:去年年底发现 AI 写的 Python 代码总会带着一堆 Bug,我干脆换个语言,或许学点 Rust 可以解决这个问题;
- 小插曲:一度被 Greptime 的某位同学“误拉黑”,反而让我对团队更好奇。
真正让我“动手”参与的契机,是某天发现 Greptime 的 CEO 在 LinkedIn 上关注了我。当时正好想找个 Rust 项目练手,就顺势点开了这个仓库,从此一脚踏进了 GreptimeDB。
初次试水:从 Bug 开始
我的第一个 PR 是 db#5274,最后没合并。
我比较倾向于从 Bug 入手一个项目,能够管中窥豹了解整个项目的逻辑。虽然最终因为涉及到架构设计问题被关掉了,但这个项目还是给了我一些启发:
- 如何完整编译项目;
- 熟悉
lint test
和 CI; - 他们
makefile
的写法很精巧,尤其make help
,直接启发我后来在 TiDB 贡献 patch。
那一刻我意识到:
开源贡献其实没那么难。只要能把项目跑起来,你自然会知道下一步该怎么走。
于是就有了。
第一个真正合并的 PR
db#5279 是我第一个合并的 PR。
起因很随意:在首次尝试修复的过程中我发现 make fmt
要跑 40 秒,忍不下去,顺手优化成了 4 秒。这个贡献并不难,我们都可以做,甚至 AI 可以比我做得更好。
这件事让我意识到:在 AI 时代,模型能帮你写代码,但真正敏锐地发现“问题在哪”,仍然需要人。
边学 Rust 边交朋友
接下来我就一边学 Rust,一边贡献:
- db#5301:写下第一行 Rust 代码,顺便加了测试;
- db#5313:修 Bug 时顺带解决 Panic;
- db#5338:研究 OpenDAL 的时候清理了无用 Import(因为 GreptimeDB 也用 OpenDAL);
其中有一条评论很有趣:LGTM. Why does cargo check or clippy is not reporting this?
- db#5349:通过这条评论,我学习到了
cargo check
无法准确报告一些useless code
。那有没有可以的呢?于是学到了新的 Static check,有了一个 Patch(如下); - db#5352:在新的检查工具加持下提交优化。
后来我接触了 RAPx,一个更厉害的 Rust 静态分析工具,陆续提交了更多改进:db#5383、db#5388、db#5507 等等。
在这个过程中,我不仅学会了 Rust,还真正感受到 Rust 的安全哲学和工具链的力量。
三个让我自豪的 Patch
后面我就完成了一些常规修复。在所有贡献里,有三个让我特别有成就感:db#5518、db#5561 和 db#5497。
它们让我体会到:
- 性能优化不是玄学:比如 Fast path,自己写了才知道真能立竿见影;
- 算法的魔力:只改几行代码,性能提升 10 倍。从 LeetCode 的题目,到真正跑在数据库里的算法,那种落地感很震撼。
从 GreptimeDB 到 OpenDAL,再回到 GreptimeDB
随着对 Rust 越来越熟,我也给 OpenDAL 提了不少 Patch。理解 OpenDAL 后,反过来又给 GreptimeDB 带来新的特性,比如 db#5585。
再后面就是遇到啥好玩的,如果觉得对 Greptime 可能有用就顺手贡献一个。
社区的另一面:喝酒、跑步、写代码
代码只是开源的一半。
线下我认识了 @fengjiachun,在日本也联系到了 @sunng87。
我们一起喝酒、聊往事。那一刻我才真切明白:
开源的价值不止在提交代码,它也是人与人之间的连接(这段是社区自己的升华)。
写在最后
在 GreptimeDB 的经历,让我学到了 Rust、理解了数据库优化,也认识了新朋友。
如果你也想找个入口加入开源,不妨先点开 GreptimeDB,从一个小 bug 开始。
说不定,这就是一个新故事的起点。