关于dubbo:我在阿里实习做开源

37次阅读

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

我在阿里实习做开源

3 月 19 日,初春的杭州,仍旧阴雨朦胧。透过 EFC 健身房的落地窗往外看,远处的楼宇、青山、参差的街道和稠密的车辆在水雾中若有若无。

午后的小憩时光,我拿了瓶咖啡回到工位,看着刚刚提交的 PR 通过了 CI check,这或者是我人生中作为实习生的最初一天了。

成长的过程就是一直经验和体验的过程,一段又一段不同心情的开始和完结。我心愿三个月后,那个过了 22 岁生日的年轻人会如愿顺利拿到毕业证,再次出现在这里,我想那时的他肯定更相熟 java 了吧。

本科时光

安分守己的大学生涯大略是是四年本科和三年硕士,而我属于校园的时光,只有两年半。在外实习到当初曾经整整一年了,从北京到深圳再到杭州,我也十分庆幸能领有这样的经验。

三段不同方向的实习,从最一开始在学校里的 GoOnline 在线 IDE 我的项目,让我对真正落地的开发我的项目充斥了向往;到“互享“平台运维开发,让我对企业落地的日常开发运维流程有所理解;再到看点业务开发与需要上线,让我对领有百万用户的我的项目和技术充斥了激情;再到中间件研发,专一于云原生畛域的摸索和落地。

第一段实习是在北京图森科技,期间充斥了糊涂和纠结的,纠结于是抉择研发还是科研,糊涂与对从没见过的花里胡哨的各种工具的胆小,但很侥幸最终习惯了本人的抉择。

第二段实习是在深圳腾讯,整个过程充斥了刺激和危机感,危机来源于在社会上和技术上如何站住脚跟,惊险刺激于一连串从没料到的事件。很感激我能沉着看待遇到的各种突发状况,来自待业的压力,来自转正的压力,都不足以压垮一个有幻想的年轻人。至今仍旧思念过后率领我成长的导师 Steven【见链接 1】。

去年秋天开始在阿里团体中间件团队开始了我的第三段实习经验,相比前两次,这次实习难受了很多。当看清前路的时候,活的还是比拟滋润的,所要做的就是积攒、积淀和享受来自研发的高兴。很侥幸,实习经验中遇到的导师、共事和领导们都十分 nice,都能够遇到一起聊天交心、一起吃饭喝酒的前辈们,或者对于初入社会的年轻人,是一盏盏指向将来散发光满的灯塔。

dubbogo 社区

拿到阿里实习 offer 后还未入职西厂前,便被大 Boss 引入了 dubbogo 社区,被告知实习的工作就是推动 dubbo-go 在外部的落地和 dubbo-go 3.0 的开发。这是一个有技术的组织,更是一个有人情味的中央。

时光到回到去年刚拿到 offer 的 10 月份,第一次将 dubbo-go clone 到本地,胜利实现了 RPC 调用,情绪是无比冲动的。因为这个场景生疏中带着相熟。第一次 bug fix,第一次奉献 feature,写源码解读,再到前面成为 dubbo committer,投入 Dubbo-go 3.0 的奉献中。专属于年老 IT 工程师的高兴,莫非于让本人和我的项目一起成长。

在阿里的实习过程,2021 年的重大版本 dubbo-go 3.0 贯通了整条工夫线。从我尚未入职还在石家庄的时候,便开始一边在按摩店洗脚一边开周会接工作,到前面熟识了社区中的领导们、技术大佬们,很屡次被前辈的技术和精力所打动,说社区充斥了人情味毫不为过。

马上就要到了三月底,我也心愿 dubbo-go 3.0 能够成为实习过程中属于我的一份期末答卷,而 3.0 版本肯定不是起点,而是国内开源 RPC 框架倒退的过程所在,因为有了每一个阶段的翻新,才成就了在将来长河中的丰盛的云原生发展史。

比起我的项目自身,我更爱这种技术气氛:

  • 很多技术人员能够凝聚在一起,各尽所长为了一个指标而致力;
  • 一种“有我在我的项目就在”的责任心;
  • 一种在贯彻于编码中的开源我的项目的谨严;
  • 一种团聚时能够高兴吹水和交换的默契。

就在上周六早晨,dubbogo 社区负责 dubbo-go-pixiu 我的项目的负责人铁城大哥,为了庆贺本人胜利从阿里外围公司转到盒马,招集了社区杭州的网友们胜利小聚。觥筹交错间从技术八卦到社区秘闻,无所不谈,并纷纷“讨伐”图中某位马上从杭州某 IoT 公司到职要投奔蚂蚁的大佬 ^_^。

