十年开源之旅:一个普通中年程序员的故事

发表时间: 2022-04-14 19:00

“不管哪个赛道,不专注搞个三五年,跳来跳去,不会有啥出息。”


2019 年 5 月,Dubbogo作为开源高性能 RPC 框架 Dubbo的 Go 语言版本, 宣布正式加入 Dubbo 官方生态。


2021 年年末,经过一年打造,集成新通信协议、新序列化协议、新应用注册模型、新路由以及新服务治理能力的 Dubbogo 3.0 正式发布。至此,Dubbogo 已经对齐所有 Dubbo 版本,开始与 Dubbo 齐头并进,并在云原生方向反哺 Dubbo,社区有效 Contributor 超过 200 人。


今年是于雨开源 Dubbogo 的第七个年头。可能很难想象,在此之前的 2016 年到 2018 年,Dubbogo 这个项目还几乎都是于雨自己一个人在维护。


顾名思义,Dubbogo 是 Dubbo 的 Go 语言版本,但 Dubbogo 不开源于阿里,于雨目前在蚂蚁集团的工作跟开源几乎毫无关系,甚至于雨也并非真名。


于雨认为自己“不懂得拒绝”,他不知道这算不算一个性格缺陷,但如果不是因为“不懂得拒绝”,可能也就没有 Dubbogo 这个项目了;他跟谁都有点“自来熟”,这让他做开源社区更加得心应手;他认同做开源不能光靠热血,当然也会想如果开源项目能带来一些实际收益就更好,但这与他早期靠着一腔热血熬过 Dubbogo 最难熬的那段时间并不矛盾。


和大部分国内开发者一样,于雨从没有全职做过开源。他的开源经历,其实就是一个普通一线开发者投入开源的真实写照,也会有挣扎也会感到疲惫,但对他来说,精神层面获得的满足感更多一些。


投身开源十年


于雨的 GitHub ID 是 AlexStocks,于雨这个名字是他 2012 年开始用微信时的微信名字,后来入职蚂蚁集团时也用作花名,现在则已经彻底成了他的常用名。


2018 年底,奔着蚂蚁对云原生技术方向的笃定以及大力投入,于雨决定加入其中。在此之前,于雨已经做了很长时间的 Dubbogo,他戏称自己加入蚂蚁是“带艺投师”。不过那时候 Dubbogo 还没有现在的“知名度”,于雨在简历上也只是将 Dubbogo 作为以前工作中做过的项目之一简单带过。


从业十来年,于雨一直在服务端基础架构研发一线“搬砖”,工作内容涵盖 RPC、NoSQL 存储、实时监控告警、即时通信、消息推送等方面。他接触开源的每一段经历都跟他的工作经历密切相关。用于雨自己的话来说,他开源做的每一个项目,背后都是出于当时公司的一些需要或者自己开发中的一些技术需要,从不做没有实际需要、没人用或者功能没有实际意义的产品。


这一点从于雨的开源经历也能看得出来:2014 年在公司内部维护 Redis 相关项目,解决遇到的问题同时开始为 Redis 贡献代码;2015 年因为一个开源项目需要,使用 C++11 重构 Muduo,去除 Boost 依赖;2016 年因为公司战略需要构建 Dubbogo;2018 年因为公司存储需要构建 Pika kv 存储集群和 InfluxDB 集群,其间开源 PikaPort;2020 年因为 K8s master 节点限流需要参与 sentinel-golang 开源;2021 年因为 K8s master 的 etcd 存储瓶颈给 etcd 贡献 PR 若干,等等。


但要说最早接触到开源的契机,还得回到他刚开始参加工作那会。2011 年,于雨在鹅厂做 QQ 后端开发,起家工作语言是 C/C++。C 有个很大的问题是基础库做的不好,大家想基于 C 实现更强大的功能就只能自己写,时间久了,每个人都会维护一些自己的私人库并在 C 程序员圈子里交流。于雨称之为“原始的技术共产主义”。


后来于雨换了工作,在公司内部维护 Redis。那会还是 2014、2015 年,Redis 还处于一个非常早期的阶段,用的人也不多,有些问题只能靠自己解决。于雨当时发现了 Redis 的一些问题,就跑到 GitHub 给 Redis 提交了 Issue。他记得很清楚,当时有一位 GitHub ID 叫做 badboy 的人,在他提交 Issue 之后很热心地跑来引导他怎么把 Issue 写清楚、怎么用 Git 命令把代码拉下来、怎么改进怎么提交代码等等,step by step 解释得非常详细,这也帮他入了门。从 2014 年开始,于雨给 Redis 贡献了若干 PR。现在回想起来,于雨觉得当时这是很明显的“套路”,但这段经历给他打开了一个新的开源世界,从原来自己玩儿,到正式开始参与开源社区了。


