掌握 gRPC 和 RPC 的关键区别

news2024/11/17 12:24:38

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

1、RPC 的本质

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

讲得通俗一些:

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

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

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

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

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

RPC 示意图

2、RPC 解决的核心问题

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

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

3、RPC 的使用场景

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

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

4、RPC 的工作流程*

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

  • 调用方(Client)发起本地调用式的远程请求;
  • 客户端存根(Client stub)接收请求,将调用的方法名、参数等序列化为可网络传输的消息;
  • 客户端存根发送序列化后的消息给服务端;
  • 服务端存根(Server stub)接受消息并反序列化,以获取调用的方法名和参数;
  • 服务端存根执行本地调用获取结果;
  • 服务端返回执行结果给它的存根;
  • 服务端存根序列化执行结果,发送回客户端;
  • 客户端存根反序列化结果,并返回给客户端调用方;
  • 调用方(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) 返回结果。

gRPC 通信流程图

三、了解 JSON-RPC 接口

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

四、如何调试 gRPC

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

Apifox gRPC 调试

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

导入 .proto 文件

一元调用

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

一元调用

流式调用

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

流式调用

知识扩展:

  • REST API 简介 - RESTful Web 服务
  • 分布式系统框架对比:gRPC vs Dubbo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1379063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大厂秘籍】 - Redis持久化篇

创作不易,你的关注分享就是博主更新的最大动力, 每周持续更新 微信搜索【 企鹅君】关注还能领取学习资料喔,第一时间阅读(比博客早两到三篇) 求关注❤️ 求点赞❤️ 求分享❤️ 对博主真的非常重要 企鹅君原创|GitHub开源项目gith…

【算法】信使(最短路问题)

题目 战争时期,前线有 n 个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。 信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位)。 指挥部设在第一个哨所。 当指挥部下达一个命令…

<软考高项备考>《论文专题 - 63 质量管理(2) 》

2 过程1-规划质量管理 2.1 问题 4W1H过程做什么识别项目及其可交付成果的质量要求、标准,并书面描述项目将如何证明符合质量要求、标准的过程;作用:为在整个项目期间如何管理和核实质量提供指南和方向为什么做1、识别项目/产品质量要求和标…

debian 11 arm64 aarch64 D2000 平台编译 box86 box64 笔记

参考资料 https://github.com/ptitSeb/box86/blob/master/docs/COMPILE.md 源码地址 GitHub - ptitSeb/box86: Box86 - Linux Userspace x86 Emulator with a twist, targeted at ARM Linux devices deb在线源地址(打不开): Itais box86…

两个阅读英文论文的免费AI工具

大家好啊,我是董董灿。 本文会介绍我平时用到的两个免费的基于GPT的论文阅读平台,很好用,对于有英文阅读困难症的小伙伴(比如我)是真的提效。 1、 英文阅读困难症 在我的工作以及业余学习中,会时不时的需要翻看一些英文论文&…

GitLab任意用户密码重置漏洞(CVE-2023-7028)

GitLab CVE-2023-7028 POC user[email][]validemail.com&user[email][]attackeremail.com 本文链接: https://www.黑客.wang/wen/47.html

JavaScript保留字和预定义的全局变量及函数汇总

保留字也称关键字,每种语言中都有该语言本身规定的一些关键字,这些关键字都是该语言的语法实现基础,JavaScript中规定了一些标识符作为现行版本的关键字或者将来版本中可能会用到的关键字,所以当我们定义标识符时就不能使用这些关…

【Git】本地仓库文件的创建、修改和删除

目录 一、基本信息设置 1、设置用户名2、设置用户名邮箱 二、Git仓库操作介绍 1、创建一个新的文件夹2、在文件内初始化git仓库(创建git仓库)3、向仓库中添加文件 1.创建一个文件2.将文件添加到暂存区3.将暂存区添加到仓库 4、修改仓库文件 1.修改文件2.…

汽车级线性电压稳压器LM317MBSTT3G:新能源汽车的理想之选

