01 grpc-go源码剖析与实战之 图文专栏介绍 【关注+收藏+20万字+99篇文章】

在这里插入图片描述

已发表的技术专栏
0  grpc-go、protobuf、multus-cni 技术专栏 总入口

1  grpc-go 源码剖析与实战  文章目录

2  Protobuf介绍与实战 图文专栏  文章目录

3  multus-cni   文章目录(k8s多网络实现方案)

4  grpc、oauth2、openssl、双向认证、单向认证等专栏文章目录

5  零入门kubernetes网络实战  文章目录

gRPC-go原理图

为什么选择grpc-go源码呢

每当我们去面试的时候,经常有面试官问:有没有看过优秀的开源框架; 此时,就比较尴尬,有些源码框架,看过,但是又说不出来,只是简单的翻阅过。

而grpc-go源码呢?
相比于docker,k8s,etcd,istio等优秀源码来说,简单多了,完全是入门级别,而且rpc的基本原理,都大同小异。

为什么选择grpc-go源码呢?
  • 简单,好理解,容易上手,
  • 认可度高,已经在很多优秀框架中运行了
  • 不需要花太多时间,就可以掌控,
  • 掌握后,就可以在简历中注明自己在rpc方面的能力,
  • 不断提升加薪能力

1、背景介绍

  无论是分布式架构,还是微服务架构,服务之间如何高效、可靠性的通信是具有一定的挑战性的;那么,解决方案之一就是使用RPC通信

而由google开发的gRPC-go是一个高性能、开源和通用的RPC框架,面向移动和HTTP2设计。

  在涉及到网络通信的领域内,经常可以看到gRPC-go的身影;
  目前,已经在Kubernetes、Docker、Istio等优秀开源框架中广泛应用;因此,有必要对gRPC-go的核心原理进行深入了解,以便能够更好的为微服务架构,分布式架构提供安全、高效、可靠的网络通信服务。

2、专栏解读

  本专栏非常详细的介绍了gRPC-go的源码;

2.1、 专栏提供了什么?

01 600页
02 18个功能模块
03 99篇文章
04 20万字
05 60张逻辑原理图
06 在全网内第1次全面介绍流量控制原理
07 在全网内第1次全面介绍gRPC-go源码

来帮助大家了解gRPC-go框架的每个功能原理;

2.2、 阅读本专栏会有什么收获

2.2.1、熟悉gRPC-go框架的核心原理

如:

01 如何建立rpc连接,如何处理rpc请求
02 如何自定义平衡器,解析器
03 滑动窗口(流量控制)原理
04 重试机制原理
05 加密原理
06 认证(basic, Token, jwt)
07 如何让gRPC-go框架支持lz4算法
08 如何基于wireshark进行抓包分析
09  帧发送器原理,源码作者为什么如此设计帧发送器

等等

2.2.2、从gRPC-go框架中学到很多golang编程技巧

如,

01  如何使用上下文的?
02  如何比较两个数的大小?
03  gRPC-go框架是如何使用事件机制的
04  当某个步骤失败时如何对本步骤以及前面的步骤实现重试机制
05  从源码中学到的技能,经过提炼后,都可以运用到自己的项目中去
06  如何使用切片,通道存储结构,来实现有序读取数据,有序存储数据?

等等,对go语言的提高有很大的帮助;

3、本专栏最大的目的:

希望您学完之后:

01 是你go语言能力的一种体现
02 具备二次开发gRPC-go源码的能力
03 该技术能够成为你简历上的技术亮点
04 求职简历上可以注明熟读gRPC-go源码
05 经过自己努力后,甚至可以成为gRPC-go框架的源码贡献者

等等

4、专栏主要分为以下模块

4.1、模块1:grpc客户端是如何向grpc服务器端建立起rpc连接的

本模块主要介绍rpc链接建立阶段所涉及到的内容;
主要涉及到的内容:
  grpc客户端跟grpc服务器端整个交互过程主要经历过那些阶段;如何建立起的tcp链接?
如果rpc链接失败后,grpc客户端是否尝试重试链接,每次连接的间隔时间是如何设置的;等等

4.2、模块2:解析器原理以及实践介绍

本模块介绍解析器相关原理;
主要涉及到的内容:
  解析器是用来做什么的?如何实现一个解析器,如何注册一个解析器?对grpc框架内置的解析器介绍?如何使用consul来自定义解析器;

4.3、模块3:平衡器原理以及实践介绍

