本文主要内容来自于分布式系统:概念与设计
用惯了Web Services,但是很少知道RPC和RMI,更不用说它们之间的区别了,所以先总结一下RPC以及RMI到底是什么东西!!
在分布式系统通信中有两个最基本的远程调用技术,分别是:
- RPC:一个对远程节点上的过程的调用就像调用本地节点那样完成;
- RMI:与特定的Java RMI要进行区分,与RPC最大区别在于使用了面向对象的概念,那么在远程调用时可以把对象应用作为参数传递,它的实现最典型的就是Java RMI,但不限于Java RMI;
1、交互协议
远程调用允许客户端透明地调用在服务器程序中的过程,而这些服务器程序在不同的进程中,并且通常在不同于客户端的计算机中。如果要完成远程调用,必然要设计出一种协议让客户端和服务端来遵守,这样才能让调用者和提供调用过程者协同完成工作。其实我们对这种“协议”也不陌生,比如熟知的TCP/IP协议和Http协议等等。在远程调用过程中有多种交互协议,如下:
- 请求协议:可以用在不需要从远程操作中返回值或者客户端不需要得到远程操作执行确认的场景中,请求发送后客户端不需要等待应答消息而可以继续执行;
- 请求-应答协议:这种方式使我们最常见的,服务器的应答消息可以看做是客户端请求消息的一个确认;
- 请求-应答-确认应答协议:
这三种协议传递消息的方式如下:
协议 | 客户端 | 服务端 | 客户端 |
---|---|---|---|
请求协议 | 请求 | XX | XX |
请求-应答协议 | 请求 | 应答 | XX |