ScholarGate
助手

远程调用与中间件

远程调用允许程序像调用本地过程或方法一样,在另一台机器上调用过程或方法;中间件是提供这种以及通过网络实现相关抽象的软件层。

用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
下载幻灯片
Learn & explore
视频即将推出

Definition

远程调用是一种通信抽象,其中客户端使用本地过程调用接口调用远程进程上的操作,由底层中间件处理参数编组、传输和故障报告。

Scope

本主题涵盖远程过程调用(RPC)和远程方法调用、参数编组、绑定和命名、调用语义(至多一次、至少一次、恰好一次),以及实现这些功能的中间件层——对象代理、面向消息的中间件和现代RPC框架。它还涵盖了透明性的众所周知局限性:远程调用与本地调用不可避免的差异。

Core questions

  • 如何以本地过程调用的便利性来呈现网络交互?
  • 在消息丢失和进程崩溃的情况下,可以实现哪些调用语义?
  • 位置透明性的抽象在何处必然会失效?

Key theories

远程过程调用
RPC抽象将远程交互打包为看起来像本地调用的形式,客户端和服务器存根负责参数的编组和解组;即使要实现至多一次的语义,也需要仔细处理重传和重复检测。
中间件分层
中间件位于操作系统和应用程序之间,提供命名、编组和调用服务,范围从对象请求代理到面向消息和发布-订阅系统。
分布式透明性的局限性
延迟、部分故障、并发和内存访问意味着远程对象无法完全与本地对象区分开来,因此忽略这些差异的设计在负载或分区下往往会失败。

Clinical relevance

RPC和中间件是现代分布式软件的连接组织:微服务架构、服务网格和云API都建立在远程调用框架之上,其设计者必须明确地考虑调用语义和部分故障。

History

Birrell和Nelson在1984年的论文确立了RPC作为一种实用的抽象;1990年代出现了CORBA和Java RMI等面向对象的中间件,但Waldo及其同事对透明性局限性的有影响力的警告对其进行了制约;现代框架通过基于Web的轻量级、模式驱动的RPC延续了这一传统。

Debates

远程调用是否应该看起来与本地调用完全相同?
完全的位置透明性简化了编程,但隐藏了延迟和部分故障,导致系统脆弱;Waldo及其同事提出的相反观点认为,必须暴露分布式特性,以便开发人员可以明确处理故障。

Key figures

  • Andrew Birrell
  • Bruce Nelson
  • Jim Waldo
  • Andrew S. Tanenbaum

Related topics

Seminal works

  • birrell1984
  • waldo1994

Frequently asked questions

“至多一次”调用语义是什么意思?
它保证远程操作执行零次或一次,绝不多次,即使请求被重传。这是常见的实际目标,因为在故障下保证“恰好一次”执行要困难得多。

Methods for this concept

Related concepts