从旁观者到committer,我与brpc的故事

果冻虾仁 果冻虾仁     2022-12-04     754

关键词:

Apache是知名的开源软件基金会,旗下管理着众多流行的开源项目。如果你有给开源项目贡献过代码,那么你就可以称得上是一名开源项目的contributor。而Apache committer则更进一步,这个是Apache基金会官方认可的头衔,表达了对于某个项目的活跃贡献者的一种认可。brpc开源后被捐献给了Apache基金会孵化,所以brpc也是Apache所管理的众多开源项目中的一员。

今年9月,通过brpc的PPMC的票选,我成为了brpc项目的新晋committer,下面我来谈谈我和brpc的故事。

早在2017年我就开始关注C++的开源RPC框架,当时只有Facebook的thrift和Google的grpc相对出名。但也没有到一统江湖的地步。这和Dubbo在Java领域的影响力还有很大差距。在每个重度使用C++的公司中,几乎都有自己的RPC框架,腾讯也不例外。在腾讯甚至几乎每个部门都有自己的RPC框架,SNG的spp,WXG的srvkit,MIG的taf(开源版名为tars),我之前所在的部门,也有名为middle的rpc框架。若干年后,腾讯内部出现trpc,这已经是brpc开源之后的事了(据说trpc从brpc中借鉴了很多设计)。同年,百度开源了brpc。但当时的我并没过多关注,总感觉国内的开源项目和国际上互联网巨头作品可能还是有不少差距。时间到了2018年,在腾讯带我们干活的组内骨干跟我们说:“别老看业务代码,可以学习一下百度开源的brpc。”但后来我还是忙于做业务,最终也没有把这句话放到心上。

2018年我由于个人原因,从深圳来到北京。也跳槽去了百度,但是也没有过多接触brpc,因为我当时我在的团队(百度凤巢检索端)历史包袱严重,也有一套自己的RPC框架。所以我再一次和brpc失之交臂。但是我在学习本部门框架过程中,还是积累了很多通用知识的,为后来学习其他RPC框架也做了铺垫。另外当时我也有点私心,感觉brpc是开源的,什么时候学习都不着急,反而公司内部闭源的代码,是我在外面学不到的,所以当时精力主要做学习内部代码。

我真正开始深入学习brpc是在2020年,没错,我再一次换了工作。彼时由于工作关系,我开始频繁使用brpc。我这才发现一个现代的RPC框架,和我之前看的RPC框架,在设计上有很大不同。一改我对于国产C++ RPC框架的偏见。

陆陆续续发现很多让我喜欢的框架特性,比如:bthread:类似Go语言中Goroutine的M:N的用户级线程库。可以极为方便地实现并行调度。请求处理的网络模型可以不再是一个请求在一个线程中处理的传统模式。

单端口多协议的支持:一个RPC框架支持多种网络协议并不稀奇,但是很多框架做法都是为每种协议单独起一个监听端口。brpc用极低的开销实现了单个端口支持多种协议,这给日常开发工作带来极大便利。比如尽管你需要开发一个baidu_std服务,你仍然可以用curl发一个http+json的请求去自测,而无需一个特殊的client。

除此之外他还有丰富的配套工具链:brpc提供了很多工具以及内置服务。我个最常用的就是rpc_replay这个流量采样和回放工具。将线上流量进行采样,然后在开发或测试环境进行回放,可以极大地提高测试的真实性,尤其是对于请求字段比较多且复杂的情况(比如一个巨大的PB),自己构造参数会极为不便。除了工具之外,每个brpc服务启动后都会有一个内置服务的网页,通过这个网页可以方便地查看到服务当前的状态信息,甚至可以做profile。

去年我在github上通过提issue咨询过很多使用上的问题。与此同时我也开始阅读brpc源码。并在这个学习过程之中,输出了一些网络文章,算是对于brpc的传播尽过绵薄之力。

后来我开始尝试给brpc项目本身做贡献。一开始我只是发现了一些brpc文档以及代码注释中的错误,然后提交了修改PR。后面渐渐地做了一些代码bug修复和功能增强的工作。

