RPC原理技术

news2024/12/28 20:37:24

RPC原理技术

  • 背景
  • 介绍
  • 起源
  • 组件实现
  • 工作原理

背景

本文内容大多基于网上其他参考文章及资料整理后所得,并非原创,目的是为了需要时方便查看。

介绍

RPC,Remote Procedure Call,远程过程调用,允许像调用本地方法一样调用远程服务,主要解决跨内存空间调用函数/方法所面临的问题,具体分解成以下三个问题:

  • 如何确定要执行的函数?
    在本地调用中,函数主体通过函数指针函数指定,RPC中不能使用函数指针函数,因为内存地址完全不同。因此,调用方和被调用方都需要维护一个 function <-> ID 映射表,以确保能够调用正确的函数。
  • 如何表达参数?
    本地过程调用中传递的参数是通过堆栈内存结构实现的,RPC不能直接使用内存传递参数,因此参数或返回值需要在传输期间序列化并转换成字节流,反之亦然。
  • 如何进行网络传输?
    函数的调用方和被调用方通常是通过网络连接的,即 function ID 和序列化字节流需要通过网络传输,因此只要能够完成传输,调用方和被调用方就不受某个网络协议的限制。例如,一些RPC框架使用TCP协议,一些使用HTTP协议。

起源

RPC由Bruce Jay Nelson在其论文《Implementing Remote Procedure Calls》中提出,论文中说明的RPC程序包含5部分:

  • User
  • User Stub
  • RPC Runtime
  • Server Stub
  • Server

RPC

流程说明:

  1. User:作为RPC客户端发起远程调用(像调用本地方法一样)。
  2. User Stub:接收到来自 User 的远程调用请求后,编码调用的接口、方法和参数,并交给RPC客户端的 RPC Runtime 实例进行传输;
  3. RPC Runtime:RPC客户端的 RPC Runtime 实例执行传输后等待;
  4. RPC Runtime:RPC服务端的 RPC Runtime 实例接收到来自RPC客户端的远程调用请求后,将请求转发给RPC服务端的 Server Stub 处理;
  5. Server Stub:对接收到的请求进行解码,然后转发给RPC服务端的 Server 处理;
  6. Server:RPC服务端发起本地调用,将结果返回给RPC服务端的 Server Stub
  7. Server Stub:对请求处理结果进行编码,然后交给RPC服务端的 RPC Runtime 实例进行传输;
  8. RPC Runtime:RPC服务端的 RPC Runtime 实例传输编码后的请求处理结果;
  9. RPC Runtime:RPC客户端的 RPC Runtime 实例接收到请求处理结果后,将结果转发给RPC客户端的 User Stub 处理;
  10. User Stub:对请求处理结果进行解码,返回给 User

组件实现

RPC

  • RPC Server
    RPC服务端通过 RPC Server 组件导出(export)远程接口。
  • RPC Client
    RPC客户端通过 RPC Client 组件导入(import)远程接口的代理实现。
  • RPC Proxy
    远程接口的代理实现,实际的调用请求便是委托给 RPC Proxy 执行:封装调用信息,并将调用转交给 RPC Invoker 去实际执行。
  • RPC Invoker
    • 客户端:通过 RPC Connector 维持与服务端的通道 RPC Channel,并使用 RPC Protocol执行协议编码(encode),并将编码后的请求消息通过通道发送给服务端。
    • 服务端:负责调用服务端接口的具体实现并返回调用结果。
  • RPC Protocol:负责协议编解码。
  • RPC Connector:负责维持客户端和服务端之间的连接通道,并负责数据传输。
  • RPC Acceptor:负责接收客户端请求,同样使用 RPC Protocol 执行协议解码(decode)。
  • RPC Processor:接收解码后的调用信息,在服务端控制调用过程,包括管理调用线程池、超时时间等。
  • RPC Channel:数据传输通道。

工作原理

RPC原理