LM317MBSTT3G是一款可调三端子正向线性稳压器,能够在 1.2 V 至 37 V 的输出电压范围内提供 500 mA 以上的电流。此线性电压稳压器使用非常简便,仅需两个外部电阻即可设置输出电压。另外,它采用内部电流限制、高温关断和安全区域补偿&#xff…

边缘计算:连接实时数据的力量与未来发展之路

边缘计算是一种分布式计算范式,它旨在将数据处理、存储和应用服务带到数据源的近端,即网络的“边缘”。在边缘计算模型中,算力和存储资源距离末端用户或数据源更近,这减少了数据在网络中传输的距离,从而降低延迟&#…

【Web】token机制

🍎个人博客:个人主页 🏆个人专栏:Web ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 机制基本: 优势: 结语 我的其他博客 前言 在当今互联网时代,安全、高效的用户身份验证和资源授…

关于Python里xlwings库对Excel表格的操作(三十二)

这篇小笔记主要记录如何【如何使用“Chart类”、“Api类"和“Axes函数”设置坐标轴标题文本内容】。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库…

Sip - Ubuntu 配置 miniSIPServer 服务器(测试用)

客户提供的账号过期了,简单搭建 SIP 服务器,以便测试使用。个人认为这个配置起来最为简单,且测试功能足够。 官网miniSIPServer - 基于 Windows 以及 Linux 平台的 VoIP (SIP) 服务器软件. miniSIPServer 可能是最容易使用的 VoIP(SIP) 服务器…

【国产mcu填坑篇】华大单片机(小华半导体)一、SPI的DMA应用(发送主机)HC32L136

最近需要用华大的hc32l136的硬件SPIDMA传输,瞎写很久没调好,看参考手册,瞎碰一天搞通了。。。 先说下我之前犯的错误,也是最宝贵的经验,供参考 没多看参考手册直接写(即使有点烂仍然提供了最高的参考价值。…

基于STM32和ESP8266的物联网应用开发与实现

基于STM32和ESP8266的物联网应用开发与实现可以实现智能家居、智能工业、环境监测等多种应用,它将结合STM32微控制器的实时控制能力和ESP8266无线通信模块的WiFi连接能力。在本文中,我们将介绍如何设计和实现这样的物联网应用,并提供相关的代…

2024年AMC8往年真题练一练和答案详解(6),还有全真模拟题

今天是1月13日,2024年AMC8正式比赛已经倒计时了,昨天AMC主办方给所有参赛选手发了短信通知,关于模拟竞赛的操作方式和实际比赛的要求指南,大家一定要认真阅读,严格按指南操作,六分成长也会详细为大家解读和…

SQL Server的彻底卸载的方式

这篇文章主要介绍了SQL Server的彻底卸载的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 SQL Server的彻底卸载与再次安装 可能大家已经有深刻体会,SQL Server的卸载十分繁琐。最让人头…

Web3的应用发展及其影响

Web3,又被称为去中心化Web,是互联网发展的一个阶段,其核心特点是数据的去中心化和用户自主权。近年来,随着区块链技术的不断成熟,Web3的应用也得到了广泛的关注和发展。在这篇文章中,我们将深入探讨Web3目前…

sqlilabs第五十一五十二关

Less-51(GET - Error based - ORDER BY CLAUSE-String- Stacked injection) 手工注入 源码 单引号闭合用注释(没有后续输出只能堆叠注入) 自动注入 和上一关一样 Less-52(GET - Bind based - ORDER BY CLAUSE-numeric- Stacked injection) 手工注入 数字类型 不用注释直接…

uniapp小程序当页面内容超出时显示滚动条,不超出时不显示---样式自定义

使用scroll-view中的show-scrollbar属性 注意:需要搭配enhanced使用 否则无效 <scroll-view class"contentshow" scroll-y :show-scrollbartrue :enhancedtrue><view class"content" :show-scrollbartrue><text>{{vehicleCartinfo}}<…