问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

深入浅出:gRPC与RPC技术详解

创作时间:
作者:
@小白创作中心

深入浅出:gRPC与RPC技术详解

引用
CSDN
1.
https://m.blog.csdn.net/weixin_44189802/article/details/139599778

RPC(远程过程调用)是一种重要的通信机制,它使得程序能够像调用本地函数一样调用远程服务。而gRPC作为基于HTTP/2的高性能RPC框架,更是广泛应用于微服务架构中。本文将从RPC的基础概念出发,深入讲解gRPC的工作原理及其使用方法。

一、远程过程调用协议简介

1、RPC的本质

首先,我们探讨一下什么是RPC。RPC,全称为Remote Procedure Call Protocol,直译来看就是远程过程调用协议。

讲得通俗一些:

  • RPC是一种通信机制
  • RPC实现了客户端/服务器通信模型

官方的定义可能会这样解释:它是一种协议,可以使程序能在网络上请求远程计算机上的服务,而无须关心底层网络技术细节。

RPC的构架可以分为三个层次:

  • 用户与服务器(负责业务逻辑,并调用本地的存根程序)
  • 存根程序(Stub)(负责封装和解封装约定语法和语义)
  • RPC运行时(RPCRuntime)(管理网络通信的最底层)

下面的示意图说明了典型的开发情景:前端代码调用后端服务

2、RPC解决的核心问题

RPC的设计解决了几个关键问题:

  • 协议一致性问题:举例来说,如何确保前端和后端能够就“0为是,1为否”的约定达成共识。
  • 传输协议的弹性:当面对网络错误、数据重传、丢失或性能瓶颈时,RPC如何应对。
  • 服务的发现机制:客户端应如何发现可用的服务器服务、访问哪个端口等。服务器可能会启动多个远程调用服务,监听在随机端口,客户端需要一种机制来探测这些服务。

3、RPC的使用场景

两个经典的应用示例包括:

  • 即时通讯软件
  • 微服务架构

4、RPC的工作流程

从调用到结果接收,RPC的过程概述如下:

  1. 调用方(Client)发起本地调用式的远程请求;
  2. 客户端存根(Client stub)接收请求,将调用的方法名、参数等序列化为可网络传输的消息;
  3. 客户端存根发送序列化后的消息给服务端;
  4. 服务端存根(Server stub)接受消息并反序列化,以获取调用的方法名和参数;
  5. 服务端存根执行本地调用获取结果;
  6. 服务端返回执行结果给它的存根;
  7. 服务端存根序列化执行结果,发送回客户端;
  8. 客户端存根反序列化结果,并返回给客户端调用方;
  9. 调用方(Client)得到最终的RPC调用执行结果。

5、RPC与HTTP的差异点

RPC和HTTP对比不完全是同等级别的比较,更恰当的是将RPC和"HTTP+RestFul"放在一起对比。

  • 传输协议方面:RPC不限于HTTP,它还可以选择TCP进行传输,而HTTP只工作在自身的协议之上。
  • 传输效率方面:RPC包含了HTTP2的特性,使得它在传输效率上优于标准的HTTP1。
  • 性能消耗方面:得益于HTTP2的特性(如二进制传输、头部压缩等),RPC在性能上的消耗相较于HTTP1会更低。
  • 负载均衡方面:大多数RPC框架自带负载均衡策略,而传统的HTTP方案则通常需要通过Nginx/HAProxy等工具实现。
  • 服务治理方面:RPC框架能实现自动通知和服务调整,而HTTP则往往需要手动通知和修改配置。

二、深入了解gRPC

1、gRPC概述

简单来说,gRPC是一个开源的RPC框架,它建立在HTTP2的基础设施之上,因而自然具备了HTTP2的一系列优势:

  • 二进制分帧的数据传输
  • 多路复用
  • 服务端推送
  • 头部压缩

2、gRPC的通信流程

如下图所示,通过gRPC进行远程服务调用时,客户端(client)仅需gRPC存根,通过Proto Request请求gRPC服务器,服务器则通过Proto Response(s)返回结果。

三、了解JSON-RPC接口

JSON-RPC是一种简洁的使用JSON格式数据的RPC传输协议,它通过HTTP进行通信。Postman是API开发中常用的工具,能够轻松实现JSON-RPC接口的测试与使用。

四、如何调试gRPC

Apifox提供基于.proto文件的gRPC接口调试功能,支持包含一元调用和流式调用。项目创建时,选择「gRPC项目」并导入.proto文件,即可开始调试,无需编写额外代码。

导入.proto文件之前,需要确认是否有其他依赖的.proto文件,并添加相应的依赖路径。

一元调用

通过将gRPC URL填入地址栏并点击「调用」按钮,即可实现一元调用。

流式调用

流式调用包括服务端流、客户端流和双向流。调用成功后,用户可以在消息标签区编写并发送消息。Apifox展示了时间线视图,按顺序分布显示调用状态、发送的消息和收到的消息。点击具体消息可以方便地查看详细信息。

知识扩展:

  • REST API简介 - RESTful Web服务
  • 分布式系统框架对比:gRPC vs Dubbo
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号