RPC和RMI概念解析
远程调用(RPC):RPC将过程调用的通用编程抽象扩展到了分布式环境。一个调用过程可以像调用本地结点上的过程那样去调用一个远程结点上的过程。
远程方法调用(RMI):RMI和远程过程调用相似,不同的是前者因为以下功能更有优势:在分布式系统中使用了面向对象的编程概念,把对象引用扩展到全局分布式环境中,因此在远程对象中可以把对象引用作为参数。
RPC的请求-应答模型:
该协议基于三个通信原语:doOperation、getRequest、sendReply,如上图所示。该请求-应答协议将请求和应答进行匹配,用于提供传输保证。如果使用UDP数据包,那么就必须通过请求-应答协议提供传输保证。该协议可将服务器的应答消息作为客户端请求消息的确认。
请求响应过程:
客户使用doOperation方法来调用远程操作,方法参数指定远程服务器,待调用的操作以及操作请求的附加信息。其结果是包含应答内容的字节数组。调用doOperation方法的第一个参数是类RemoteRef的一个实例,这个实例描述了远程服务器的一个引用。该类提供了获取相关服务器的互联网地址和端口号的方法。doOperation方法向某个服务器发送请求信息,该服务器的网络IP地址,端口号在以参数形式出现的远程引用中指定。在发送请求信息后,doOperation方法通过调用receive方法接收应答消息,并从应答信息中提取结果,并将结果返回给调用者。doOperation方法的调用者在服务器执行请求的操作和传输应答信息给客户端进程之前是阻塞的。
服务器:服务器进程通过getRequest方法来获得请求信息。当服务器调用了指定的操作时,它会通过sendReply方法向客户发送应答消息。当客户端接收到应答信息时,原来的doOperation方法就会解除阻塞,客户端进程继续执行。
调用语义
至少一次调用语义:采用至少一次调用语义,调用者可能受到返回的结果,也可能收到一个异常。在收到返回结果的情况下,调用者应该知道该方法至少执行过一次,而异常信息则通知它没有收到执行结果。至少一次调用语义可以通过重发请求消息来达到,它屏蔽了调用或结果信息的遗漏故障。
至多一次调用语义:采用至多一次调用语义,调用者可能接收返回的结果,也可以接受一个异常。在接收返回结果的情况下,调用者知道该方法恰好执行过一次。而异常信息则通知调用者没有收到执行结果。在这种情况下,方法要么执行过一次,要么根本没执行。至多一次调用语义可以通过使用所有的容错措施来达到。