dubbogo 社区已经发展 7 年多,dubbogo 登记用户已达 62 家,详见 https://github.com/apache/dubbo-go/issues/2 ,真实用户应该更多。于某在支持某 dubbogo 用户时,曾提议让他们登记下,对方暗示自己的业务是金融 P2P,登记着实不便,于某当然也能体谅对方,后来便不再提及此事。更多如 链家 这种已知未登记用户,那就更多了。
1 追述历史
不少人曾问于某,到底是 dubbogo 还是 dubbo-go 才是正确拼写,个人通常的回答是,两个都对。于雨 2016 年 4 月开始在位于上海张江的 张衡路与华佗路 交叉口的 盛大研发中心 开始构建项目时,其 github 地址是 github.com/alexstocks/dubbogo,此时其正确拼写当然是 dubbogo。dubbogo的发音类似于 double-gou,恰好于某微信头像是 两只小狗,内部便把这个项目戏称为 “两条狗”。
开发第一个版本历时 3 个多月,于雨当时的加班量是同事的三倍。于某当时怀孕的媳妇只身在北京,无人照看,于某经常周末还是待在上海加班扑在这个项目上。同事们当时就说,于雨这是把 dubbogo 当做自己的孩子了。其间 6 月份的一个周六,于某的大学同学打电话问及生活情况,见于某还在公司加班,便开车跑到公司,强行把于某拉到他家吃饭,然后带着于某去张江 玉兰香苑 附近的某游泳池 游泳 以作休息。自三岁起便能游泳的于某,在泳池游了三圈后便无体力,急忙跑到游泳池边休息,其间咳血。
不少人“以为” 甚至 “羡慕” dubbogo 社区的 阿里背景,有 dubbo 可以自带流量支持,甚至可以沾染 apache 的光环。但于某 2016 年开始构建 dubbogo 时,dubbo 处于无人维护的停滞状态,当时这些所谓的光环和背景,自然无从谈起。
2018 年 5 月,于某在北京见到了 dubbo 二代目北纬,开启了 dubbogo 和 dubbo 社区的合作。北纬把项目名称改为 dubbo-go,当作 dubbo 多语言生态中的一员。当时 dubbo 多语言生态有 Javascript、Php、Python,甚至有 Erlang。其中 Python 版本的 dubbo 竟然有两个不同的实现!dubbo-go 当时可能是最不起眼的存在。经过四年到现在【2022年】,也就剩下了 dubbo-go 和 dubbo-js。现在,一般地,于某称呼社区为 “dubbogo社区”,dubbogo 社区的顶级项目有 apache/dubbo-go 和 apache/dubbo-go-pixiu。
2019 年起,阿里开源办公室如 Amber 和 Dubbo 二代目 北纬 给予了 dubbogo 社区大力支持,社区自己当然也很努力。
毋庸讳言,dubbogo 被不少公司采用,相当一部分原因是他们原来采用了 dubbo 系统,在转向云原生方向升级系统时,自然就采用了 dubbo-go。但也有不少公司原来压根就没用 dubbo,在进行系统升级改造时采用了 dubbo-go。
dubbogo 项目和社区能够发展起来,与我们社区对用户 主动跟进使用进度、第一时间解决问题 的作风不无关系,我们在支持用户的过程中可谓认真负责。下面列举于雨和 dubbogo 社区对一些客户的响应过程,以记述一些往事。
2 dubbo-go
在 dubbogo 用户中,印象较深的客户是上海识装信息科技有限公司,它们 APP 叫做 得物。2020年年底,得物启动系统升级,决定把原来的 PHP 框架替换为支持了 gRPC 作为底层通信系统的 dubbo-go 框架,经过 dubbogo 社区三个多月不间断的支持配合,得物后台系统的最终升级成功,其技术成果详见 《得物社区服务基于 dubbogo 技术升级实践》一文,本文就不再赘述。
本文想记述的是文章之外的故事。其实当时 dubbogo 社区在同时忙着开发 1.5 和 3.0 两个版本,分别对接 dubbo 2.7 和 dubbo 3.0。
得物后台使用的是 dubbo-go 1.5 版本。dubbo-go 底层通信框架支持 TCP + Hessian2、HTTP + JsonRPC V2、gRPC + Protubuf,得物采用的技术方案是 gRPC + Protubuf。dubbo-go 的 gRPC 通信,最早是 2019 年由字节跳动的 徐建海 同学在 dubbo-go 1.2 版本中开发的。但,也仅仅是开发完成并给出了代码 samples 而已。实话说,dubbo-go 在 gRPC 这块 bug 不少,毕竟尚未经历一家公司的生产环境把它打磨一番。
得物当时跟于雨对接的是年轻有为的柯瞻同学,大家都称他 小柯。2020年底小柯开始与于某对接时,其熟悉的开发语言是 Java,刚开始学习 Go 语言,处于入门状态。“得物 + dubbo-go” 的合作就酱紫开始了。
跟得物合作的那三个月,于雨夜里凌晨在线,陪着小柯同学上线他们基于 dubbo-go 改造的业务系统。上线过程当然并不顺利,中间坎坷自不待言,但小柯同学精力和技术热情过人,遇到的大部分问题,总能自己第一时间解决。
dubbo-go 部分的问题,小柯同学给于雨反馈后,于雨经常晚上十点下班后,拉着 dubbo 社区负责人 北纬 以及两个社区的核心开发者们一起拉起钉钉会议,一行一行代码在线会诊,直至问题得到解决。更多次,小柯同学周末会把线上运行情况与 dubbogo 社区进行对齐,追查其中网络流量抖动的原因。
得物与 dubbogo 社区的合作直至小柯确认其 平台运行平稳度 超过直接使用 gRPC 为止,此时 小柯 已经熟练掌握 Go 语言和 gRPC 与 dubbo-go。小柯后来曾说,估计很少有其他开源社区及其负责人能这样投入如此大精力在一个算是白嫖的用户身上。
3 dubbo-go-pixiu
2019 年,dubbogo 已经发展了三年多,期间有一些诸如 每日优鲜 之类的客户,但是缺少重磅级的标杆客户。
2019 年 6 月中旬于某在杭州出差,其间的一个周六,于某约了 dubbogo 社区一些朋友组织了一次线下 meetup,地点是蚂蚁 Z 空间的一个会议室,阿里开源办公室的白科同学带了六七套 dubbo tshirt 算作赞助,远在成都后来入职腾讯的王翔同学线上接入。参加这次会议的有涂鸦智能的潘天颖同学,自称英文名字是 panty,绰号八戒。会后,panty 告知其打算基于 dubbo-go 构建起涂鸦的网关服务。
2019 年 12 月份,阿里在杭州召开最后一次 dubbo 专场 meetup,于某任出品人,阿里开源办公室的的 顾烜丰 同学协助,于雨同团队的 岳亮 同学一起来捧场。期间有有赞的胡子杰【后来入职蚂蚁中间件 花名 致节】、dubbo-js 作者胡锋、斗鱼的孔令圳、dubbogo社区的邓明 和 涂鸦智能的 panty,panty 专场讲了他们基于 dubbo-go 构建的 gateway。会后,北纬对这个 gateway 很感兴趣,因为当时 dubbo 生态缺少一个 gateway,而且 dubbo 多语言生态很多项目陷入停滞。于某拉上 panty 勾兑一番后,panty 答应构建一个初版。最终的目的是:通过 HTTP、gRPC 接口的形式给 dubbo 用户一个多语言解决方案。
2020 年 2 月份 panty 提交了一个初版 demo 项目 github.com/dubbogo/dubbo-go-proxy。此后 panty 忙于跳槽找工作,把公司内部的工作交给了王文学【后入职蚂蚁中间件 花名 文徐】,这个开源项目便陷入了无人打理的状态。
2020 年 6 月份,于某觉得这个项目确实意义重大,在 dubbogo社区 钉钉群开始找人组建团队专职维护这个项目。2020 年 8 月份于某在杭州,铁城 带上 徐杨清 同学在杭州谋划了一番后便重启了项目,计划是先做 gateway,然后做 sidecar。
2021 年 3 月,dubbo-go-proxy 已经被建设的初具规模,于某计划把它迁入 apache,此时于某决定把项目改为 github.com/apache/dubbo-go-pixiu,因为貔貅是中国神兽,以对标同类的西方 Java 神兽 zuul。
2021 年一整年,于某拜托 Jimmy Song 等一众好友到处帮忙给 pixiu 找用户。此时 pixiu 的 gateway 功能已告成熟,可以接收 HTTP、DUBBO、gRPC 请求,调用后端的 HTTP、DUBBO、gRPC、SpringCloud 服务。其 sidecar 形态也完成了初步工作。
2022 年 7 月,dubbo 团队打算重新构建 dubbo 的控制面,看上了 pixiu。pixiu 团队便把 isito 1.14.3 的代码合入 pixiu,开始重新构建 dubbo service mesh 的控制面。
前面啰嗦半天,交代了 pixiu 这个产品的来历。下面重点讲述一次 pixiu 团队对客户的支持过程。
2022 年 10 月,蚂蚁内部某团队打算基于 dubbo-go 和 dubbo-go-pixiu 的 gateway 构建其一个服务平台,pixiu 基本上能够满足其需求。业界都知道蚂蚁这边 Java 技术平台是 sofa 体系,所以这次同得物一样,并不是 dubbo 流量转化来的用户。
本周三(2022年11月26日),同事告知其还有两个坎很难迈过:
-
1. HTTP 的 header 无法通过 pixiu 传到 代理的后端 triple 服务
-
pixiu 收到客户端发来的 HTTP 请求时,HTTP header 无法以 metadata 的形式传到后端使用了 triple 通信协议的服务平台
-
issue:https://github.com/apache/dubbo-go-pixiu/issues/523
-
-
2. triple 协议泛化调用失败
-
pixiu 的 triple 协议使用了 protobuf v3,但是 pixiu 调用后端的 triple 服务时,报了通信协议报错;
-
issue:https://github.com/apache/dubbo-go-pixiu/issues/523
-
当天晚上下班后,于某十点钉钉拉会专场支持,pixiu 团队的梦超、虓雄等筒子和蚂蚁的同学对接到凌晨两点半,总算解决其中一个问题。第二天中午吃饭时间,pixiu 团队的同学又用了 3 个小时总算把第二个问题解决。大致说下其中相关问题:
-
1 第一个问题,原因是pixiu 使用的第三方库有一个 bug,该库已经两年多不维护;
-
2 第二个问题,蚂蚁这边使用的 K8s 使用了 gogo 组织的 https://github.com/gogo/protobuf 编译了 proto 文件,而 dubbogo 的 triple 使用的是 go 官方的 https://github.com/golang/protobuf 编译了 proto 文件,导致协议不通。
最终解决问题后,蚂蚁同事跟于某说道,pixiu 基本上满足了他们的需求,唯一不足是文档欠缺,一线开发同学在开发过程中不得不花费大量时间阅读 pixiu 的代码,好处是同事们已经把 pixiu 代码通读一遍摸透了细节。
4 dubbogo 社区
dubbogo 社区马上要进入第八个年头。dubbogo 项目初期的使命就是 "Bridging the gap between Java and Go",目前 dubbogo 已经对齐所有 dubbo 版本,正与 Dubbo 齐头并进,并在云原生方向反哺 Dubbo。且实现了与 Spring Cloud、gRPC 生态的互联互通,把 Java 中间件能力带入了 Go 语言生态。社区目前正全力推进的 dubbo-go-pixiu 等社区项目,打造下一代 Dubbo Mesh 生态。
文档建设,确实是 dubbogo 发展过程中的一个不足。但社区以另一个形式正在解决这方面的问题:
-
1 2021年在北纬的带领下,构建对应 apache/dubbo-samples 的 apache/dubbo-go-samples 以及 apache/dubbo-go-pixiu-samples;
-
apache/dubbo-go-samples master 分支构建 dubbogo 3.0 的示例;
-
apache/dubbo-go-samples master 分支构建 dubbogo 1.5 的示例;
-
-
2 每个 dubbo-go-samples 示例都必须给出 中英双文版本 的 readme,说出其中的重要技术点以及操作步骤和使用方法;
-
3 构建 各种 tools 提升 dubbogo 的易用性,以方便用户使用 dubbo-go;
-
项目详见 https://github.com/dubbogo/tools
-
dubbogo 社区的新愿景是 "Bridging the gap between Dubbo and X" 。2022 年,dubbogo 社区是 边前行、边和生产用户一起打磨产品、边补文档的功课。
dubbogo 社区一直与阿里的 nacos、sentinel、seata 各开源社区保持密切合作。目前 dubbogo 社区也在与腾讯 Polaris 社区的进行紧密合作,把 Polaris Mesh 强大的注册、配置以及路由能力引入 dubbogo 中,相关合作成果将在 apache/dubbo-go v3.1.0 中发布。正在计划中的与阿里云 MSE 的合作,将实现跨云的统一微服务能力,避免厂商锁定。
dubbogo 社区还很年轻,我们无畏风雨,不骄不躁,将秉承长期主义,在开源征途中继续长征。