作者:于雨

dubbogo 社区开展 7 年多,dubbogo 挂号用户已达 63 家【详见github.com/apache/dubb…】,实在用户应该更多。于某在支撑某 dubbogo 用户时,曾提议让他们挂号下,对方暗示自己的事务是金融 P2P,挂号着实不方便。如 链家 这种已知未挂号用户,那就更多了。

追述前史

不少人曾问于某,到底是 dubbogo 仍是 dubbo-go 才是正确拼写,个人通常的回答是,两个都对。

于雨 2016 年 3 月在坐落上海张江的 张衡路与华佗路 交叉口的 隆重研发中心 作业时,公司大部分项目运用了 Java 技能栈,其间适当数量的服务运用了现已无人保护的 Dubbo v2.5.4-snapshot。公司老板陈大年【内部称呼 年总】觉得云原生年代来了,让咱们用 Go 言语改造公司的 Java 项目。所以公司新项目纷纷运用 Go 进行构建,但面对一个很重要的问题:Go 言语服务与 Java 服务之间如何进行通讯?

闲话 dubbogo 社区

子曰,没有什么服务解耦是一层代了解不了的,如果一层不够,再来一层。如上图,刚开端咱们给出的处理方案就是:

  • 有旧的 Java 服务,如 Service0,则先再构建一个 Service0 的署理 S0-Porxy,完结公司内部通讯协议与 Dubbo 服务通讯协议的转换;
  • 网关 Gateway 层如果检测到服务是 Go 言语构建的服务,则把恳求转到 Go 网关 GoGateway Proxy;
  • Go 网关 GoGateway Proxy 如果要调用旧的 Java 服务,如 Service0,则先把恳求转到 S0-Porxy 署理。

这套系统运转了一个月后,相关开发和运维同学天怒人怨:

  • 需求给每个 Service 都完结一套 service-proxy,开发同学的代码 搬砖作业深重;
  • 整体服务链路增加了两个节点,导致 RT 上升;
  • 运维同学对这套系统定见特别大,运维本钱翻倍,系统 SLO 下降;

所以有同学提出了更高超的建议:在 GoGateway Proxy 中完结 Dubbo 的泛化调用。这个技能方案的好处是可以节省掉 service-proxy 的开发保护作业,但仍是会导致 RT 上升与 SLO 下降。终究大老板决定定案:完结一个 Go 言语版别的 Dubbo,跨过 Proxy,以零通讯本钱方式完结 Go 与 Java 之间的互联互通。

闲话 dubbogo 社区

2016 年 4 月,于雨所在的根底架构接过使命是,团队中无人懂 Go 言语,而恰好于雨此前触摸过 Go 言语,陆陆续续也用 Go 做过一些小项目,天然而然地就被委以重任,开端着手构建 Dubbo 的 Go 言语版别。于雨把这个项目命名为 dubbogo,发音类似于 double-gou,恰好于某微信头像是 两只小狗,内部便把这个项目戏称为 “两条狗”。

开发第一个版别历时 3 个多月,于雨其时的加班量是搭档的三倍。于某其时怀孕的媳妇只身在北京,无人照看,于某常常周末仍是待在上海加班扑在这个项目上。搭档们其时就说,于雨这是把 dubbogo 当做自己的孩子了。

不少人“以为” 甚至 “羡慕” 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 社区对一些客户的呼应进程,以记叙一些往事。

dubbo-go

在 dubbogo 用户中,形象较深的客户是上海识装信息科技有限公司,它们 APP 叫做 得物。2020 年年末,得物发动系统晋级,决定把本来的 PHP 结构替换为支撑了 gRPC 作为底层通讯系统的 dubbo-go 结构,经过 dubbogo 社区三个多月不间断的支撑协作,得物后台系统的终究晋级成功。

闲话 dubbogo 社区

得物后台运用的是 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 社区

新系统开发完结后,从稳定性动身在出产环境进行灰度发布,逐渐将流量接入 Dubbo-go。依据 Nacos 装备中心,将原 gRPC 客户端和 dubbo-go 的客户端封装成一个一致进口(简称 ClinetDubbo),它依据 Nacos 装备判断具体通讯链路。在切换进程中,经过 Nacos 的装备逐渐灰度调整线上流量,做到出问题时可实时回滚。

得物与 dubbogo 社区的协作直至小柯承认其 渠道运转平稳度 超越直接运用 gRPC 为止,此刻 小柯 现已熟练掌握 Go 言语和 gRPC 与 dubbo-go。小柯后来曾说,估计很少有其他开源社区及其负责人能这样投入如此大精力在一个算是白嫖的用户身上。

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:github.com/apache/dubb…
  1. triple 协议泛化调用失败
    • pixiu 的 triple 协议运用了 protobuf v3,可是 pixiu 调用后端的 triple 服务时,报了通讯协议报错;
    • issue:github.com/apache/dubb…

当天晚上下班后,于某十点钉钉拉会专场支撑,pixiu 团队的梦超、虓雄等筒子和蚂蚁的同学对接到清晨两点半,总算处理其间一个问题。第二天正午吃饭时间,pixiu 团队的同学又用了 3 个小时总算把第二个问题处理。大致说下其间相关问题:

  1. 第一个问题,原因是 pixiu 运用的第三方库有一个 bug,该库现已两年多不保护;

  2. 第二个问题,蚂蚁这边运用的 K8s 运用了 gogo 安排的github.com/gogo/protob…编译了 proto 文件,而 dubbogo 的 triple 运用的是 go 官方的 github.com/golang/prot…编译了 proto 文件,导致协议不通。

终究处理问题后,蚂蚁搭档跟于某说道,pixiu 基本上满意了他们的需求,仅有不足是文档短缺,一线开发同学在开发进程中不得不花费很多时间阅览 pixiu 的代码,好处是搭档们现已把 pixiu 代码通读一遍摸透了细节。

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 1.5 分支构建 dubbogo 1.5 的示例;

  1. 每个 dubbo-go-samples 示例都必须给出 中英双文版别 的 readme,说出其间的重要技能点以及操作步骤和运用方法;
  • 3 构建 各种 tools 提升 dubbogo 的易用性,以方便用户运用 dubbo-go;
    • 项目详见github.com/dubbogo/too…

dubbogo 社区的新愿景是 “Bridging the gap between Dubbo and X” 。2022 年,dubbogo 社区是 边前行、边和出产用户一同打磨产品、边补文档的功课。

dubbogo 社区一直与阿里的 dubbo、nacos、sentinel、seata、rocketmq 各开源社区保持密切协作。现在 dubbogo 社区也在与腾讯 Polaris 社区的进行紧密协作,把 Polaris Mesh 强壮的注册、装备以及路由能力引进 dubbogo 中,相关协作成果将在 apache/dubbo-go v3.1.0 中发布。正在方案中的与阿里云 MSE 的协作,将完结跨云的一致微服务能力,防止厂商锁定。

dubbogo 社区 【钉钉群号 23331795】 还很年青,咱们无畏风雨,不骄不躁,将秉承长期主义,在开源征途中持续长征。

闲话 dubbogo 社区