2016 年,于雨在一家盛大系公司待了一年。当时云原生已经开始崭露锋芒,公司高层颇具前瞻性地定下一个战略,要往云原生转。当时公司整个通信链路层面都是基于 Dubbo 构建的,而云原生时代需要 Go 语言,对应就有两种思路。第一种思路是写一个代理,让 Go 语言跟 Java 之间进行通信,但使用代理中间是有性能损失的;更好的思路就是不要代理,两个层面直接使用同一套协议,不管是通信协议也好、序列化协议也好,在协议层面打通进行通信。按照第二种思路,既然 Java 层面是 Dubbo,那自然就必须写个 Dubbo 的 Go 语言版本出来。团队中无人懂 Go 语言,而恰好于雨此前接触过 Go 语言,陆陆续续也用 Go 做过一些小项目,自然而然地就被委以重任,开始着手构建 Dubbo 的 Go 语言版本。


于雨花了两个月时间,完成了 Dubbogo 通信层面的开发工作,但服务治理层面还有很多工作需要做、通信层面也还有很多 Bug 需要修改。不过这时候于雨又有了工作变动。在离职之前,于雨跟当时的直属领导商量后决定将 Dubbogo 开源出去,并保证自己会长期维护这个项目。如今看来,他确实兑现了当时的承诺,一直坚持到了现在。


长期只有一人维护的开源项目


Dubbogo 开源之后大概两年半时间,都是于雨一个人在维护。在那两年半里,于雨主要做三件事:完善功能、找用户、找 Contributor。没有一件是容易的。


Dubbo 是一个相当庞大的技术体系,涉及的功能很多,做 Dubbogo 相当于要用 Go 语言把 Dubbo 重新实现一遍。但 Go 语言还是一门比较年轻的编程语言,相比基础库完整的 Java,Go 语言很多网络库、协议库都没有,早期需要做很多“打地基”的工作。于雨只能靠自己硬啃下来,过程中自然要吃不少苦。他一直有一个遗憾,因为没有时间和精力好好研究,到现在自己仍然对 Java 不够精通。


找 Contributor 同样遇到了很多阻力,效果不甚理想。当时的一个客观情况是,Dubbo 在 2014 年之后就不再更新了,社区普遍认为 Dubbo 已经被阿里放弃了。当时于雨联系过很多人,包括一些现在已经在 Go 语言圈子很有名的人,但是大家都不看好 Dubbo,也不看好 Dubbogo。结合 Dubbo 那时候的窘境,不被看好其实很正常,当时 Dubbo 很多 Bug 都没有人管了,“Java 版本都有这么多 Bug,Go 语言你再做有什么意义?”最终于雨只寻觅到一位在厦门的社区伙伴,从 18 年开始合作了四年多,这是早期找过来并留到现在的唯一一个 Contributor。


找用户相对前面两件事,反而显得没有那么难。虽然早期于雨在外部组织活动宣传 Dubbogo 的时候,也曾不被理解、甚至被误认为是在包装自己,让他有些挫败感。但宣传确实有用,也为 Dubbogo 带来了一些早期用户,比如 Dubbogo 第一个规模比较大的用户涂鸦智能就是于雨在社区“宣传”带来的。


现在很多人会说于雨做 Dubbogo 这个技术方向卡点卡的好,但当年谁也没能提前预知到,包括于雨自己。


除了技术挑战大、周围人不看好、找不到 Contributor 这几个维护 Dubbogo 本身的难处,当时新公司的工作压力、赚钱养家的生存压力也把于雨压得喘不过气来。再加上短期内确实看不到 Dubbogo 能带来什么收益,于雨一度差点放弃,事实上 Dubbogo 的维护也确实暂停过几个月。是当时已经在使用 Dubbogo 的用户们,包括每日优鲜、金山 WPS 等,激励于雨继续往下走。


于雨记得很清楚,那是 2017 年国庆节前,金山 WPS 的同学在用户交流 QQ 群里找到他,请他帮忙解决问题,并表示缺了某块通信协议项目就进行不下去了。这让于雨更强烈地意识到 Dubbogo 确实有它的价值所在。那个国庆节,于雨自己一个人关在家里把所需要的那块协议给完善好了。


