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

本文主要是介绍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源码剖析与实战感谢

这篇关于01 grpc-go源码剖析与实战之 图文专栏介绍 【关注+收藏+20万字+99篇文章】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054299

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL