GPRC 和RPC 有什么区别?GPRC和RPC的区别是什么?-程序员宅基地

技术标签: 网络  rpc  服务器  

什么是RPC?

RPC (Remote Procedure Call)是远程过程调用,比如说现在有两台服务器A, B,一个在A服务器上的应用想要调用B服务器上的应用提供的某个,由于不在两个方法不在一个内存空间,不能直接调用,需要通过网络表达调用的语义和传达调用的数据。常存在于分布式系统中。

在分布式计算,远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。

为何有http协议之后,还要RPC调用?

RPC跟HTTP不是对立面,RPC中可以使用HTTP作为通讯协议。RPC是一种设计、实现框架,通讯协议只是其中一部分。

RPC的本质是提供了一种轻量无感知的跨进程通信的方式,在分布式机器上调用其他方法与本地调用无异(远程调用的过程是透明的,你并不知道这个调用的方法是部署在哪里,通过PRC能够解耦服务)。RPC是根据语言的API来定义的,而不是基于网络的应用来定义的,调用更方便,协议私密更安全、内容更小效率更高。 

RPC模式分为三层,①用户和服务器(负责处理业务逻辑,调用本地 Stub);②Stub处理客户端和服务端约定好的语法、语义的封装和解封装;③RPCRuntime负责最底层的网络传输。

在这里插入图片描述

 

简单的说, RPC 就是从一台机器 ( 客户端 ) 上通过参数传递的方式调用另一台机器 ( 服务器 ) 上的一个函数或方法 ( 可以统称为服务 ) 并得到返回的结果。

PRC架构组件  

 一个基本的RPC架构里面应该至少包含以下4个组件:

1 、客户端( Client ) : 服务调用方(服务消费者)
2 、客户端存根( Client Stub ) : 存放服务端地址信息,将客户端的请求参数数据信息打包成网络消 息,再通过网络传输发送给服务端
3 、服务端存根( Server Stub ) : 接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理
4 、服务端( Server ) : 服务的真正提供者

 

 具体调用过程:
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-10步完好地封装起来,也就是把调用、编码/解码的过程给封装起来,让 用户感觉上像调用本地服务一样的调用远程服务

RPC解决的三大问题 :

①协议约定问题(Stub) 指的是怎么规定远程调用的语法,怎么传参数等。用上面的类比,你怎么告诉你的朋友要玩什么游戏?是直接说游戏的名字,王者荣耀,绝地求生,还是说简称,王者,吃鸡,或者用 1 代表王者,2 代表吃鸡,只说 1 或 2。

②传输协议问题(RPCRuntime) 指的是在网络发生错误、重传、丢包或者有性能问题时怎么办?用上面的类比,你打电话时,刚说了打什么游戏,但是还没有收到对方回复,电话信号不好断了,这时候怎么处理?

③服务发现问题(插件比如:etcd) 指的是如何知道服务端有哪些服务可以调用,从哪个端口访问?服务端可能实现多个远程调用,在不同的进程上,随机监听端口,客户端要怎么才能知道这些端口呢?

 

什么是 GRPC? 

 gRPC 是谷歌开源的一个 RPC 框架,面向移动和 HTTP/2 设计,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等),本篇只介绍 Golang 的 gRPC 使用。因为 gRPC 对 HTTP/2 协议的支持使其在 Android、IOS 等客户端后端服务的开发领域具有良好的前景。gRPC 提供了一种简单的方法来定义服务,同时客户端可以充分利用 HTTP/2 stream 的特性,从而有助于节省带宽、降低 TCP 的连接次数、节省CPU的使用等。

  • 内容交换格式采用ProtoBuf(Google Protocol Buffers),开源已久,提供了一种灵活、高效、自动序列化结构数据的机制,作用与XML,Json类似,但使用二进制,(反)序列化速度快,压缩效率高。
  • 传输协议 采用http2,性能比http1.1好了很多

和很多RPC系统一样,服务端负责实现定义好的接口并处理客户端的请求,客户端根据接口描述直接调用需要的服务。客户端和服务端可以分别使用gPRC支持的不同语言实现。

 rpc是一种协议,grpc是基于rpc协议实现的一种框架。

grpc的解决rpc三大问题:

①协议约定。gRPC 的协议是 Protocol Buffers,是一种压缩率极高的序列化协议,Google 在 2008 年开源了 Protocol Buffers,支持多种编程语言,所以 gRPC 支持客户端与服务端可以用不同语言实现。

②传输协议。gRPC 的数据传输用的是 Netty Channel, Netty 是一个高效的基于异步 IO 的网络传输架构。Netty Channel 中,每个 gRPC 请求封装成 HTTP 2.0 的 Stream。

③服务发现。gRPC 本身没有提供服务发现的机制,需要通过其他组件。
 

简易理解

grpc是一种实现了rpc协议的框架,并且分别通过protocol buffer、netty channel 以及服务发现组件解决rpc的协议约定、传输协议、服务发现三大问题。 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_63131732/article/details/127908462

智能推荐

ubuntu 完全干净的卸载docker_ubuntu卸载docker-程序员宅基地

文章浏览阅读3.2k次,点赞3次,收藏11次。ubuntu 完全干净的卸载docker_ubuntu卸载docker

java毕业设计疫苗及注射管理系统(springboot+mysql+jdk1.8+meven)-程序员宅基地

文章浏览阅读1.1k次,点赞18次,收藏10次。这样,前端Vue.js和后端Spring Boot框架的接口紧密协作,而MySQL数据库则作为数据存储和管理的核心,确保了整个系统的数据一致性和高效处理。通过本系统的设计与实施,旨在为政府和卫生部门提供一个高效、可靠、易用的疫苗及注射管理平台,满足现代疫苗管理的需求,同时为学生提供一个实践和提升技能的机会。以上选题背景和意义内容是根据本选题撰写,非本作品实际的选题背景、意义或功能。推动行业发展:随着信息技术的发展,疫苗及注射管理系统的建立将推动整个卫生防疫行业的信息化、数字化进程,促进行业的创新和发展。

JSON详解-程序员宅基地

文章浏览阅读66次。原文出处:http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.htmlJSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。XML也是一种数据交换格式,为什么没有选择XML呢?因为XML虽然可以作为跨平台的数据交换...

Python水平自测!100道经典练习题.pdf(附答案)_python题库 file:pdf-程序员宅基地

文章浏览阅读1.4w次,点赞80次,收藏579次。自学Python最令人头痛的地方,不是学不进去,而是不知道自己学完之后是什么样的水平!篇幅原因本文只分享了前10道练习题。公号文章处放了前36道题,大家可以自行查阅:https://mp.weixin.qq.com/s/qvcrduneuvmfLEyfoQkf9Q文末附完整版Python100经典练习题.pdf下载方式,大家自行获取即可~1:Python有哪些特点和优点?答:作为一门编程入门语言,Python主要有以下特点和优点:可解释具有动态特性面向对象简..._python题库 file:pdf

Java中Double类型出现科学计数法问题解决方法_java double科学计数-程序员宅基地

文章浏览阅读1.7k次。Double类型接收参数出现科学计数法_java double科学计数

51单片机寻迹小车_51单片机巡线小车说明书-程序员宅基地

文章浏览阅读3w次,点赞136次,收藏1.1k次。# 基于51单片机的循迹小车(详细讲解+源码)作为一名大学生,这里我就简单谈谈我们小组做这个循迹小车的一个过程。主要是实现小车寻黑线行驶的这样一个功能,速度可以调节(定时器中断模拟PWM波实现)一丶硬件部分小车的主体框架是一个三轮的外在形态电源:采用2S可充电锂电池作为主电源供给(主要是给驱动,单片机供电)传感器:采用灰度传感器(2个)灰度传感器工作原理很简单,下面有介绍,它和单片机之间的通信就是通过代码来体现的:两个灰度传感器的信号输出端(DO,这里可以定义两个变量分别保存他们的输出信号)_51单片机巡线小车说明书

随便推点

5PTA7-4 作品评分_7-4 评委打分java-程序员宅基地

文章浏览阅读789次。全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。输入数据包括两行: 第一行为n,表示n个评委,n>2。输出平均分,结果保留两位小数。_7-4 评委打分java

基于Pytorch的从零开始的目标检测 | 附源码-程序员宅基地

文章浏览阅读2.2k次。01. 引言目标检测是计算机视觉中一个非常流行的任务,在这个任务中,给定一个图像,你预测图像中物体的包围盒(通常是矩形的) ,并且识别物体的类型。在这个图像中可能有多个对象,而且现在有各种..._基于pytorch的目标检测

【youcans 的 OpenCV 例程200篇】128. 形态算法之骨架 (skimage)_c++opencv骨骼化-程序员宅基地

文章浏览阅读5k次,点赞3次,收藏28次。形态骨架(morphological skeleton)是一种细化的结构,指图像的骨骼部分,用于描述物体的几何形状和拓扑结构,是目标物体重要的拓扑描述。图像的细化是对二值图像进行骨架提取,删除不需要的轮廓点,只保留其骨架点。skimage 中提供了函数 **skimage.morphology.skeletonize** 可以获取图像的骨骼。_c++opencv骨骼化

SQL Server 2008 R2 Developer Edition图文安装教程_sql server 2008 developer-程序员宅基地

文章浏览阅读2.6k次。 转载自:https://blog.csdn.net/lucky51222/article/details/72953853本文主要以截图的方式,详细说明SQL Server 2008 R2 Developer Edition的安装过程。1.下载SqlServer的64位安装包如下: 2.双击安装首先将安装可执行程序拷贝到其他文件夹下然后默认解压路径为:C:\Users..._sql server 2008 developer

ACE的使用及其核心模块讲解等_ace使用-程序员宅基地

文章浏览阅读2.9k次。下面为本人在使用ACE中遇到的一些问题的汇总,只介绍了大体的思路,具体的细节还需进佐证。 1. ACE配置模块的使用 就一个正常项目而言,一个配置文件是必不可少的,那就先从这里入手了。linux/unix 程序可能经常用到命令行方式,不过我还是比较喜欢windows 的 ini 格式的,当然,有xml 的更好,不过 ACE 里暂时没有提供。配置文件的使用很简单,ACE 提供的类也很友好。代_ace使用

python飞机大战源代码(可直接运行)_飞机大战python源代码-程序员宅基地

文章浏览阅读5.6w次,点赞60次,收藏96次。喜欢的点个赞支持一下哦联系方式见评论区--------------欢迎大家一起探讨-----------------------------------------------------------------具体的代码:settings配置import pygameclass Settings(object): """设置常用的属性""" def __ini..._飞机大战python源代码

推荐文章

热门文章

相关标签