就是这一次,于雨重新把维护 Dubbogo 的工作拾了起来,并坚持到了现在,靠的还真就是一腔热血:“既然我确实能坚持下来,为什么不再继续坚持下去?”


2018 年 8 月于中关村创业大街车库咖啡,Dubbogo 跟 Dubbo 社区开始合作(右一是于雨,照片由受访嘉宾提供)


熬过最难的那段时间,后来的事情就顺利多了。2017 年底,于雨应邀参加 OSC 源创会年终盛典,开始大规模对外宣传 Dubbogo,而阿里也重新启动了 Dubbo 项目;2018 年 5 月,Dubbo 项目负责人北纬通过朋友关系约到于雨,建议把 Dubbogo 加入 Dubbo 生态,并把项目彻底重构;2018 年 8 月,于雨初步发布 Dubbogo 重构后的第一个版本,同时与阿里中间件团队开始合作并组建开源团队;2019 年,于雨开始全力发展 Dubbogo 社区,5 月份 Dubbogo 加入 Apache 组织,项目快速迭代,社区也逐步发展壮大。越来越多 Contributor 加入并参与贡献,Dubbogo 终于不再只靠一两个人勉力维系。


随着云原生发展得如火如荼,Dubbogo 作为 Dubbo 生态的一份子,凭借 Go 语言的优势,已经被越来越多开发团队和企业所熟知,在国内的影响力也越来越大。现在 Dubbogo 社区的同学出去找工作,只要简历上写了 Dubbogo,简历初步筛选通过就会被直接递送到各大公司的基础架构或中间件团队。这些都让于雨觉得非常有成就感。


业余时间搞开源等于没有业余时间


如今再回头看一个人维护 Dubbogo 的那几年,于雨觉得“都不是事了”。但怎么分配工作时间这个问题,从以前一直困扰他到现在。于雨几乎所有的业余时间都投入到了开源社区,随着社区不断发展壮大,这已经成了于雨现阶段最大的挑战之一——他完全没有办法做到工作生活之间的平衡。


Dubbogo 社区目前由 Dubbogo 团队、pixiu 团队、arana 团队构成,整体项目超过 10 个,有效代码超过 35 万行,Dubbogo 生态所有项目完全由这三个开源团队推动,目前活跃的 Contributor 大约有六七十人。作为社区负责人,于雨需要处理各种消息、跟各路人沟通、参加各种会议,他调侃自己是“操着 CTO 的心”。


于雨现在上班时间处理本职工作,晚上下班(加班)后、周末全天全部都扑在开源社区上,除了春节和长假,基本上全年无休。


笔者在前期跟于雨约采访的时候,他就表示只能约到周末,工作日白天晚上都很忙。最终采访是在一个周六下午进行的,聊完已经是下午六点半,而当天晚上八点他还有一个社区的周会。


一般每周五、周六、周日晚上于雨都有社区的周会,有时候甚至是一个晚上两场会。这种全年无休的节奏,其实这几年对他的精力消耗很大,对他在公司内部的发展也有一些影响。于雨坦言,“这几年明显感觉身体已经吃不消了,但反正有一种精神力量在驱动。”


来自于雨 4 月 1 日晚上发布的朋友圈


虽然说起来似乎有点理想化,但精神层面的满足确实是支撑于雨一路走到现在的重要因素。开源持续吸引着于雨的原因主要在于几方面,首先通过过往这几个开源项目,特别是耗费了相当多心力的 Dubbogo,让他的技术能力得到了提升,包括技术视野广度和技术深度,同时也加强了他的时间管理能力;其次,这些项目确实解决了某些技术方面的需求,对社区用户、对社会都产生了一定的价值,自然会让他产生一种精神上的自我满足。此外,在社区也经常会得到大家的鼓励并感受到尊重,让他产生一种组织归属感,而这种归属感,又会激励他做出更大的贡献。


对于雨来说这是一种正循环,付出越多,就能得到更大的精神层面的激励,而激励越大,反过来又会促使自己继续付出更多。在他看来,可能这种最原始的对于自我价值实现的追求,才是自己能够坚持到现在的动力来源,如果一开始就抱着很强的功利心,反而可能走不到现在。


