远程过程调用(远程调用)

远程过程调用(远程调用)

1、什么是分布式计算

在计算机科学中,分布式计算(英语:Distributed computing),又译为分散式运算。这个研究领域,主要研究分布式系统(Distributed system)如何进行计算。分布式系统是一组电脑,透过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。组件之间彼此进行交互以实现一个共同的目标。把需要进行大量计算的工程数据分割成小块,由多台计算机分别计算,再上传运算结果后,将结果统一合并得出数据结论的科学。分布式系统的例子来自有所不同的面向服务的架构,大型多人在线游戏,对等网络应用。

目前分布式计算项目通常使用世界各地上千万志愿者计算机的闲置计算能力,通过互联网进行数据传输(志愿计算)。如分析计算蛋白质的内部结构和相关药物的Folding@home项目,该项目结构庞大,需要惊人的计算量,由一台电脑计算是不可能完成的。虽然现在有了计算能力超强的超级计算机,但这些设备造价高昂,而一些科研机构的经费却又十分有限,借助分布式计算可以花费较小的成本来达到目标。

2、什么是远程过程调用

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

如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用远程方法调用,例:Java RMI。

RPC是一种进程间通信的模式,程序分布在不同的地址空间里。如果在同一主机里,RPC可以通过不同的虚拟地址空间(即便使用相同的物理地址)进行通讯,而在不同的主机间,则通过不同的物理地址进行交互。许多技术(通常是不兼容)都是基于这种概念而实现的。

在这里插入图片描述

3、远程过程调用步骤

远程过程调用包含如下步骤:

  1. 客户过程以正常的方式调用客户存根;
  2. 客户存根生成一个消息,然后调用本地操作系统;
  3. 客户端操作系统将消息发送给远程操作系统;
  4. 远程操作系统将消息交给服务器存根;
  5. 服务器存根调将参数提取出来,而后调用服务器;
  6. 服务器执行要求的操作,操作完成后将结果返回给服务器存根;
  7. 服务器存根将结果打包成一个消息,而后调用本地操作系统;
  8. 服务器操作系统将含有结果的消息发送给客户端操作系统;
  9. 客户端操作系统将消息交给客户存根;
  10. 客户存根将结果从消息中提取出来,返回给调用它的客户存根。

以上步骤就是将客户过程对客户存根发出的本地调用转换成对服务器过程的本地调用,而客户端和服务器都不会意识到中间步骤的存在。

RPC 的主要好处是双重的。首先,程序员可以使用过程调用语义来调用远程函数并获取响应。其次,简化了编写分布式应用程序的难度,因为 RPC 隐藏了所有的网络代码存根函数。应用程序不必担心一些细节,比如 socket、端口号以及数据的转换和解析。在 OSI 参考模型,RPC 跨越了会话层和表示层。

4、如何传递参数?

1、传递值参数

传递值参数比较简单,下图是一个传递值参数的例子。其中 add(i,j),i 和 j 是参数,返回的是 i 和 j 的和

在这里插入图片描述

通过 RPC 进行远程计算的步骤有:

  1. 将参数放入消息中,并在消息中添加要调用的过程的名称或者编码。
  2. 消息到达服务器后,服务器存根堆该消息进行分析,以判明需要调用哪个过程,随后执行相应的调用。
  3. 服务器运行完毕后,服务器存根将服务器得到的结果打包成消息送回客户存根,客户存根将结果从消息中提取出来,把结果值返回给客户端。

当然,这里只是做了简单的演示,在实际分布式系统中,还需要考虑其他情况,因为不同的机器对于数字、字符和其他类型的数据项的表示方式常有差异。比如整数型,就有 Big Endian 和 Little Endian 之分。

2、传递引用参数

传递引用参数

传递引用参数相对来说比较困难。

单纯传递参数的引用(也包含指针)是完全没有意义的,因为引用地址传递给远程计算机,其指向的内存位置可能跟远程系统上完全不同。

如果你想支持传递引用参数,你必须发送参数的副本,将它们放置在远程系统内存中,向他们传递一个指向服务器函数的指针,然后将对象发送回客户端,复制它的引用。

如果远程过程调用必须支持引用复杂的结构,比如树和链表,他们需要将结构复制到一个无指针的表示里面(比如,一个扁平的树),并传输到在远程端来重建数据结构。

5、远程过程调用的优缺点

远程过程调用(RPC)是一种用于在分布式系统中进行通信的机制,它允许程序调用在不同机器上运行的远程服务。RPC有以下优点和缺点:

