至多一次,一次一次

问题描述 投票:9回答:4

我正在研究分布式系统,当谈到RPC部分时,我听说过这两个语义(最多一次,一次只有一次)。据我所知,当我们不想重复执行时,最多只用于实例的数据库。

第一个问题:

这是如何实现的?服务器如何知道它不应该再次执行请求?它可能是重复的,但也可能是合法的请求。

第二个问题是:

标题中的两个语义有什么区别?我会读 :)。我知道最多一次可能根本不会被执行但是,究竟什么才能保证执行?

rpc semantics execution
4个回答
5
投票

在最多一次语义的情况下,如果失败则再次发送请求,但是在服务器上过滤请求以获得重复。

在一次语义中,请求再次发送,请求被过滤为重复,并且保证服务器在失败后重新启动并开始处理崩溃的请求。

但恰好一次是不可实现的,因为当客户端发送请求时会发生什么,并且在它到达服务器之前,服务器崩溃。无法跟踪请求。

http://de.wikipedia.org/wiki/Remote_Procedure_Call#Fehlersemantik


1
投票

凹凸,我也在研究这个,发现这个,希望它有所帮助(帮助我),

至少一次与最多一次?

让我们举个例子:获得一把锁 如果客户端和服务器保持运行,客户端会收到锁定 如果客户端失败,它可能有锁定(服务器需要一个计划!) 如果服务器失败,客户端可能有锁定 至少一次:客户不断尝试 最多一次:客户将收到一个例外 客户在例外的情况下做了什么? 需要实现一些特定于应用程序的协议 问服务器,我有锁吗? 服务器需要有重新启动时记住状态的计划 例如,将锁存储在磁盘上。 至少一次(如果我们永不放弃) 客户继续努力。服务器可能会多次运行程序 服务器必须使用应用程序状态来处理重复项 如果请求不是幂等的 但很难使所有请求都是幂等的 例如,具有锁定和请求ID的磁盘上的服务器良好存储 检查表每个请求 即使服务器出现故障并重新启动,我们也会得到正确的语义 什么是对的? 取决于使用RPC的位置。 简单应用: 最多一次很酷(更像是程序调用) 更复杂的应用: 在这两种情况下都需要应用程序级计划 不清楚马上给你一条腿 =>处理机器故障使RPC与过程调用不同

引自分布式系统和范例第2版


1
投票

纠正Hesper的答案 -

早些时候,正好一旦RPC无法实现,但2015年的研究论文[1]证明有可能这样做。基本上,RIFL范例保证了执行RPC的一次执行的安全性,并且持久存储

[1]:Lee,Collin,et al。 “实现大规模线性化和低延迟。”第25届操作系统原理研讨会论文集。 ACM,2015年


0
投票

对于第一个问题,我认为每个请求都应附加一个唯一的ID。因此,即使客户端发送两个具有完全相同命令的请求,服务器也能够通过请求的唯一ID进行过滤和区分。

对于第二个问题,我认为本文有助于定义rpc调用的语义。 http://www.cs.unc.edu/~dewan/242/f97/notes/ipc/node27.html

© www.soinside.com 2019 - 2024. All rights reserved.