go语言 | grpc原理介绍(一)

参考

https://www.nowcoder.com/discuss/389810396381683712?sourceSSR=search

这里是b站对应的csdn博客,比较详细的介绍grpc相关原理说明,首先是大概的一个流程图说明。


什么是 RPC ?

远程过程调用(RPC)是计算机科学中的一个深入研究的概念,它允许一个程序在远程地址空间中执行代码,就好像是本地操作一样。在其核心,RPC主要涉及两个关键方面:函数调用的透明性 和 底层的通信机制的抽象。

在 RPC 中,客户端和服务器都有一个称为 stub 的实体,它充当中介,转换或"序列化"函数调用及其参数,使其能够在网络上发送。序列化过程将数据结构或对象转换为可在网络上发送的字节流;在接收端,此流被"反序列化"回其原始格式。这种序列化和反序列化过程可以使用多种格式,如 XML、JSON 或更高效的格式如 Protocol Buffers。

通信层可以基于各种协议,如 TCP、UDP 或 HTTP/2。尽管这些细节对于调用者来说是透明的,但底层的实现确保数据的完整性和顺序,并处理网络的不稳定性,如超时、延迟和错误。


为什么要用 RPC ?

当我们的业务越来越多、应用也越来越多时,自然的,我们会发现有些功能已经不能简单划分开来或者划分不出来。

此时可以将公共业务逻辑抽离出来,将之组成独立的服务 Service 应用,而原有的、新增的应用都可以与那些独立的 Service 应用 交互,以此来完成完整的业务功能。

所以我们急需一种高效的应用程序之间的通讯手段来完成这种需求,RPC 大显身手的时候来了!


常用的 RPC 框架

  • gRPC:一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
  • Thrift:thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript,Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
  • Dubbo:Dubbo 是一个分布式服务框架,以及 SOA 治理方案,Dubbo自2011年开源后,已被许多非阿里系公司使用。
  • Spring Cloud:Spring Cloud 由众多子项目组成,如 Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具。

RPC 的调用流程

要让网络通信细节对使用者透明,我们需要对通信细节进行封装,我们先看下一个 RPC 调用的流程涉及到哪些通信细节:

  1. 服务消费方(client)调用以本地调用方式调用服务;
  2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
  3. client stub找到服务地址,并将消息发送到服务端;
  4. server stub收到消息后进行解码;
  5. server stub根据解码结果调用本地的服务;
  6. 本地服务执行并将结果返回给 server stub;
  7. server stub将返回结果打包成消息并发送至消费方;
  8. client stub接收到消息,并进行解码;
  9. 服务消费方得到最终结果。

RPC 的目标就是要 2~8 这些步骤都封装起来,让用户对这些细节透明,下面是网上的另外一幅图,感觉一目了然:

相关推荐
不正经学生3 分钟前
C语言结构体:自定义数据类型,让变量打包出行
java·c语言·开发语言·数据结构·算法
老一岁13 分钟前
c问题总结(1)
c语言·开发语言
TunerT_TQ1 小时前
Microsoft |Playwright CLI 源码静态审阅:从 5 个文件看浏览器自动化工具的工程边界
后端·开源·github
林森lsjs1 小时前
队列 FIFO 原理 & 手撕两种队列实现(链表 + 循环数组)—数据结构陆
java·开发语言·数据结构·队列
何以解忧,唯有..1 小时前
Python time 模块详解:时间处理与日期操作指南
开发语言·python
caimouse2 小时前
ReactOS 窗口系统分析(20):光标与图标 — cursoricon.c
c语言·开发语言
JavaGuide2 小时前
84.5K+ Star!这个开源编程 Agent 控制台,能统一管理 Codex、Claude Code,DeepSeek Harness 也能接入
后端·github
swipe2 小时前
RabbitMQ 实战:AI Agent 里异步处理的标配方案(手把手 + 4 种交换机全解析)
后端·面试·langchain
神奇小汤圆2 小时前
30张图,搞懂分布式追踪系统
后端