现阶段于雨作为社区负责人,工作更偏重于推动社区整体发展的运营工作,当然也会参与讨论和确定社区技术发展方向,但不会因为 Dubbogo 是于雨做出来的就什么都是他说了算,实际上现在技术上由他来拍板的情况已经很少了。


对于目前在做的事情,于雨总结为一句话:“定战略、搭班子、带队伍”。定战略,就是指明社区要重点发展哪些技术方向;搭班子、带队伍,则是要持续为 Dubbogo 寻找优秀的人才,吸引靠谱的人才源源不断地加入,同时还要培养这些人,把整个团队带起来,保证社区能够稳定发展下去。


在于雨看来,一个合格的开源社区负责人需要做到多方共赢,“副产品才是形成了 Dubbogo 实体的社区代码”。首先要能跟客户或用户共赢,即社区的项目能够满足用户大规模稳定使用的需求,同时用户遇到问题也能反馈回社区,提升 Dubbgo 自身的稳定性和质量;其次要跟社区贡献者共赢,贡献者通过参与社区工作能够提升自身的技术水平并得到一些收益,可以是更好的工作机会或者转换技术方向的可能,同时这些贡献者也会帮助社区持续稳定地发展;其他方面还包括和 Dubbo 本身项目生态的共赢、和开源项目背后支持企业的共赢。


2021 年 8 月于北京后海,Dubbogo 部分 Committer 线下聚会(照片由受访嘉宾提供)


如今 Dubbogo 已经形成与 Dubbo 并驾齐驱的发展态势,对于 Dubbogo 未来的技术发展方向,社区里有很多争论。预计接下来在相当长一段时间里,于雨还得继续保持这种全年无休的节奏。


Dubbogo 至少还能再发展十年


开源六年多来 ,Dubbogo 实现了与 Dubbo 所有版本的对齐,以及与 Dubbo、Spring Cloud、gRPC 生态的互联互通,Dubbogo 3.0 开始在 K8s、柔性服务等云原生方向持续探索反哺 Dubbo。截至 2022 年 4 月份,Dubbogo 登记用户已经多达 52 家,覆盖了阿里钉钉、高德、小米、滴滴、得物、好未来、涂鸦、汽车之家、芒果 TV 等互联网头部用户。但于雨认为 Dubbogo 还只是处于“青春成熟期”,虽然已经步入青春期,但还没有达到成熟期,处于中间过渡的一个阶段。以目前社区重点专注的稳定性和性能相关工作为例,现在取得的成绩基本相当于 0 到 1 之间已经拿到了 0.8,但距离 100 还有很远。


下一阶段,Dubbogo 的首要目标是要更加“云原生化”。它的第一个技术目标是更加轻量化,因为 Dubbogo 本身背负了一些 Dubbo 的历史包袱,导致学习成本比较高,只有更轻量化才能更匹配云原生时代的需求。


Dubbogo 的第二个技术目标是提升用户使用的友好度,让用户上手成本更低,这里面又包括稳定性、文档建设等诸多工作。


第三个目标则是全力推进dubbo-go-pixiu这个子项目,pixiu 关系到 Dubbo 多语言生态的发展。目前它有 gateway 和 sidecar 两种形态,其中前者已经相对稳定,但后者还处于起步阶段。


第四个目标是互联互通,除了已经实现的跟 Dubbo、Spring Cloud、gRPC 生态互联互通,未来社区将着力实现让 Dubbo/Dubbo-go 与 RocketMQ、MySQL 等更多系统互联互通,达成 “bridging the gap between Dubbo and X”的新使命。不过这个目标要靠长期的投入,于雨认为至少得花四年时间,今年这项工作只是刚刚起步。


谈及 Dubbogo 这个项目的生命周期还能持续多久,于雨很坦然:“如果它的历史发展阶段到了,该退休就退休。”但于雨相信,任何一个产品/项目只要持续做,总会有它的生命力,特别是像 Dubbogo 这种技术基础设施,“你说 Linux 什么时候走到头?至少到目前为止看不到。还有像数据库的项目,比如 MySQL,你说未来至少 30 年它会死掉吗?很难说。Dubbogo 也一样,这种基础设施的生命力,不像上层的一些框架项目,三四年火一个而且很容易收获 Star、收获关注。做基础设施类的开源项目,要能耐得住寂寞,只要开源社区能够一直稳定发展下去,我相信它再发展十年也没什么问题。”