优点:

  1. 简化系统架构:RPC可以将分布式系统的各个部分连接起来,使得系统架构更加简洁和模块化。它允许开发人员将不同的模块作为独立的服务实现,并通过RPC进行通信,而不需要直接处理底层通信细节。

  2. 提高开发效率:RPC框架通常提供了一些工具和库,可以简化开发过程。它们提供了代码生成器、序列化和反序列化支持等功能,使得开发人员更容易构建分布式系统。

  3. 提供透明性:RPC使得在远程调用时,开发人员可以像调用本地函数一样调用远程函数。这种透明性让分布式系统的开发更容易理解和维护。

  4. 提供跨语言支持:RPC框架通常提供多种编程语言的支持,使得不同语言编写的服务可以相互调用。这使得开发人员可以使用他们最喜欢的语言来实现不同的部分,并且能够利用现有的代码库。

缺点:

  1. 性能开销:RPC在调用远程服务时需要进行序列化和网络传输,这会引入一定的性能开销。特别是在大规模分布式系统中,网络延迟可能成为性能瓶颈。

  2. 可靠性依赖于网络:RPC的可靠性取决于底层网络的稳定性。如果网络连接不稳定或发生故障,可能会导致调用失败或返回错误结果。为了提高可靠性,通常需要在RPC框架中实施重试、超时等机制。

  3. 版本兼容性:当服务端或客户端进行升级时,可能会导致接口的变化。这可能导致不同版本之间的兼容性问题,特别是在分布式系统中存在多个服务的情况下。必须谨慎处理版本管理,以确保不破坏系统的互操作性。

  4. 系统复杂性:RPC的使用会增加系统的复杂性。需要考虑各种问题,如并发访问、服务发现、容错机制等。处理这些问题可能需要额外的工作和技术栈知识。

互操作性。

  1. 系统复杂性:RPC的使用会增加系统的复杂性。需要考虑各种问题,如并发访问、服务发现、容错机制等。处理这些问题可能需要额外的工作和技术栈知识。

综上所述,RPC在简化系统架构、提高开发效率和提供透明性方面具有优势;然而,它也存在性能开销、可靠性依赖、版本兼容性和系统复杂性等缺点。因此,在使用RPC时需要权衡这些优缺点,并根据具体情况进行决策。

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

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

相关文章

学习周报:文献阅读+Fluent案例+水力学理论学习

目录 摘要 Abstract 文献阅读:物理信息的神经网络与湍流传质的非封闭机制模型相结合 文献摘要 提出问题 提出方案 实验设置 所需方程介绍 雷诺时均方程(RANS) K-epsilon两方程模型 神经网络框架 DNN部分 损失函数定义 PINN部分…

Francek Chen 的128天创作纪念日

目录 Francek Chen 的128天创作纪念日机缘收获日常成就憧憬 Francek Chen 的128天创作纪念日 Francek Chen 的个人主页 机缘 不知不觉的加入CSDN已有两年时间了,最初我第一次接触CSDN技术社区是在2022年4月的时候,通过学长给我们推荐了几个IT社区平台&a…

【Python】还在用print进行调试,你Out了!!!

1. 引言 Python 中最常用的函数是什么?像在大多数编程语言中,print() 函数是最常用的。我相信大多数开发者都会像我一样,在开发过程中多次使用它将信息进行打印。 当然,没有其他方法可以完全取代print()函数。不过,当…

c++算法学习笔记 (20) 哈希表

1.模拟散列表 // 拉链法 #include <bits/stdc.h> using namespace std; const int N 100003; int h[N]; int e[N], ne[N], idx; // 存链void insert(int x) {int k (x % N N) % N; // 让负数的余数变成正数(若直接加N,则可能溢出)e[idx] x;ne[idx] h[k];h[k] idx;…

传动设计选型

一. 齿轮选型 1齿轮传动概述 齿轮传动首先自然是一对对的&#xff0c;故也叫齿轮副。原理其实大家基本都知道&#xff0c;很多玩具中都会有齿轮传动的身影&#xff0c;比如小时候玩的四驱车。就是两齿轮互相啮合互相推动&#xff0c;然后输出旋转动力或者改变传递动力的方向&…

基于SpringBoot Vue学生信息管理

一、&#x1f4dd;功能介绍 基于SpringBoot Vue学生信息管理 角色&#xff1a;管理员、学生、教师 管理员&#xff1a;管理员进入主页面&#xff0c;主要功能包括对系统首页、个人中心、学生管理、教师管理、公告通知管理、课程类型管理、课程信息管理、选课信息管理、课程成…

使用STM32实现 蓝牙插座

硬件介绍 蓝牙模块HC-01 蓝牙模块&#xff0c;又叫做蓝牙串口模块 串口透传技术&#xff1a;透传即透明传送&#xff0c;是指在数据的传输过程中&#xff0c;通过无线的方式这组数据不发生任何形式的改变&#xff0c;仿佛传输过程是透明的一样&#xff0c;同时保证传输的质量&…

农业地物反演采用卫星影像技术方法

