`

远程调用的语义

阅读更多

    远程调用由于涉及到服务器和客户端等多个节点以及需要通过网络通讯等,会引入更多的故障可能。本地调用的语义都是恰好一次 ,不会多也不会少。而远程调用的语义就比较复杂,依据三个选择将产生不同的语义:
1)重发请求消息:客户端是否重发请求,直到收到应答或者认定服务器故障为止
2)过滤重复消息:当客户端重发请求时候,服务器是否过滤重复的请求
3)重传结果:服务器是否保存结果消息的历史,以便服务器不用重新执行操作就能重传结果。

对这三个选择的不同组合将产生三种可能的远程调用语义:
重发请求消息 过滤重复消息 重传结果            语义

否            不适用       不适用             或许
是            否           重新执行操作       至少一次
是            是           重传结果           至多一次

或许调用语义
:远程方法可能执行一次,或者根本不执行(在消息遗漏或者服务器崩溃的情况下)

至少一次调用语义 :远程方法要嘛至少执行一次并返回结果,要嘛返回一个异常。因为启用了重发请求消息,服务器也重新执 行操作,因此远程调用至少执行一次,除非服务器崩溃;但是,由于服务器重新执行操作,如果调用不是幂等的,那么多次重复执行将产生副作用叠加,可能不符合 预期需求。对于幂等操作,至少一次调用语义是可以接受的。

至多一次调用语义 :在此语义下,服务器会过滤重复的请求,并且缓存执行的结果重传而非重新执行。因此远程调用同样也是 返回调用结果,或者一个异常。在返回结果的情况下,可以确认服务器恰好执行一次,与本地调用语义一样,不会有副作用叠加。如果返回异常,就是通知调用者没 有返回结果,远程调用要嘛执行了一次,要嘛根本没有执行。总之,远程调用至多执行一次。

Java RMI的调用语义是至多一次。

分享到:
评论

相关推荐

    dubbo_demo.zip

    需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。 RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。各种开发语言都有自己的RPC框架。Java中的RPC框架比较多,广泛使用的有RMI...

    在线语义视觉SLAM基础:C++语言程序中调用Python实现的图像分割网络、获取分割结果+源代码+文档说明

    在线语义视觉SLAM基础:C++语言程序中调用Python实现的图像分割网络、获取分割结果+源代码+文档说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传...

    python如何通过protobuf实现rpc

    rpc的主要功能是让分布式系统的实现更为简单,为提供强大的远程调用而不损失本地调用语义的简洁性。为了实现这个目标,rpc框架需要提供一种透明调用机制让使用者不必显示区分本地调用还是远程调用。rpc架构涉及的...

    RFC1057_RPC远程步骤呼叫协议说明书版本 2 .doc

    RFC:远程过程调用协议说明第二版 (RPC: Remote Procedure Call Protocol Specification Version 2) 备忘录状态 该备忘录表书了Sun为系统和其它系统用应用的标准,和我们期望因特网应用的一个考虑.现在该备忘录还...

    第32讲 RPC协议综述:远在天边,近在眼前1

    看到这么多问题,你是不是想起了我第一节讲过的这张图。本地调用函数里有很多问题,比如词法分析、语法分析、语义分析等等,这些编译器本来都能帮你做了。但是在远程调用中

    32-RPC协议综述:远在天边,近在眼前1

    看到这么多问题,你是不是想起了我第一节讲过的这张图。本地调用函数里有很多问题,比如词法分析、语法分析、语义分析等等,这些编译器本来都能帮你做了。但是在远程调用中

    erlwitness:按语义组跟踪过程(Erlang)

    erlwitness :语义过程组守望台。 erlwitness允许将gen_server事件(初始化,调用,强制转换,信息,状态更改)和特定于已标识实体的lager调用都集中到任意观察程序中。 例如:大型软件开发团队的远程活动跟踪器...

    java版商城源码下载-RLSB:RLSB技术又称大数据区块链黑客技术基于区块链5.0超融合一体机加云端全防御技术特殊恶意字符

    作为远程的本地代理,调用RPC运行时库来传输网络中的调用。Stub和RPC runtime屏蔽了网络调用所涉及的许多细节,特别是,参数的编码/译码及网络通讯是由stub和RPC runtime完成的,因此这一模式被各类RPC所采用。由于...

    RFC6020 - YANG语言标准中文.docx

    YANG是一种数据建模语言,被用来为NETCONF,NETCONF远程过程调用,NETCONF Notification操作的配置和状态数据进行建模。 本文档描述了YANG语言的语法和语义,在一个YANG module中定义的数据模型如何以XML的形式表示...

    rsamatlab代码-abstractRepresentationsInMTL:“MTL神经元中的抽象语义重新设置”的分析代码和数据(Reb

    内侧颞叶人类单神经元群体中抽象语义知识的表示。 托马斯·雷伯(Thomas P. Reber) 1,2 * ,马塞尔·鲍什(Marcel Bausch) 1 ,西奈·麦凯(Sina Mackay) 1 ,扬·博斯特罗姆(JanBoström) 3 ,克里斯蒂安·E·...

    OneAgent-SDK:描述Dynatrace OneAgent SDK的技术概念

    如何使用这个储存库 该存储库包含Dynatrace ... 尽管其他跟踪框架相当通用,但是Dynatrace OneAgent SDK具有更多语义,可以显式地对远程调用,数据库请求,Web请求,消息传递,进程内上下文传递进行建模。 为了

    基于网络构件的软件体系结构抽象模型 (2004年)

    为提高分布式网络软件系统的效率...系统采用构件Cache的机制和最少最近的动态映射远程构件的调度算法提高调用的命中率。最后通过实验对比了不同构件比率的软件系统,结果表明采用构件调度算法能够提高系统的运行效率。

    《UNIX网络编程 第2版. 第2卷, 进程间通信(中文版)》(W·Richard Stevens[美] 著)

    本书全面深入地讲解了各种进程间通信形式,包括消息传递、同步、共享内存及远程调用(RPC)。书中包含了大量经过优化的源代码,帮助读者加深理解。这些源代码可以从图灵网站本书网页免费注册下载。本书是网络研究和...

    UNIX网络编程 第2卷 进程间通信

    本书全面深入地讲解了各种进程间通信形式,包括消息传递、同步、共享内存及远程调用(RPC)。书中包含了大量经过优化的源代码,帮助读者加深理解。这些源代码可以从图灵网站本书网页免费注册下载。 本书是网络研究和...

    minima:另一个网络框架

    HTTP服务器最终是远程过程调用(RPC)的简写形式-它将函数名称(URL)分配给具体函数,提取参数,并通常缓解HTTP混乱中的代码。 现在是时候意识到它并按其实际方式来思考它了。 HTML太低级了,我们无法使用。 我们...

    UNIX 高级教程系统技术内幕

    10.4.2 远程过程调用(RPC) 10.5 NFS 实现 10.5.1 控制流 10.5.2 文件句柄 l0.5.3 mount 操作 10.5.4 路径名查找 10.6 UNIX 语义 10.6.1 打开文件权限 10.6.2 删除打开文件 l0.6.3 读和写 10.7 NFS 性能 10.7.1 性能...

    Java2核心技术.part5

    Java2核心技术第I卷.基础知识 目录: 译者序 ...5.7 远程方法调用与SOAP 第6章 高级Swing 第7章 高级AWT 第8章 JavaBean构件 第9章 安全 第10章 国际化 第11章 本地方法 第12章 XML 第13章 注释

    Java2核心技术.part3

    Java2核心技术第I卷.基础知识 目录: 译者序 ...5.7 远程方法调用与SOAP 第6章 高级Swing 第7章 高级AWT 第8章 JavaBean构件 第9章 安全 第10章 国际化 第11章 本地方法 第12章 XML 第13章 注释

    Java2核心技术.part1

    Java2核心技术第I卷.基础知识 目录: 译者序 前言 ...5.7 远程方法调用与SOAP 第6章 高级Swing 第7章 高级AWT 第8章 JavaBean构件 第9章 安全 第10章 国际化 第11章 本地方法 第12章 XML 第13章 注释

Global site tag (gtag.js) - Google Analytics