关于grpc:gRPCgo源码剖析与实战专栏介绍

42次阅读

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

1、背景介绍

无论是分布式架构,还是微服务架构,服务之间如何高效、可靠性的通信是具备肯定的挑战性的;那么,解决方案之一就是应用 RPC 通信;
而由 google 开发的 grpc-go 是一个高性能、开源和通用的 RPC 框架,面向挪动和 HTTP2 设计。
在波及到网络通信的畛域内,常常能够看到 grpc-go 的身影;
目前,曾经在 Kubernetes、Docker、Istio 等优良开源框架中广泛应用;因而,有必要对 grpc-go 的外围原理进行深刻理解,以便可能更好的为微服务架构,分布式架构提供平安、高效、牢靠的网络通信服务。

2、专栏解读:

本专栏十分具体的介绍了 grpc-go 的源码,编写了近 100 篇文章来帮忙大家理解每个性能的外围原理;

浏览本专栏不仅能够理解到 grpc-go 的外围原理;
如,如何建设 rpc 连贯,rpc 申请,滑动窗口 (流量管制) 原理,如何自定义 平衡器 解析器 重试机制 ,加密,认证,如何让 grpc-go 反对lz4 算法 等等;如何基于 wireshark 进行 抓包剖析; 还能够从 grpc-go 源码中学到很多技巧:如,grpc-go 框架是如何应用事件机制的,如何应用上下文的?如何比拟两个数的大小?当某个步骤失败时如何对本步骤以及后面的步骤实现重试机制等等,对 go 语言的进步有很大的帮忙;

本专栏 最大的目标 ,心愿您学完之后,该技术可能成为您的 技术亮点 ;比方,在求职简历上能够表明 熟读 grpc-go 源码 ,具备 二次开发 grpc-go 源码 的能力;通过本人的致力后,甚至能够称为grpc-go 框架的源码贡献者;也是证实你 go 语言程度的一种能力;心愿这一项技术可能称为您简历上的亮点之一。

3、专栏次要分为以下几个模块

3.1. 模块 1:grpc 客户端是如何向 grpc 服务器端建设起 rpc 连贯的

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

3.2. 模块 2:解析器原理以及实际介绍

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

3.3. 模块 3:平衡器原理以及实际介绍

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

3.4. 模块 4:grpc 客户端是如何向 grpc 服务器端发动 rpc 申请的以及解决流程

本模块介绍的原理以及流程:是在 rpc 建设连贯根底之上的;也就是 rpc 连贯建设后,客户端如何调用本地办法,服务器端如何接管申请,执行申请,反馈执行后果给客户端。
次要波及到的内容:
  在 rpc 申请阶段,次要经验了哪些过程;在客户端一侧,什么场景下,会触发流的创立?客户端是如何将申请服务的名称,办法名称等信息告诉服务器端的?
以及如何将申请办法的参数值发送给服务器端的?客户端一侧,接管服务器端反馈执行后果的流程?grpc 服务器端一侧,解决客户端的整体流程?
grpc 服务器端对客户端的每次 tcp 申请,是单协程解决,还是多协程解决?等等;

3.5. 模块 5:帧接管原理介绍

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

3.6. 模块 6:帧发送器原理介绍

本模块介绍帧发送器相干原理;每次客户端跟服务器端建设 rpc 连贯后,就会创立各自的帧发送器,专门用来将各种类型的帧发送给对方;客户端跟服务器端的帧发送器原理是一样的。
次要内容波及到:
  帧发送器的整体流程介绍;如何将帧数据再内存里进行存储和读取?在同一个过程里如何应用告诉的形式生产数据帧?帧发送器解决帧时有什么特点?帧发送器的根本流程介绍?
为什么源码作者将帧发送器的代码如何设计?客户端一侧,头帧的整体解决流程介绍?等等

3.7. 模块 7:滑动窗口(流量管制)

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

3.8. 模块 8:勾销性能 cancellation

本模块对 grpc 框架中的勾销性能 cancellation 进行介绍;
波及到的内容:
  勾销 cancellation 性能的基本原理介绍;勾销性能实现什么成果?客户端一侧,是如何解决勾销性能的?服务器端一侧,是如何解决勾销性能的?等等

3.9. 模块 9:截止工夫 deadline

本模块对 grpc 框架中的截止工夫 Deadline 进行介绍;
波及到的内容:
  截止工夫 deadline 跟勾销性能 cancellation 的区别?截止工夫能够产生在哪些阶段?客户端一侧,如何配置启动截止工夫?
客户端一侧,当截止工夫产生在不同的阶段,每个阶段是如何解决的?
服务器端一侧,是如何解决截止工夫的?等等

3.10. 模块 10:衰弱检测 health

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

3.11. 模块 11:拦截器 interceptor

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

3.12. 模块 12:放弃链接 keepalive

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

3.13. 模块 13:多路复用 multiplex

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

3.14. 模块 14:压缩个性 compression

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

3.15. 模块 15:重试机制 retry

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

3.16. 模块 16:元数据 metadata

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

3.17. 模块 17:加密 encryption

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

3.18. 模块 18:认证 authentication

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

4、合适人群

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

正文完
 0