本模块介绍平衡器相关原理;
主要涉及到的内容:
  平衡器主要实现什么功能?客户端如何指定使用哪个平衡器呢?如何实现、注册、创建平衡器?pickFirst平衡器介绍、round_robin平衡器介绍、grpc+LoadBalancer平衡器介绍、grpc+nginx平衡器介绍、grpc+consul自定义解析器介绍等等;

4.4、模块4:grpc客户端是如何向grpc服务器端发起rpc请求的以及处理流程

本模块介绍的原理以及流程:是在rpc建立连接基础之上的;也就是rpc连接建立后,客户端如何调用本地方法,服务器端如何接收请求,执行请求,反馈执行结果给客户端。
主要涉及到的内容:
  在rpc请求阶段,主要经历了哪些过程;在客户端一侧,什么场景下,会触发流的创建?客户端是如何将请求服务的名称,方法名称等信息通知服务器端的?
以及如何将请求方法的参数值发送给服务器端的?客户端一侧,接收服务器端反馈执行结果的流程?grpc服务器端一侧,处理客户端的整体流程?
grpc服务器端对客户端的每次tcp请求,是单协程处理,还是多协程处理?等等;

4.5、模块5:帧接收原理介绍

本模块介绍帧接收器相关原理;每次客户端跟服务器端建立rpc连接后,就会创建各自的帧接收器,专门用来接收对方发送的帧;
主要内容涉及到:
  grpc客户端帧接收器的原理介绍;grpc客户端帧接收器是如何处理不同的帧的?grpc服务器端帧接收器的原理介绍;服务器端接收到客户端的头帧后,如何处理?等等

4.6、模块6:帧发送器原理介绍

本模块介绍帧发送器相关原理;每次客户端跟服务器端建立rpc连接后,就会创建各自的帧发送器,专门用来将各种类型的帧发送给对方;客户端跟服务器端的帧发送器原理是一样的。
主要内容涉及到:
  帧发送器的整体流程介绍;如何将帧数据再内存里进行存储和读取?在同一个进程里如何使用通知的方式消费数据帧?帧发送器处理帧时有什么特点?帧发送器的基本流程介绍?
为什么源码作者将帧发送器的代码如何设计?客户端一侧,头帧的整体处理流程介绍?等等

4.7、模块7:滑动窗口(流量控制)

本模块主要介绍grpc服务器端在接收客户端发送的数据帧时,是如何动态控制客户端发送的数据帧大小的;也可以称之为流量控制。
涉及到的内容:
  滑动窗口的整体流程介绍;帧发送器是如何将数据帧发送给服务器端的;在服务器端一侧,帧接收器是如何将接收到的数据帧存储到本地的?
数据帧缓存到recvBuffer前的流控?从recvBuffer里读取数据时,如何调整流控指标?服务器端在真正执行客户端的请求方法时,是如何完整的读取到请求参数值的?
如何计算本次发送的数据帧的大小?服务器端发送的设置帧、窗口更新帧是如何影响客户端的帧大小的?
基于wireshark对grpc进行抓包分析:如何配置wireshark能够抓取grpc包,多场景抓包测试用例分析;等等

4.8、模块8:取消功能cancellation

本模块对grpc框架中的取消功能cancellation进行介绍;
涉及到的内容:
  取消cancellation功能的基本原理介绍;取消功能实现什么效果?客户端一侧,是如何处理取消功能的?服务器端一侧,是如何处理取消功能的?等等

4.9、模块9:截止时间deadline

本模块对grpc框架中的截止时间Deadline进行介绍;
涉及到的内容:
  截止时间deadline跟取消功能cancellation的区别?截止时间可以发生在哪些阶段?客户端一侧,如何配置启动截止时间?
客户端一侧,当截止时间发生在不同的阶段,每个阶段是如何处理的?
服务器端一侧,是如何处理截止时间的?等等

4.10、模块10:健康检测health

本模块对grpc框架中的健康检测HealthChecking进行介绍;
涉及到的内容:
  客户端是如何判定服务器端的服务的健康状态的?健康检测原理的整体流程图介绍;客户端的链接状态时如何更新为Ready状态的?
客户端如何判断服务器端的服务能够正常提供服务呢?服务器端健康检测Watcher的核心思想?健康检测运行时场景的异常场景处理?等等

4.11、模块11:拦截器interceptor

本模块对grpc框架中的拦截器interceptor原理进行介绍;
涉及到的内容:
  拦截器的分类;客户端如何使用拦截器;服务器端如何使用拦截器;服务器端何时触发拦截器流程?客户端何时触发拦截器流程?
