1.分布式系统中的通讯范型:
进程间通信:分布式系统进程间通信的相对底层的支持,包括消息传递原语,直接访问由互联网协议提供的API和对多拨通信的支持。
远程调用:
RPC | 被设计为在应用程序间通信的平台中立的方式,它不理会操作系统之间以及语言之间的差异。 支持多语言。 |
RMI |
RMI 采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。
RMI 采用stubs和skeletons来进行远程对象的通讯。
stub充当远程对象的客户端代理,有着和远程对象相同的远程接口。
远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的。
|
区别 |
RMI与RPC的区别在于:
1)方法是如何被调用的
对RMI来说,如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。
而在RPC中,当一个请求到达RPC服务器时,请求包含一个参数集和一个文本值,通常为“classname.methodname”形式。
这表明,请求的方法在“classname”类中,名叫“methodname”。
然后,RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。
这里的参数类型是与RPC请求中的类型匹配的。 一旦匹配成功,方法就被调用了,其结果被编码后返回客户方。
2)对传递信息的限制
RMI 调用远程对象方法,允许方法返回 Java 对象以及基本数据类型。
而RPC不允许传递对象,RPC服务的消息由外部数据表示(External Data Representation,XDR)语言来表示。
另外,RMI优于RPC或SOAP的一点是:在程序开发过程中因为对象或方法不匹配造成的错误可以在编译期被发现,而不用等到运行期。
|
2.间接通信:
组通信 | 消息传递给若干接收者 |
发布-订阅系统 | 即分布式基于事件的系统 |
消息队列 | 提供点对点服务,队列是生产者和消费者的中介 |
元组空间 | 元祖空间提供进一步的间接通信服务,进程能把任意的结构化数据项(称为元组)放到一个持久元组空间,其他进程可以在元组空间读或者删除元组。 |
分布式共享内存 | DSM,支持在不共享物理内存的进程之间共享数据。 |