一、引言 随着空间技术的快速发展&#xff0c;卫星影像已经成为一种重要的工具&#xff0c;用于提供全球尺度的数据收集和分析。在农业领域&#xff0c;卫星影像被广泛应用于植物反演&#xff0c;以获取关于作物生长和健康的实时信息。本文旨在全面概述卫星影像在农业植物反演中…

baseline SE SP YI是什么?

SE、SP和YI是评估分类模型性能时常用的几个统计指标&#xff0c;特别是在医学影像处理、疾病诊断等领域&#xff0c;这些指标帮助了解模型对于正负类样本的识别能力。 SE (Sensitivity)&#xff0c;也称为真正率&#xff08;True Positive Rate, TPR&#xff09;或召回率&#…

鸿蒙ArkUI实例:【自定义组件】

组件是 OpenHarmony 页面最小显示单元&#xff0c;一个页面可由多个组件组合而成&#xff0c;也可只由一个组件组合而成&#xff0c;这些组件可以是ArkUI开发框架自带系统组件&#xff0c;比如 Text 、 Button 等&#xff0c;也可以是自定义组件&#xff0c;本节笔者简单介绍一…

hive词频统计---文件始终上传不来

目录 准备工作&#xff1a; 文件内容&#xff1a; 创建数据库及表 将文件上传到&#xff1a;上传到/user/hive/warehouse/db1.db/t_word目录下 hive里面查询&#xff0c;始终报错&#xff1a;&#xff08;直接查询也是不行&#xff09; 解决方案&#xff1a; 准备工作&am…

OPC UA遇见chatGPT

最近opc 基金会将召开一个会议&#xff0c;主题是”OPC UA meets IT“。由此可见&#xff0c;工业自动化行业也开始研究和评估chatGPT带来的影响了。 本文谈谈本人对OPC UA 与chatGPT结合的初步实验和思考。 构建OPC UA 信息模型 chatGPT 的确非常强大了&#xff0c;使用自然…

Stable Diffusion文生图技术详解:从零基础到掌握CLIP模型、Unet训练和采样器迭代

文章目录 概要Stable Diffusion 底层结构与原理文本编码器&#xff08;Text Encoder&#xff09;图片生成器&#xff08;Image Generator&#xff09; 那扩散过程发生了什么&#xff1f;stable diffusion 总体架构主要模块分析Unet 网络采样器迭代CLIP 模型 小结 概要 Stable …

C++设计模式:装饰器模式(四)

1、定义与动机 装饰器模式定义&#xff1a;动态&#xff08;组合&#xff09;地给一个对象增加一些额外的职责。就增加功能而言&#xff0c;Decorator模式比生成子类&#xff08;继承&#xff09;更为灵活&#xff08;消除重复代码 & 减少子类个数&#xff09;。 在某些情…

如何理解CDN?说说实现原理?

文章目录 一、是什么二、原理分析负载均衡系统缓存代理 三、总结参考文献 一、是什么 CDN (全称 Content Delivery Network)&#xff0c;即内容分发网络 构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内…

成为一个ATE工程师是什么体验?

当你成为ATE工程师&#xff0c;是什么感受&#xff1f; 按照业内资深工程师的玩笑话来说&#xff1a;整的是比劳斯莱斯还贵的设备&#xff0c;更高端的机台顶得起上海几套房。 1、什么是ATE测试&#xff1f; 一颗芯片的生命周期始于市场需求&#xff0c;从产品的定义与设计&…

蓝桥杯-dfs搜索模板题(一)

蓝桥杯-dfs搜索模板题&#xff08;一&#xff09; P2089 烤鸡P1088 火星人P1149 火柴棒等式P2036 PERKETP1135 奇怪的电梯结语 P2089 烤鸡 对于每个位置枚举数字 #include<bits/stdc.h>using namespace std;const int N1010;int n;int arr[N];//临时方案 int res0;//方案…

163 Linux C++ 通讯架构实战17,本地套接字整理对比,IPC:pipe,fifo,mmap,信号,本地套

IPC&#xff1a; Linux环境下&#xff0c;进程地址空间相互独立&#xff0c;每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到&#xff0c;所以进程和进程之间不能相互访问&#xff0c;要交换数据必须通过内核&#xff0c;在内核中开辟一块缓冲…

并发编程三大特性之可见性

一、什么是可见性&#xff1f; 可见性问题是基于CPU位置出现的&#xff0c;cpu处里速度非常快&#xff0c;相对CPU来说去主内存 获取数据这个事情太慢了&#xff0c;CPU就提供了 L1&#xff0c;L2&#xff0c;L3的三季缓存&#xff0c;每次去主内存拿完 数据后&#xff0c;数据…

使用LIKE进行模糊查询

查询包含字符‘e’的信息 % 代表不确定个数的字符&#xff08;零个或多个&#xff09; SELECT employee_id, first_name FROM employees WHERE first_name LIKE %e%; 查询以字符‘e’开头的字符 SELECT employee_id, first_name FROM employees WHERE first_name LIKE e%; _…