拦截器的调度策略,即拦截器的执行过程?等等

4.12、模块12:保持链接keepalive

本模块对grpc框架中的保持链接keepalive原理进行介绍;
涉及到的内容:
  保持链接跟健康检测的区别?服务器端keepalive的原理图?服务器端何时触发keepalive功能的启动?当链接处于不同状态时,服务器端如何处理链接?
客户端一侧keepalive的原理图?服务器端跟客户端交互处理goAway帧的流程图;等等

4.13、模块13:多路复用multiplex

本模块对grpc框架中多路复用multiplex原理进行介绍;
涉及到的内容:
  grpc采矿机是如何实现多路复用的;实现多路复用的基本思路?grpc框架中,服务器端是如何区分不同的服务请求的?一个服务器请求,可能存在多个http2数据帧,
服务器端是如何存储不同服务请求的http2数据帧的?如何按顺序存储?如何按顺序读取数据帧呢?等等

4.14、模块14:压缩特性compression

本模块对grpc框架中压缩特性compression原理进行介绍;
涉及到的内容:
  grpc框架是如何支持不同的压缩算法的?如何启动压缩特性?如何注册一个压缩算法?客户端一侧,压缩处理数据的原理?服务器端一侧,压缩处理数据的原理?
在客户端一侧,发送数据阶段,压缩器压缩数据的处理流程?在服务器端一侧,如何获取客户端采用的压缩算法呢?如何解压数据?如何让grpc框架支持lz4压缩算法呢?等等

4.15、模块15:重试机制retry

本模块对grpc框架中的重试机制retry原理进行介绍;
涉及到的内容:
  在grpc框架中什么场景下使用了重试机制?客户端一侧,如何启动、禁止重试机制功能?如何定义、使用重试策略呢?grpc框架中,实现重试机制的主体思路?
重试机制withRetry实现方式的特点?客户端是如何判断是不是允许重试呢?如果某个阶段失败了,客户端如何重试前几步的操作呢?等等

4.16、模块16:元数据metadata

本模块对grpc框架中的元数据metadata原理进行介绍;
涉及到的内容:
  客户端一侧,如何创建元数据?如何使用创建的元数据?如何将元数据信息存储到上下文中的呢?服务器端一侧,是如何接收元数据的?如何让服务端提供的服务中有能力使用元数据;等等

4.17、模块17:加密encryption

本模块对grpc框架中加密encryption原理进行介绍;
涉及到的内容:
  grpc框架支持哪几种加密?基于tls证书加密的测试用例介绍?基于ca的tls证书加密测试用例介绍?
链路建立阶段时的tls加密原理介绍:客户端一侧,加密原理介绍?服务器端加密原理介绍,介绍时配合wireshark抓包分析;如何配置wireshark能够抓取tls包?整体握手过程原理介绍;
数据帧发送阶段的tls加密介绍;如何使用在tls链路建立阶段双方协商好的数据作为加密数据的?使用协商好的加密数据开始对数据帧进行加密?等等

4.18、模块18:认证authentication

本模块对grpc框架中的认证authentication原理进行介绍;
涉及到的内容:
  如何理解认证?grpc+oauth2.Token认证方式介绍:如何配置认证?认证功能属于链路级别功能,还是属于流级别功能?服务器端一侧是如何获取认证信息的?如何来验证认证信息的?grpc+自定义认证方式介绍;grpc+Basic认证方式介绍:basic认证方式介绍;模拟Basic认证测试用例介绍;grpc+jwt认证方式介绍:jwt认证介绍;jwt-grpc-go认证测试用例介绍;客户端向服务器端发起授权码请求?如何具体校验jwt?如何生成jwt?等等

5、适宜人群

01  微服务研发工程师
02  中间件研发工程师
03  docker开发工程师
04  kubernetes开发工程师
05  对grpc-go感兴趣的爱好者
06  go语言研发工程师、go语言爱好者
07  计算机相关专业的大学生、研究生
   

6、如何订阅

感兴趣者,可点我订阅
如何订阅

7、如何联系

技术专栏交流群 QQ:342498897

订阅,进群,获取免费资料
go的相关资料,如:
go的相关资料



点击下面的图片,返回到 专栏大纲(目录)

gRPC-go源码剖析与实战之专栏大纲

专栏大纲(目录)

您的每一次点赞,每一次关注,每一次收藏都是对我工作的最大支持,让我们开始 吧!
gRPC-go源码剖析与实战之点赞之交

gRPC-go源码剖析与实战感谢

  • 37
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 44
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码二哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值