跟我一起源码阅读之gRPC开篇

前言:很多程序员都知道,通过学习优秀的开源框架可以很大程度上解锁更多编码姿势和花样。但是没有目的,没有方法的去阅读开源项目,很容易就被庞大繁杂的代码给迷晕了!那么该如何以正确的姿势去阅读开源项目呢?请各位看官品鉴此文,跟我一起庖丁解牛,来阅读gRPC框架吧!

阅读此文你将收获

  • 了解什么是RPC
  • 了解该如何以正确的姿势阅读源码
  • 以gRPC为例来试验该如何阅读源码

大纲

  1. 什么是RPC
  2. 为什么要阅读源码
  3. 如何阅读源码
  4. 从gRPC开始的源码阅读

一、什么是RPC

第一次反思什么是RPC这个问题的时候,还是在夜读群里,有个哥们问怎么进行RPC调用,我说用gRPC,有个百度的老哥反问,如果没有gRPC怎么办?

我是谁?我在哪儿?

那么我们来看看什么是RPC呢?Remote Procedure Call(远程过程调用),说人话就是让你调用远程方法和调用本地(一个工程内)方法一样!

如何做到呢?

  1. 是不是撸码的时候调用个远程方法和本地调用方法一样?
  2. 既然是远程方法,那么调用的时候那些网络细节,与通信协议是否应该屏蔽好,让我们专注于业务开发?

这就是RPC!

其实RPC在我们日常生活中非常常见,MQ的客户端向broker消费消息的通信过程是RPC,Redis客户端向Redis请求操作的通信过程也是RPC。RPC就是整个系统架构中的血管,网络!

二、为什么要阅读源码

2.1 我的系统出问题了而我却不知道系列

在业务开发中,我们常常会选择各种开源软件作为项目架构的组成部分,例如用于缓存的Redis,用于消息队列的kafka或者Rocket MQ等等。

但很多开发同学长期停留在使用阶段,用到了,遇到了就去百度或者谷歌一下。这样的操作方式,一旦遇上了“疑难杂症”从哪里找一位老中医来给系统诊脉呢?


专治疑难杂症!

所以请以正确的姿势,正确的态度来面对你所使用的开源项目!那就是掌握其原理和实现细节,知其然亦知其所以然!当你的系统出现问题的时候,根据其一些表征现象,大概就能定位到问题,然后解决掉他!

2.2 我们团队没有大牛,所以我菜的正常系列

最近新冠肺炎疫情闹了一个笑话,一哥们出门,保安拦住他不让他出去,说你不戴口罩不准出去,那哥们说我出去就是为了买口罩!( ̄▽ ̄)"

很多时候像我一样的普通程序员也面临这样的这样的问题,没有高手帮忙code review,代码姿势提升不上来。没有技术大牛领头研究一些技术,自己像无头苍蝇一样东搞搞西搞搞,最后收效甚微!

如果你存在这些问题,那么就请你阅读源码!

你很棒,为你加油!

2.3 为什么阅读源码能让你进步

因为通过正确的姿势阅读优秀的开源项目,你会从这个项目里收获正确写代码的姿势,例如在路由方面的设计,gin和beego有什么不同?gin的context是怎么用的?那么中间件呢?iris和gin还有beego有什么区别?这些问题一旦你弄明白后你在框架设计路由和中间件的意识就已经直追行业大佬水平了!

还有某些让人头疼的“学院派”知识,例如网络,协议等等。通常没经历过高并发项目的同学会认为这些没啥用,因为平时用不上,随便怎么玩机器资源也不会被耗尽。但是如果你的项目流量一旦过大,各种问题都会暴露,这些问题是有迹可循的,但是如果你不甚了解这些基础知识,就算把问题的一堆线索暴露在你面前,你也只能干瞪眼~

蓝瘦,香菇

可别跟我说贵司用户量小,学不学都一样,反正用不上,我想套用一句装逼的话:

业务开发工程师,你真的愿意做一辈子 CRUD boy 吗?

三、如何阅读源码

不少人阅读源码的时候首先把项目给down下来,用IDE打开,然后找到main函数,从main函数开始一行行往下读,半天不到就不知道自己看到哪里去了,好像是这么回事,但又好像不是这样。感觉自己看懂了点,可是懂了的这些有是干啥的?

此之谓阅读源码从入main到放弃

学习开源代码该如何入手(鱼图).png

正确的源码阅读姿势为:

  • 阅读文档了解项目:

    1. 软件整体结构
    2. 了解其功能特性
    3. 涉及关键技术
    4. 实现原理
    5. 周边生态
  • 有一定的认知和感受

    1. 这个项目是干什么的?
    2. 能解决哪些问题?
    3. 适合在哪些场景使用?
    4. 适合在哪些场景使用?
    5. 如何使用?
  • 带着问题读源码

  • 执行目标

    1. 画出主要流程的流程图
    2. 画出主要流程的时序图

以问题为模块的阅读源码方式,花费少,收益高,阅读一部分就有一部分的收获,有一部分的提高

四、从gRPC开始的源码阅读

再从第一节了解了RPC是什么之后,我们将以gRPC为目标来实践第三节源码阅读的方法论!

A high-performance, open source universal RPC framework
--- gRPC官网

通过官方文档我们可以了解到gRPC的使用说明和方法,下图是一个典型的RPC调用图,内容不多,但是隐藏的信息可不少!

gRPC调用示例.png

从上图和文档中我们可以了解到,用gRPC来进行远程服务调用就仅仅需要gRPC Stub(Client)用Proto Request向远方的gRPC Server发起服务调用,然后远方的gRPC Server通过Proto Response(s)将调用结果返回给gRPC Stub。

实际上真的这么简单就能进行远程服务调用了吗?

当然不是,之所以这么简单的原因是gRPC这个RPC框架帮我们封装好了一切,让我们真正的像调用本地方法一样调用远程服务!

这些被屏蔽的细节,是我们后续系列文章将要探索和学习的内容。此前,我们不妨先分析分析,梳理一下,gRPC究竟做了啥?

gRPC调用图.png

一个gRPC从开始发起请求到返回总共要经历过序列化,编解码,以及网络传输这些内容。这些东西在我们使用gRPC框架做远程服务调用的时候完全感知不到!

至于gRPC的stub之间的连接管理,健康检查,负载均衡,异常重试,优雅启停机,熔断限流等等更是我们可以从gRPC源码中所能够获得的知识!

gRPC知识树

上图是我画的gRPC源码阅读的知识树,我希望在接下来的gRPC源码阅读系列文章中,能够和大家一起将其补全,成为自己的技能树!

尾声与说明

这几千个文字远远不足以表达我内心想说的话,像冰山一样,浮在水面上的永远只有一小部分。在接下来的文章中,我会尽我所能,将源码阅读以一种轻松愉快的方式表达出来。

说明:

第三节源码阅读的方法论来自李玥老师极客时间专栏《消息队列高手课-09 | 学习开源代码该如何入手?》

源码学习的思维导图在这里 https://github.com/first-giver/MindMapping.git

期待下期与各位读者再见!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容