流程说明:

  1. Client像调用本地方法一样调用远程服务;
  2. Client Stub接收到调用请求后执行编码操作,将方法及参数进行序列化;
  3. Client Socket将消息发送给Server Socket;
  4. Server Socket接收到请求消息后发送给Server Stub;
  5. Server Stub对请求消息进行解码,并根据解码结果调用本地方法;
  6. Server本地方法执行,将执行结果返回给Server Stub;
  7. Server Stub对执行结果进行编码,并交由Server Socket进行传输;
  8. Server Socket将编码后的结果发送给Client Socket;
  9. Client Socket将结果交给Client Stub处理;
    10.Client Stub对结果进行解码并返回。

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

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

相关文章

VLAN创建及配置

V-- 虚拟 LAN ---局域网 ---地理覆盖范围较小的网络 MAN ---城域网 WAN ---广域网 VLAN ---虚拟局域网 --- 交换机和路由器协同工作后&#xff0c;将原先的一个广播域&#xff0c;逻辑上切分为多个 第一步:创建VLAN [Huawei]display vlan---查看VLAN信息 VID -- VLAN ID ----…

专为汽车内容打造的智能剪辑解决方案

汽车内容创作已成为越来越多车主和汽车爱好者热衷的活动。然而&#xff0c;如何高效、便捷地将行车途中的精彩瞬间转化为高质量的视频作品&#xff0c;一直是困扰着广大用户的一大难题。美摄科技凭借其深厚的视频处理技术和智能分析能力&#xff0c;推出了专为汽车内容记录而生…

C#Csharp,SharpPcap网络抓包程序及源码(适合网络分析直接使用或源码二次开发)

目录 1.程序简介2.程序截图3.程序源码 1.程序简介 C#Csharp,SharpPcap网络抓包程序及源码&#xff08;适合网络分析直接使用或源码二次开发&#xff09; 2.程序截图 3.程序源码 https://download.csdn.net/download/xzzteach/89325817

【Unity学习笔记】第十七 Quaternion 中 LookRotation、Lerp、Slerp、RotateTowards等方法辨析与验证

转载请注明出处: https://blog.csdn.net/weixin_44013533/article/details/138909256 作者&#xff1a;CSDN|Ringleader| 目录 Quaternion API 速览FromToRotation在Transform中的应用LookRotation 中upwards取Vector3.up和 transform.up的区别旋转时如何保持Y轴不变&#xff…

软管的高速非接触外径测量方案!单双轴测径仪多种类型!

一、传统测量方式的局限 在软管外径的测量领域&#xff0c;传统方式往往面临多重挑战&#xff1a; 1、挤压变形&#xff1a;传统的测量方式可能导致软管因挤压而变形&#xff0c;进而影响测量数据的准确性。 2、人为误差&#xff1a;测量结果常因人为因素而有所差异&#xff0c…

文本转语音软件-TTSMaker

一、TTSMaker介绍 TTSMaker&#xff08;马克配音&#xff09;是一款免费的文本转语音工具&#xff0c;提供语音合成服务&#xff0c;支持多种语言&#xff0c;包括中文、英语、日语、韩语、法语、德语、西班牙语、阿拉伯语等50多种语言&#xff0c;以及超过300种语音风格。 可…

春秋云境CVE-2023-50564

简介 Pluck-CMS v4.7.18 中的 /inc/modules_install.php 组件&#xff0c;攻击者可以通过上传一个精心制作的 ZIP 文件来执行任意代码。 正文 1.进入靶场 2.弱口令进入 admin123 3.找上传点 4.将木马打包&#xff0c;上传一句话木马 5.蚁剑连接6.得到flag

前端 CSS 经典:filter 滤镜

前言&#xff1a;什么叫滤镜呢&#xff0c;就是把元素里的像素点通过一套算法转换成新的像素点&#xff0c;这就叫滤镜。而算法有 drop-shadow、blur、contrast、grayscale、hue-rotate 等。我们可以通过这些算法实现一些常见的 css 样式。 1. drop-shadow 图片阴影 可以用来…

程序包org.springframework.boot不存在

springBoot项目启动报错 程序包org.springframework.boot不存在 1、检查依赖 首先检查pom文件判断依赖是否存在 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.4.5…

基于微信小程序的校园捐赠系统的设计与实现

