gRPC-go源码剖析与实战 技术专栏介绍
ccwgpt 2024-10-13 01:32 74 浏览 0 评论
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:34249889
订阅,进群,获取免费资料
go的相关资料,如:
?
?
点击下面的 了解更多,即可找到。
相关推荐
- VUE3前端开发入门系列教程二:使用iView框架辅助开发
-
1、安装iView新框架,支持VUE3npminstallview-ui-plus2、编辑src/main.js,添加以下内容,导入js和css到项目importViewUIPlusfrom...
- 万能前端框架uni app初探03:底部导航开发
-
前言本节我们使用uniapp的底部导航功能,点击不同tab会显示不同页面,这个功能在实际项目开发中几乎是必备的。一、基础知识1.tabBar如果应用是一个多tab应用,可以通过tabBar配...
- Rust Web 开发框架,前端你可以选择哪个?
-
Rust构建一切。在如今流行的语言中,Rust可谓是将构建和高效作为自己优美的身姿在大众视野中脱颖而出。它是一门赋予每个人构建可靠且高效软件能力的语言。它有什么特性呢?高性能。Rust速度惊人且内...
- 连载:前端开发中纠结的Javascript框架(上)
-
如今,前端开发有着许许多多的框架和库。其中一些好用,一些却不尽人意。通常我们会习惯性运用某一概念,模块或句法。事实上,并没有什么万能工具。这篇文章是关于未来框架的发展趋势——那就是没有框架!我从以下几...
- 前端开发框架的演进架构:提升用户体验和开发效率
-
前端开发框架是现代Web应用开发的重要工具,它不仅可以帮助开发者构建复杂的用户界面,还能够提升用户体验和开发效率。随着Web技术的不断发展,前端开发框架也在不断演进,为开发者提供了更丰富、更高效的工具...
- Google应用Mesh-TensorFlow框架,让CNN也能处理超高分辨率图像
-
为了要处理超高分辨率医疗图像数据,Google开发了一种空间数据分区(SpatialPartition)技术,在不牺牲图像分辨率的条件下,分析超高分辨率图像。Google使用Mesh-TensorF...
- 大模型安全挑战加剧:框架层漏洞成新靶心
-
近日,360数字安全集团发布了一份关于大模型安全漏洞的报告,揭示了当前大模型及围绕其构建的框架和应用中存在的严重安全问题。报告显示,360近期研究发现了近40个大模型相关的安全漏洞,其中既包括二进制内...
- Keras 3.0正式发布:可用于TensorFlow、JAX和PyTorch
-
机器之心报道编辑:陈萍经过5个月的更新迭代,Keras3.0终于来了。「大新闻:我们刚刚发布了Keras3.0版本!」Keras之父FrancoisChollet在X上激动的...
- TensorFlow和Keras入门必读教程(tensorflow与keras版本对应)
-
导读:本文对TensorFlow的框架和基本示例进行简要介绍。作者:本杰明·普朗什(BenjaminPlanche)艾略特·安德烈斯(EliotAndres)来源:华章科技01TensorFlo...
- 谷歌官方回应“TensorFlow遭弃”:还在投资开发,将与JAX并肩作战
-
鱼羊发自凹非寺量子位|公众号QbitAI终于,谷歌出面回应“TensorFlow遭弃”传闻:我们将继续致力于将TensorFlow打造为一流机器学习平台,与JAX并肩推动机器学习研究。这段时...
- 2025 年的PHP :现代 Web 开发的强大引擎
-
程序员还在吐槽PHP过时?2025年的PHP8.4直接封神了。看看最近更新的属性钩子、强类型系统,加上Laravel这些框架,老语言早就脱胎换骨。十年前说PHP弱类型容易崩代码的,现在脸疼不?联合类...
- 前端内卷终结者?htmx如何让开发者告别200行JS只做一个按钮
-
当你用React写一个点赞按钮需要引入3个状态管理库、编写80行JSX和120行钩子函数时,htmx只需要一行HTML:<buttonhx-post="/like"hx-sw...
- NativePHP桌面版V1.0正式发布(元气桌面电脑版下载)
-
导读:各位小伙伴,使用PHP构建桌面级系统的利器,NativePHP来了。概述NativePHP是一个用于使用PHP构建桌面应用的框架。它允许PHP开发人员使用熟悉的工具和技术创建跨平台的原生应用...
- PHP Laravel框架底层机制(php基本框架)
-
当然可以,Laravel是最受欢迎的PHP框架之一,以优雅的语法和丰富的生态而闻名。尽管开发体验非常“高端”,它的底层其实是由一系列结构清晰、职责分明的组件构成的。下面我从整体架构、核心流程、...
- PHP框架之Laravel框架教程:2. 控制器、路由、视图简单介绍
-
2.控制器、路由、视图简单介绍我们先建立控制器,目录是:app/Http/Controllers,新建控制器Ding.php,代码如下:Ding.php:<?phpnamespaceA...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- VUE3前端开发入门系列教程二:使用iView框架辅助开发
- 万能前端框架uni app初探03:底部导航开发
- Rust Web 开发框架,前端你可以选择哪个?
- 连载:前端开发中纠结的Javascript框架(上)
- 前端开发框架的演进架构:提升用户体验和开发效率
- Google应用Mesh-TensorFlow框架,让CNN也能处理超高分辨率图像
- 大模型安全挑战加剧:框架层漏洞成新靶心
- Keras 3.0正式发布:可用于TensorFlow、JAX和PyTorch
- TensorFlow和Keras入门必读教程(tensorflow与keras版本对应)
- 谷歌官方回应“TensorFlow遭弃”:还在投资开发,将与JAX并肩作战
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)