网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
如:
|
---|
09 帧发送器原理,源码作者为什么如此设计帧发送器 |
等等
|
---|
2.2.2、从gRPC-go框架中学到很多golang编程技巧 |
如,
|
---|
04 当某个步骤失败时如何对本步骤以及前面的步骤实现重试机制 |
|
---|
05 从源码中学到的技能,经过提炼后,都可以运用到自己的项目中去 |
|
---|
06 如何使用切片,通道存储结构,来实现有序读取数据,有序存储数据? |
等等,对go语言的提高有很大的帮助;
希望您学完之后:
|
---|
05 经过自己努力后,甚至可以成为gRPC-go框架的源码贡献者 |
等等
|
---|
4.1、模块1:grpc客户端是如何向grpc服务器端建立起rpc连接的 |
本模块主要介绍rpc链接建立阶段所涉及到的内容;
主要涉及到的内容:
grpc客户端跟grpc服务器端整个交互过程主要经历过那些阶段;如何建立起的tcp链接?
如果rpc链接失败后,grpc客户端是否尝试重试链接,每次连接的间隔时间是如何设置的;等等
本模块介绍解析器相关原理;
主要涉及到的内容:
解析器是用来做什么的?如何实现一个解析器,如何注册一个解析器?对grpc框架内置的解析器介绍?如何使用consul来自定义解析器;
本模块介绍平衡器相关原理;
主要涉及到的内容:
平衡器主要实现什么功能?客户端如何指定使用哪个平衡器呢?如何实现、注册、创建平衡器?pickFirst平衡器介绍、round_robin平衡器介绍、grpc+LoadBalancer平衡器介绍、grpc+nginx平衡器介绍、grpc+consul自定义解析器介绍等等;
|
---|
4.4、模块4:grpc客户端是如何向grpc服务器端发起rpc请求的以及处理流程 |
本模块介绍的原理以及流程:是在rpc建立连接基础之上的;也就是rpc连接建立后,客户端如何调用本地方法,服务器端如何接收请求,执行请求,反馈执行结果给客户端。
主要涉及到的内容:
在rpc请求阶段,主要经历了哪些过程;在客户端一侧,什么场景下,会触发流的创建?客户端是如何将请求服务的名称,方法名称等信息通知服务器端的?
以及如何将请求方法的参数值发送给服务器端的?客户端一侧,接收服务器端反馈执行结果的流程?grpc服务器端一侧,处理客户端的整体流程?
grpc服务器端对客户端的每次tcp请求,是单协程处理,还是多协程处理?等等;
本模块介绍帧接收器相关原理;每次客户端跟服务器端建立rpc连接后,就会创建各自的帧接收器,专门用来接收对方发送的帧;
主要内容涉及到:
grpc客户端帧接收器的原理介绍;grpc客户端帧接收器是如何处理不同的帧的?grpc服务器端帧接收器的原理介绍;服务器端接收到客户端的头帧后,如何处理?等等
本模块介绍帧发送器相关原理;每次客户端跟服务器端建立rpc连接后,就会创建各自的帧发送器,专门用来将各种类型的帧发送给对方;客户端跟服务器端的帧发送器原理是一样的。
主要内容涉及到:
帧发送器的整体流程介绍;如何将帧数据再内存里进行存储和读取?在同一个进程里如何使用通知的方式消费数据帧?帧发送器处理帧时有什么特点?帧发送器的基本流程介绍?
为什么源码作者将帧发送器的代码如何设计?客户端一侧,头帧的整体处理流程介绍?等等
本模块主要介绍grpc服务器端在接收客户端发送的数据帧时,是如何动态控制客户端发送的数据帧大小的;也可以称之为流量控制。
涉及到的内容:
滑动窗口的整体流程介绍;帧发送器是如何将数据帧发送给服务器端的;在服务器端一侧,帧接收器是如何将接收到的数据帧存储到本地的?
数据帧缓存到recvBuffer前的流控?从recvBuffer里读取数据时,如何调整流控指标?服务器端在真正执行客户端的请求方法时,是如何完整的读取到请求参数值的?
如何计算本次发送的数据帧的大小?服务器端发送的设置帧、窗口更新帧是如何影响客户端的帧大小的?
基于wireshark对grpc进行抓包分析:如何配置wireshark能够抓取grpc包,多场景抓包测试用例分析;等等
本模块对grpc框架中的取消功能cancellation进行介绍;
涉及到的内容:
取消cancellation功能的基本原理介绍;取消功能实现什么效果?客户端一侧,是如何处理取消功能的?服务器端一侧,是如何处理取消功能的?等等
本模块对grpc框架中的截止时间Deadline进行介绍;
涉及到的内容:
截止时间deadline跟取消功能cancellation的区别?截止时间可以发生在哪些阶段?客户端一侧,如何配置启动截止时间?
客户端一侧,当截止时间发生在不同的阶段,每个阶段是如何处理的?
服务器端一侧,是如何处理截止时间的?等等
本模块对grpc框架中的健康检测HealthChecking进行介绍;
涉及到的内容:
客户端是如何判定服务器端的服务的健康状态的?健康检测原理的整体流程图介绍;客户端的链接状态时如何更新为Ready状态的?
客户端如何判断服务器端的服务能够正常提供服务呢?服务器端健康检测Watcher的核心思想?健康检测运行时场景的异常场景处理?等等
本模块对grpc框架中的拦截器interceptor原理进行介绍;
涉及到的内容:
拦截器的分类;客户端如何使用拦截器;服务器端如何使用拦截器;服务器端何时触发拦截器流程?客户端何时触发拦截器流程?
拦截器的调度策略,即拦截器的执行过程?等等
本模块对grpc框架中的保持链接keepalive原理进行介绍;
涉及到的内容:
保持链接跟健康检测的区别?服务器端keepalive的原理图?服务器端何时触发keepalive功能的启动?当链接处于不同状态时,服务器端如何处理链接?
客户端一侧keepalive的原理图?服务器端跟客户端交互处理goAway帧的流程图;等等
本模块对grpc框架中多路复用multiplex原理进行介绍;
涉及到的内容:
grpc采矿机是如何实现多路复用的;实现多路复用的基本思路?grpc框架中,服务器端是如何区分不同的服务请求的?一个服务器请求,可能存在多个http2数据帧,
服务器端是如何存储不同服务请求的http2数据帧的?如何按顺序存储?如何按顺序读取数据帧呢?等等
|
---|
4.14、模块14:压缩特性compression |
本模块对grpc框架中压缩特性compression原理进行介绍;
涉及到的内容:
grpc框架是如何支持不同的压缩算法的?如何启动压缩特性?如何注册一个压缩算法?客户端一侧,压缩处理数据的原理?服务器端一侧,压缩处理数据的原理?
在客户端一侧,发送数据阶段,压缩器压缩数据的处理流程?在服务器端一侧,如何获取客户端采用的压缩算法呢?如何解压数据?如何让grpc框架支持lz4压缩算法呢?等等
本模块对grpc框架中的重试机制retry原理进行介绍;
涉及到的内容:
在grpc框架中什么场景下使用了重试机制?客户端一侧,如何启动、禁止重试机制功能?如何定义、使用重试策略呢?grpc框架中,实现重试机制的主体思路?
重试机制withRetry实现方式的特点?客户端是如何判断是不是允许重试呢?如果某个阶段失败了,客户端如何重试前几步的操作呢?等等
本模块对grpc框架中的元数据metadata原理进行介绍;
涉及到的内容:
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以戳这里获取
实现方式的特点?客户端是如何判断是不是允许重试呢?如果某个阶段失败了,客户端如何重试前几步的操作呢?等等
本模块对grpc框架中的元数据metadata原理进行介绍;
涉及到的内容:
[外链图片转存中…(img-vBl7Khx3-1715517676798)]
[外链图片转存中…(img-iDSzC4wR-1715517676799)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以戳这里获取