校园捐赠系统是一种便捷的平台&#xff0c;为校园内的各种慈善活动提供支持和便利。通过该系统&#xff0c;学生、教职员工和校友可以方便地进行捐赠&#xff0c;并了解到相关的项目信息和捐助情况。本文将介绍一个基于Java后端和MySQL数据库的校园捐赠系统的设计与实现。 技术…

OFDM 802.11a的FPGA实现(二十一)发射主控模块MCU(含代码)

目录 1.前言 2.主控逻辑 3.Matlab 4.verilog 5.ModelSim 6.ModelSim仿真结构与Matlab自动化对比 完整工程链接&#xff08;含verilog和Matlab代码&#xff09;&#xff1a; https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzkxNjM0NDk2Nw&actiongetalbum&album…

MySql:多表设计-关联查询

目录 多表设计 代码 运行 数据库设计范式 设计三范式 1、第一范式&#xff1a; 2、第二范式&#xff1a; 3、第三范式&#xff1a; 多表设计_关联查询 外键 外键约束 代码 运行 注意&#xff1a; 应用 代码 运行 代码 运行 关联查询 含义&#xff1a; …

<项目> 云备份

目录 一、简单认识 二、实现目标 三、服务端程序负责功能及功能模块划分 四、客户端程序负责功能及功能模块划分 五、环境搭建 &#xff08;一&#xff09;gcc 7.3 &#xff08;二&#xff09;安装jsoncpp库 &#xff08;三&#xff09;下载bundle数据压缩库 &#xf…

通义千问AI免费批量写文章

简数采集器支持调用阿里通义千问AI大模型API接口&#xff0c;对采集的数据进行研究分析&#xff0c;内容创作等。 通义千问AI快速使用方法&#xff08;不用编程对接&#xff09; 目录 1. 注册申请通义千问API 2. 简数对接通义千问AI 3. 设置通义千问AI指令 4. 通义千问AI…

微软Edge

微软Edge浏览器概述 功能介绍 微软Edge是一款基于Chromium开源项目的网页浏览器&#xff0c;旨在提供更快的网页加载速度、更高的安全性和更好的用户体验。它支持多种操作系统&#xff0c;包括Windows、macOS、Android和iOS&#xff0c;能够满足不同用户的需求。Edge浏览器拥…

【论文极速读】 LLava: 指令跟随的多模态大语言模型

【论文极速读】 LLava: 指令跟随的多模态大语言模型 FesianXu 20240331 at Tencent WeChat Search Team 前言 如何将已预训练好的大规模语言模型&#xff08;LLM&#xff09;和多模态模型&#xff08;如CLIP&#xff09;进行融合&#xff0c;形成一个多模态大语言模型&#xf…

「云渲染课堂」3dmax渲染影响时间的原因有哪些

在3ds Max使用过程中经验丰富的用户普遍了解&#xff0c;渲染大型场景往往需要消耗更多的时间&#xff0c;尤其是在硬件配置相同的情况下。但有时候&#xff0c;我们可能会遇到一个反直觉的现象&#xff1a;在相同的硬件配置下&#xff0c;渲染小型场景所需的时间竟然超过了大型…

数据挖掘与机器学习——机器学习概述

一、什么是机器学习 机器学习的英文名称叫Machine Learning&#xff0c;简称ML&#xff0c;该领域主要研究的是如何使计算机能够模拟人类的学习行为从而获得新的知识。 机器学习与数据挖掘的联系&#xff1a;简单来说&#xff0c;机器学习就是让计算机从大量 的数据中学习到相关…

大创项目推荐 深度学习手势识别 - yolo python opencv cnn 机器视觉

文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…

MagicAnimate: Temporally Consistent Human Image Animation using Diffusion Model

show lab NUS&bytedancehttps://github.com/magic-research/magic-animate 问题引入 输入参考图片 I r e f I_{ref} Iref​和动作序列 p 1 : N [ p 1 , ⋯ , p N ] p^{1:N}[p_1,\cdots,p_N] p1:N[p1​,⋯,pN​]&#xff0c;其中 N N N表示的是帧数&#xff0c;输出的是 …