比如我发现brpc的Channel在发送HTTP请求的时候,如果controller的http_request().uri()中未指定域名或IP的时候,那么发送出去的HTTP header中的Host字段,会默认用对端Server的ip:port 作为Host字段的值。但是在Channel是用域名做的初始化的时候,这样的处理并不友好。因为Nginx或Apache这种Web Server都有VirtualHost的功能,即同一个IP+端口上通过不同的域名(Host字段)路由到不同的服务上。后来我做了修改,当Channel是用域名初始化的时候,如果发送请求的时候uri没有指定域名,则用初始化的域名和端口来填充Host,而非ip和端口。这个PR历史历尽艰辛,和负责代码review的同学你来我往多个回合,最终合并。

日拱一卒,功不唐捐。8月下旬,brpc社区负责人谭钟意联系到我,表达了对我之前工作的认可,希望我继续努力,为社区做贡献。9月份,在被merge了几个PR之后,钟意再次联系到我,说我的工作得到大家认可,他会发起一轮投票,投票通过我就会成为committer。几天后,我成为了brpc社区新的committer。其实我真正开始使用和学习brpc也不过只有一年的时间,我当然也称不上是精通brpc。我还差得很远,感谢大家对我的认可,未来我会继续努力。

在参与贡献的过程之中,对brpc以及开源项目我也有了更深刻的认识。brpc早已经不是 baidu rpc,而是better rpc。committer们身处不同公司,但都为了一件事而努力,这种精神让人钦佩。另外就是Apache社区有一句话是“社区重于代码”,所以在勤勤恳恳地维护代码以后,维护社区也同样重要。比如积极解决issue中别人的提问以及参与内部讨论等等。

在成为committer之后,很多之前只听过名字的大神,我第一次感觉距离这么近。即感到荣幸,也感到惶恐。从旁观者到committer,想来奇妙。

从旁观者到committer,我与brpc的故事

Apache是知名的开源软件基金会,旗下管理着众多流行的开源项目。如果你有给开源项目贡献过代码,那么你就可以称得上是一名开源项目的contributor。而Apachecommitter则更进一步,这个是Apache基金会官方认可的头衔,... 查看详情

我与软件工程的故事

软件工程,直到报考之前我才第一次了解到这个专业的名字,而且就在那么一瞬间,就决定下来要学习这个专业,甚至没有了解到究竟什么是软件工程,学习的内容又是什么。可能是“软件”这个词汇,在那么一瞬间吸引到了我... 查看详情

从苏宁电器到卡巴斯基第34篇:我与卡巴斯基的邂逅(上)

前传——我与病毒的故事    当我还在读小学的时候,我们家就购置了一台386电脑。当时还是DOS时代,不友好的命令行界面实在让我不知道这个电脑究竟能干什么。后来有懂行的,告诉我电脑里面有游戏,于是我就... 查看详情

我与时间管理的故事

这是上家公司,在团队做的分享,还是挺有意思的,特此分享。初识树状文档记得刚来团队那会,每天早上有个站会,站会的任务就是把今天要做的事情写到树状文档里面,刚开始这样做我是不太认同的,因为在以前的公司并没有这... 查看详情

我与思否的故事,转眼就过了三年。|思否9周年

封面图源:Pixabay.com前言回顾过去的3年里,一次又一次的成长变更,让我觉得我应该写的什么来回忆一下“这段过去”,至此借思否9周年之际,来回忆一下在思否的三年。从何时开始?当年,从学校走出,离开学校之后的那一... 查看详情

#51cto学院四周年#我与学院的故事

写在前面的话:650)this.width=650;"src="https://img.baidu.com/hi/jx2/j_0002.gif"alt="j_0002.gif"/>1、到现在都没有太搞明白51CTO和51CTO学院之间的关系,我认为的是先有的51CTO,这是一个类似技术论坛的东东,然后才出的51CTO学院,这是一个汇聚全... 查看详情

