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 这些步骤都封装起来,让用户对这些细节透明,下面是网上的另外一幅图,感觉一目了然:

相关推荐
码事漫谈6 小时前
消除AI幻觉,普通人能做的五件事
后端
金銀銅鐵7 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
Mk598789 小时前
给 Agent 装上对话框 —— AgentScope-Java 接入 Spring Boot 与 SSE 流式实战
后端
付威20239 小时前
从 Loop 到 Runtime:rpi Agent Loop 与 Cordis 的边界、取舍与组合
后端
IT_陈寒9 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
小成2023032026510 小时前
C++~07补充
开发语言·c++
考虑考虑10 小时前
JDK26的JEP 500属性
java·后端·java ee
Mia_墨黎11 小时前
2026 Windows 11 终端美化完全指南
前端·后端
foreverYoung11 小时前
给开源后台做等保适配,我发现了 5 个"看起来有、其实没用"的功能 从一个尴尬的现场测试说起
后端