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

相关推荐
paopaokaka_luck14 分钟前
基于SpringBoot+Uniapp的健身饮食小程序(协同过滤算法、地图组件)
前端·javascript·vue.js·spring boot·后端·小程序·uni-app
Villiam_AY17 分钟前
Redis 缓存机制详解:原理、问题与最佳实践
开发语言·redis·后端
UQWRJ1 小时前
菜鸟教程R语言一二章阅读笔记
开发语言·笔记·r语言
岁忧2 小时前
macOS配置 GO语言环境
开发语言·macos·golang
朝朝又沐沐3 小时前
算法竞赛阶段二-数据结构(36)数据结构双向链表模拟实现
开发语言·数据结构·c++·算法·链表
魔尔助理顾问4 小时前
系统整理Python的循环语句和常用方法
开发语言·后端·python
Ares-Wang4 小时前
JavaScript》》JS》 Var、Let、Const 大总结
开发语言·前端·javascript
程序视点4 小时前
Java BigDecimal详解:小数精确计算、使用方法与常见问题解决方案
java·后端
你的人类朋友4 小时前
❤️‍🔥微服务的拆分策略
后端·微服务·架构
遇见尚硅谷4 小时前
C语言:*p++与p++有何区别
c语言·开发语言·笔记·学习·算法