关于阿里云:闲话-dubbogo-社区

4次阅读

共计 5882 个字符,预计需要花费 15 分钟才能阅读完成。

作者:于雨

dubbogo 社区倒退 7 年多,dubbogo 注销用户已达 63 家【详见 https://github.com/apache/dub…】,实在用户应该更多。于某在反对某 dubbogo 用户时,曾提议让他们注销下,对方暗示本人的业务是金融 P2P,注销着实不便。如 链家 这种已知未登记用户,那就更多了。

追述历史

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

于雨 2016 年 3 月在位于上海张江的 张衡路与华佗路 交叉口的 隆重研发核心 工作时,公司大部分我的项目应用了 Java 技术栈,其中相当数量的服务应用了曾经无人保护的 Dubbo v2.5.4-snapshot。公司老板陈大年【外部称说 年总】感觉云原生时代来了,让大家用 Go 语言革新公司的 Java 我的项目。于是公司新我的项目纷纷应用 Go 进行构建,但面临一个很重要的问题:Go 语言服务与 Java 服务之间如何进行通信?

子曰,没有什么服务解耦是一层代了解不了的,如果一层不够,再来一层。如上图,刚开始大家给出的解决方案就是:

  • 有旧的 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 之间的互联互通。

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 社区三个多月不间断的反对配合,得物后盾零碎的最终降级胜利。

得物后盾应用的是 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 社区进行对齐,追究其中网络流量抖动的起因。

新零碎开发实现后,从稳定性登程在生产环境进行灰度公布,逐渐将流量接入 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:https://github.com/apache/dub…
  1. triple 协定泛化调用失败
    • pixiu 的 triple 协定应用了 protobuf v3,然而 pixiu 调用后端的 triple 服务时,报了通信协议报错;
    • issue:https://github.com/apache/dub…

当天早晨上班后,于某十点钉钉拉会专场反对,pixiu 团队的梦超、虓雄等筒子和蚂蚁的同学对接到凌晨两点半,总算解决其中一个问题。第二天中午吃饭时间,pixiu 团队的同学又用了 3 个小时总算把第二个问题解决。大抵说下其中相干问题:

  1. 第一个问题,起因是 pixiu 应用的第三方库有一个 bug,该库曾经两年多不保护;
  2. 第二个问题,蚂蚁这边应用的 K8s 应用了 gogo 组织的 https://github.com/gogo/proto… 编译了 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;

<!—->

    • 我的项目详见 https://github.com/dubbogo/tools

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】 还很年老,咱们无畏风雨,不卑不亢,将秉承长期主义,在开源征途中持续长征。

正文完
 0