为了达成这个“十年之约”,于雨接下来给自己设定的目标第一条就是保证社区能团结前行、不要散掉,他自己作为创始人首先就要能坚持下去。当然于雨对此非常有信心,“在可见的未来,我肯定能坚持,十年甚至更久。”从 2016 年一直坚持到现在的 Dubbogo 就是他最好的背书。


结语


在采访中,于雨至少提到三次“长期主义”。这也是他坚持维护和运营 Dubbogo 这六年间,非常重要的一点认知。在他看来,不管哪个赛道,不专注搞个三五年,跳来跳去,不会有啥出息。作为项目的创始人和社区负责人,需要保持责任感和使命感,才能维持一个健康的社区,维持项目长远的发展。


经过这六年的磨练,于雨也总结了不少做开源的心得,比如要与开发者和用户在一起而不是飘在云端去结交各路大佬混“人脉”,年轻时于雨也喜欢组局结识大佬,但后来他发现只要自己积累足够,自然会有人主动来认识你;比如要有坚持的恒心维护项目而不是打工的心态随时准备撂挑子走人,现在有太多人知道怎么聪明地做开源,不乏有人冲着升值跳槽做开源,但这种行为是极其败坏口碑的;要有做幕后英雄的心态做好新开发者的引路人而不是与社区的同学争抢代码贡献量多少;比如平时要低调做事夜行赶路但也要阶段性地对项目进行高调但不“夸张”的宣传,在他看来衡量社区活跃度的指标中,GitHub 上的 Star 数是最不靠谱的,因为很容易受到宣传手段的影响……以上这些除了是经验教训总结,也是他对自己提出的要求。


从 2016 年于雨开始做 Dubbogo 直到现在,他一直将 Dubbo 的创始人梁飞作为自己的开源标杆,不止写的代码质量很高,文档也写得非常认真,于雨认为从中能够感受到他对于纯粹的社会价值的追求。虽然于雨实际并没有跟梁飞直接交流过,但梁飞对于雨后来做开源产生了很大的影响。


或许现在或者在未来,也会有一些人因为受到于雨的影响而参与到开源中来,也会有人把于雨当做自己的开源标杆。


因为于雨自己就是一个参与开源的普通开发者,在开源的世界中一步步成长起来。国内可能有很多跟他类似的普通开发者,正在参与开源或想要参与开源,但大家都有繁忙的全职工作,业余时间才有空搞开源,也会有难以兼顾或忙不过来的困扰,那到底要不要做开源?有时候似乎会看不到做这个事情的方向到底在哪里。


于雨希望自己的经历能给大家一些正向参考。在没有找到方向之前,每个人可能都是先从给别人当小弟开始。在别人的带领下,从爬到站起来,到知道怎么走,看着别人跑,自己慢慢跟着跑。到一个岔路口之后,才突然发现自己方向在这里,可能这个路口没人,但这时候自己也能带一个方向走下去了。


“先行动起来,跟着别人走,走着走着,自己慢慢成长起来,总会有一个里程碑。比如我刚开始自己玩,后来被人带着参与到 Redis 社区中,再后来一步一步走过来,从弱到强,其他就是自然而然的一个事情了。”


如果你想听于雨讲述更多 Dubbogo 的开源故事与教训,一定要来将于 6 月 22 日-24 日举办的 QCon 全球软件开发大会(北京站),他将在此进行主题为“Enjoy the new sexy: Open Source”的演讲。当日,你还将听到百度的祖明老师分享 “Apache ECharts 的开源历程”、 涛思数据开发者生态 VP 杨攀分享“明星项目 TDengine 的开源之路”,以及 Apache IPMC Member 郭炜老师分享“ Apache SeaTunnel(incubating)的项目孵化实践”。


每一位开源参与者、每一个开源项目都可以成为舞台上的主角。

新的一波开源浪潮正在席卷中国,【开源聚光灯】是 InfoQ 重点打造的开源主题栏目,旨在通过新闻、系列访谈、用户调查、迷你书、视频等形式深入观察开源运动,围绕开源的价值和开源开发模式,与投身开源的每一个个体共同探讨开源发展现状,照亮每一个开源舞台上的参与者。

如果你有开源故事或对开源的深刻观点想要分享、或开源项目想要寻求报道,欢迎联系微信 caifangfang842852(请注明姓名和来由)。

了解更多软件开发与相关领域知识,点击访问 InfoQ 官网:https://www.infoq.cn/,获取更多精彩内容!