很感谢在前行路上遇到的许多优良又充斥情怀的前辈!

Triple-go

实习当然不可能只有周末的风月,更多的是期间的工作经验和成长。整个实习期间集体次要负责 dubbo-go 3.0 的 Triple 协定和新路由规定实现。

开源 Triple 协定作为 dubbo-go 3.0 的重要 feature,简略来说,就是扩大 gRPC 协定,在 gRPC 的根底上引入 dubbo 的服务治理能力和扩大空间。

刚开始想的很简略,在 HTTP2 之上实现 Triple,并兼容 gRPC。但难点在于既要和 gRPC 在 一般 / 流式 / 状态码 上齐全兼容,又要具备 dubbo 服务治理能力 — 在 dubbo-go 已有根底上扩大,还要扩大的优雅。

  • 手撕 HTTP2

    只借助数据帧层的 SDK 手撕 HTTP2 协定,首先须要解决发包逻辑的正确性。搞了一两个星期。实现了调用买通。

    但本人实现的总会有问题 …

    除了数据帧发送正确,还要思考滑动窗口流控、高低线、数据帧的拆包合包等等一系列流式场景下的问题。我的解决办法很间接,抓包看 grpc 怎么做的(没工夫看源码了),而后依照它的逻辑去实现。

    当问题一个在掉头发的过程中解决,看似美妙,实则陷入死胡同 — 手撕真的比不上官网库,无论是稳定性还是速度。

  • 改官网库

    一开始没有抉择官网库,因为 gRPC 并不是这么做的。调研的过程中感觉困难重重,Go 语言官网库只给了少的可怜的接口,怎么自定义 Header 和 Trailer?怎么流式调用?给官网库提交 issue 后被回复:“想法不错,你本人实现个奉献进去吧”…

    在这一点上,隔壁 java 的实现就难受了很多,功能强大的 java-http2 库间接信手拈来。起初对于大型项目的奉献曾经有点恐怖了,条条框框太多,跟师兄学聪慧点,罗唆 fork 个分支本人改,改的本人都感觉骚,然而能实现需求。

    很感激经验丰富的领导揭示我,官网库能够试试用。

  • 丝滑体验

    花了两天工夫换了底层网络库,体验丝滑了很多,尤其是几兆的大个儿数据包,跟社区前辈一起测了一下,最初 2-3MiB 的双向数据包单机压测可达到 1.5k qps。

    当然没思考到的问题还有很多,但沉迷在开发的高兴和成就感中真的很爽。

将来的云原生

实习期尽管只有短短地三个月,但到起初我越来越发现,中间件研发曾经承包了我的太多高兴,我越来越察觉了对编程的酷爱,对业余的敬畏,对云原生技术的信奉。

我认为任何一位 IT 工程师,无论技术深度如何,无论教训是否丰盛,都应该领有本人的技术信奉。我心愿技术信奉于我而言,始于对于编程的青睐和强烈的我的项目成就感,成长于与前辈的交换和源码的学习中,心愿在将来将落实于在“落地”和“翻新”两个词中。

我认为,任何的技术,如果不落地生产,将不具备太多意义。而将“形而上学”的架构观点,冲破层层妨碍和壁垒,例如和已有服务 / 语言 / 设计理念相悖,一直推动落地,这过程是平凡的,这个过程中付出过致力的人都是站在浪潮之巅的弄潮儿。

中间件的将来是什么?
sidecar 架构真正优雅落地是什么样子?
Java 和 Go 当前的关系又是如何?
RPC 又能被什么代替,或者是以一种新形态呈现?

很多货色就像年初的股市一样错综复杂,但将来肯定会有一个惟一的答案。将来在杭州,我在技术上又会经验什么变动,业内技术栈又回产生什么样的冲破和停顿。

难以想象将来三年后,我的技术栈将会变成什么样?毕竟从测试、运维、业务开发、再到基础架构,惟一不变的是变动。

最初的话

配上实习最初一天来到西厂前的纪念照,留念一段人生途程的完结。祝愿开源的 dubbo/dubbogo/dapr,在将来将会变得越来越弱小,越来越多的开发者能够应用它们,发明云原生更大的价值。

Dubbo 3.0 将于近期正式公布,敬请期待!如有趣味,可到 dubbogo 社区钉钉群 31363295 找我聊聊。

谨以此文致敬我的三段实习经验中帮忙我成长的各位导师和技术前辈们,并以此留念我行将逝去的大学生涯!

相干链接

  • 1 我在腾讯看点的导师 Steven https://blog.csdn.net/forever…
  • 2 dubbo-go https://github.com/apache/dub…
  • 3 Triple-go https://github.com/dubbogo/tr…
正文完
 0