51cto学院四周年-我与学院的故事

    对于51CTO这个平台我是在两年前知道的,由于我从事的是网络安全所以对知识功底的扎实程度也是有着很高的要求,而就在我对于学习资料的匮乏而一筹莫展的时候我发现了51CTO这个学习平台,里面丰富的课程... 查看详情

毕业一年我与java的故事(代码片段)

1自我介绍还有一个月就毕业一年了,从2020年7月开始暑期实习,辗转换了好几份工作,到今天2022年5月24日为止,满打满算有工作1年半了。科班出身,基础不扎实。2为什么选择Java科班出身,在大学里面基... 查看详情

openstack黄金十年:我与openstack的故事

导读:从2010年到2020年,OpenStack项目整整走过了十个春夏秋冬。不管是OpenStack基金会,还是积极参与OpenStack社区的厂商、企业乃至开发者,想必都有肺腑之言想对OpenStack倾诉。翻开记忆中OpenStack项目十年的故事,会不会别有一番... 查看详情

征文hadoop十周年特别策划——我与hadoop不得不说的故事

...线上问答、线下沙龙、大范围征文等多个环节。而本期“我与Hadoop不得不说的故事”则属于大范围征文中的一章。“我与Hadoop不得不说的故事“大型征文活动将聊聊你与Hadoop的那些事。你能够谈谈你在Hadoop技术方面 查看详情

我与javaboy的10年-从小白到资深架构(代码片段)

...老王从自己的亲身经历见证了Java技术的快速发展。关于我与Java的故事,老王从Java技术学习的三个阶段聊聊这10年来我是如何从一个编程小白成长为一名资深架构师,我相信这些经历不论是对在校学生、或即将踏入职场的... 查看详情

我与tdengine的故事

作者:蒋京辉故事从这里开始一、故事的开始其实本人实际从事java开发也只有三年左右的时间,在这三年的工作时间里,应该说本人完全没有接触过时序型数据库,仅仅是听说过而已,也从来也没有去了解过。但... 查看详情

聊聊我与流式计算的故事

聊聊流式计算吧,那一段经历于我而言很精彩,很有趣,想把这段经历分享给大家。1背景介绍2014年,我在艺龙旅行网促销团队负责红包系统。彼时,促销大战如火如荼,优惠券计算服务也成为艺龙促销业务中最重要的服务之一。... 查看详情

我与软件工程的故事

第一部分:结缘软件工程 你为什么选择软件工程专业?你认为你的条件如何?(必答)软工是你喜欢的领域吗?是你擅长的领域吗?你热爱这一专业吗?你对软工的热爱是怎样的? 在选择专业的时候,第一目标是老师。... 查看详情

我与软工的故事

结缘软件工程Q1:你为什么选择软件工程专业?你认为你的条件如何?(必答)软工是你喜欢的领域吗?是你擅长的领域吗?你热爱这一专业吗?你对软工的热爱是怎样的?  高中毕业前软件工程于我是陌生得不能再陌生的词... 查看详情

我与rt-thread的故事挚爱与热爱

...们彼此共同向前走的见证者。*本文源自开发者大会之【我与RT-Thread的故事】有奖征文活动,你有故 查看详情

关于想写我与java的故事,满脑子却都是与javacv纠缠不清的那段日子

前言又是一年初夏,深夜宛如昨日。想象一下博主此刻激动的心,颤抖的腿,敲着手里熟悉的键盘,哇~,这该死又动听节奏,直让人欲罢不能。键盘上长期敲打出来的手指印,见证着博主的每一次的成... 查看详情

关于想写我与java的故事,满脑子却都是与javacv纠缠不清的那段日子

前言又是一年初夏,深夜宛如昨日。想象一下博主此刻激动的心,颤抖的腿,敲着手里熟悉的键盘,哇~,这该死又动听节奏,直让人欲罢不能。键盘上长期敲打出来的手指印,见证着博主的每一次的成... 查看详情