掌握 gRPC 和 RPC 的关键区别

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

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.mzph.cn/news/617659.shtml

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

相关文章

教程-右键用vscode(新窗口)打开文件或目录

通过本文可以提高效率,用起来更爽更高效。 本文实现了(windows系统): 右键-用vscode(当前窗口)打开文件或目录右键-用vscode-新窗口打开文件或目录 注意: 下面的安装路径要更改为您实际的路径 具体配置步骤&#x…

TS报错:类型‘object‘上不存在属性‘product_id’

问题: TS报错:类型object上不存在属性product_id。 解决办法: 下面是一个示例代码,演示了如何使用条件语句来安全地从对象中获取属性值: // 使用条件语句进行安全访问 if (dataSource.value.length > 0 &&…

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

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

imgaug库指南(19):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…

高防ip是什么,防护效果好吗

DDoS攻击是互联网最常见的网络攻击方式之一,通过大量虚假流量对目标服务器进行攻击,堵塞网络耗尽服务器性能,导致服务器崩溃,真正的用户无法访问。以前企业常用的防御手段就是高防服务器,也就是硬防,但由于…

Chrome DevTools 常用面板攻略

文章目录 前言一、概述1.1 简介1.2 DevTools 初步了解 二、设备模式(Device Mode)2.1 面板概述2.2 设备切换 三、元素面板(Elements)3.1 面板概述3.2 编辑样式3.2.1 添加、启用和停用 CSS 类3.2.2 添加或移除动态样式3.2.3 快速向…

如何优雅的只在当前页面中覆盖ui库中组件的样式(vue的问题)

首先我们vue文件的样式都是写在<style lang"less" scoped></style>标签中的&#xff0c;加scoped是为了使得样式只在当前页面有效。那么问题来了&#xff0c;看图&#xff1a; 我们正常写的所有样式&#xff0c;都会被加上[data-v-23d425f8]这个属性&…

XYplorer:双栏多标签文件资源管理器的高效选择

在文件管理的世界中&#xff0c;效率和便捷性是用户追求的关键。XYplorer作为一款专为Windows设计的文件资源管理器&#xff0c;以其独特的双栏多标签浏览、强大的文件搜索功能、以及高度可定制的界面&#xff0c;为用户提供了一种全新的文件管理体验。 XYplorer&#xff1a;速…

微信小程序开发学习笔记《11》导航传参

微信小程序开发学习笔记《11》导航传参 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。导航传参 官方文档 一、声明式导航传参 navigator组件的url属性用来指定将要跳转到的页面的路径。同时&#xff0c;路径的后面还可以携带参数…

第七讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part3.自建字库

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

Flink定制化功能开发,demo代码

前言&#xff1a; 这是一个Flink自定义开发的基础教学。本文将通过flink的DataStream模块API&#xff0c;以kafka为数据源&#xff0c;构建一个基础测试环境&#xff1b;包含一个kafka生产者线程工具&#xff0c;一个自定义FilterFunction算子&#xff0c;一个自定义MapFunctio…

redis夯实之路-集群详解

Redis有单机模式和集群模式。 集群是 Redis 提供的分布式数据库方案&#xff0c;集群通过分片( sharding )来实现数据共享&#xff0c;并提供复制和故障转移。集群模式可以有多个 master 。使用集群模式可以进一步提升 Redis 性能&#xff0c;分布式部署实现高可用性&#xff…

Linux中断 -- 中断应答、嵌套、

接上文&#xff0c;本文继续介绍Linux软件部分逻辑。 参考内核版本&#xff1a;kernel-4.19 目录 1.中断信号在各级中断控制器中的应答 2.supports_deactivate_key意义 3.中断嵌套 1.中断信号在各级中断控制器中的应答 本章主要从内核软件层面来看各中断控制器对中断信号处…

Android开发基础(三)

Android开发基础&#xff08;三&#xff09; 本篇将介绍Android权限管理。 Android权限管理 Android权限管理主要是为了保护用户的隐私和设备的安全性&#xff1b; 在Android系统中&#xff0c;应用在请求权限时必须进行明确的申请&#xff0c;根据权限的保护级别&#xff0…

软件测试最新项目合集【商城、外卖、银行、金融等等.......】

​项目一&#xff1a;ShopNC商城 项目概况&#xff1a; ShopNC商城是一个电子商务B2C电商平台系统&#xff0c;功能强大&#xff0c;安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城&#xff0c;系统PC后台是基于ThinkPHP MVC构架开发的…

NAND新一代接口Separate Command Address (SCA) 简介

通过NAND Flash总线传输的信号分为三种类型&#xff1a;命令&#xff08;Commands&#xff09;、地址&#xff08;Addresses&#xff09;和数据&#xff08;Data&#xff09;。这些信号利用DQ[7:0]时间分时复用技术&#xff0c;在不同的时间段分别进行传输。其中&#xff0c;数…

BikeDNA(五)参考数据的内在分析1

BikeDNA&#xff08;五&#xff09;参考数据的内在分析1 该笔记本分析用户提供的给定区域的参考自行车基础设施数据集的质量。 质量评估是“内在的”&#xff0c;即仅基于一个输入数据集&#xff0c;并且不使用数据集外部的信息。 对于将参考数据集与相应 OSM 数据进行比较的外…

redis — redis cluster集群模式下如何实现批量可重入锁?

一、redis cluster 集群版 在Redis 3.0版本以后,Redis发布了Redis Cluster。该集群主要支持搞并发和海量数据处理等优势,当 Redis 在集群模式下运行时,它处理数据存储的方式与作为单个实例运行时不同。这是因为它应该准备好跨多个节点分发数据,从而实现水平可扩展性。具体能…

Java内存结构

前文&#xff1a; 《Java8之类的加载》 《Java8之类加载机制class源码分析》 写在开头&#xff1a;本文为学习后的总结&#xff0c;可能有不到位的地方&#xff0c;错误的地方&#xff0c;欢迎各位指正。 JVM 在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数…

Ubuntu server配置ssh远程登录

使用如下命令进行安装 apt-get install ssh 安装好后启动 service ssh start 然后查看运行状态 然后用本机ping虚拟机 关闭本机和虚拟机防火墙 ufw disable 然后打开Xshell进行连接