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

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

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()函数。不过,当…

系统架构设计基础知识

一. 系统架构概述系统架构的定义 系统架构(System Architecture)是系统的一种整体的高层次的结构表示,是系统的骨架和根基,支撑和链接各个部分,包括构件、连接件、约束规范以及指导这些内容设计与演化的原理&#xff0…

机电一体化系统设计学习笔记——接口技术和机电一体化

一、接口 1. 定义 是指连接机电一体化系统中不同部件、设备或软件模块之间的边界,使它们能够相互通信、交换信息或共享资源的一种技术手段。 2.作用 实现系统间的通信:接口技术使得机电一体化系统中的各个部件能够进行数据交换和通信,实现…

产品经理功法修炼(5)之团队管理

点击下载《产品经理功法修炼(5)之团队管理》 产品经理功法修炼(1)之自我管理 产品经理功法修炼(2)之专业技能 产品经理功法修炼(3)之产品设计 产品经理功法修炼(4)之产品管理 产品经理功法修炼(5)之团队管理 1. 前言 产品经理的能力修炼并非局限于某一技能的…

Linux USB host driver 枚举前的源码分析

当我们插入一个USB设备,系统如何感知到USB设备的接入,后续发生了哪些细节?系统如何区分这些USB设备?主机侧如何和这些从机设备进行数据的交互? 这里参考Linux kernel 4.9.xx的代码,部分异常和次要代码在这里…

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;…

Spring自定义事件处理完全解析!2024美团春招面试题大全,超详细解答,必备收藏!

在2024年的技术招聘季中&#xff0c;随着Spring框架在企业开发中的广泛应用&#xff0c;对Spring框架深入理解和应用能力的需求日益增长。美团作为中国领先的生活服务电子商务平台&#xff0c;对技术人才的要求尤为严格&#xff0c;特别是在Spring框架的应用上。Spring自定义事…

如何确保正向代理处理的安全性?

确保正向代理的安全性是至关重要的&#xff0c;因为代理服务器作为中介&#xff0c;处理客户端和目标服务器之间的通信。以下是一些关键步骤和最佳实践&#xff0c;以确保正向代理的安全性&#xff1a; 1、访问控制&#xff1a; 1、使用访问控制列表&#xff08;ACL&#xff…

传动设计选型

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

浏览器插件自动化插件 Tampermonkey autojs 区别,脱离手动操作,代替人工操作

Tampermonkey autojs 区别 修改复制 Tampermonkey 和 AutoJS 都是浏览器扩展程序&#xff0c;用于在浏览器上运行 JavaScript 脚本。它们的主要区别在于&#xff1a; Tampermonkey 是一个通用的脚本管理器&#xff0c;支持多种浏览器&#xff0c;包括 Chrome、Firefox、Safar…

基于SpringBoot Vue学生信息管理

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

输出各位数字之和能被15整除的所有数

输出各位数字之和能被15整除的所有数 输出100到1000之间的各位数字之和能被15整除的所有数&#xff0c;输出时每5个一行&#xff0c;每个数输出占4列列宽。 public class Day5 {public static void main(String[] args) {int t,flag0;for(int i100;i<1000;i){t (i/100)(i…

使用STM32实现 蓝牙插座

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

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

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

【排序,找规律,站队型】

茵茵所在的合唱队共有N个人&#xff08;N为奇数&#xff09;。为了准备一次演出&#xff0c;老师开始为她们安排合唱队形了。大家都知道&#xff0c;合唱队形通常是中间高两端低的。老师是这样安排他们的队形的&#xff1a;先让所有的同学按高个儿在前的顺序排成一队。然后&…

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;本节笔者简单介绍一…

《LeetCode力扣练习》代码随想录——二叉树(二叉搜索树的最小绝对差---Java)

《LeetCode力扣练习》代码随想录——二叉树&#xff08;二叉搜索树的最小绝对差—Java&#xff09; 刷题思路来源于 代码随想录 530. 二叉搜索树的最小绝对差 二叉树-中序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* T…