Hadoop源码剖析07-远程过程调用(一)

为什么要用远程过程调用

  • 作为典型的分布式系统,Hadoop中各个实体间存在着大量的交互,远程过程调用让用
    户可以像调用本地方法一样调用另外一个应用程序提供的服务,而不必设计和开发相关的信
    息发送、处理和接收等具体代码,是一种重要的分布式计算技术,它提高了程序的互操作
    性,在Hadoop的实现中得到广泛的应用.

RPC原理

  • 简要地说,RPC就是允许程序调用位于其他机器上的过程(也可以是同一台机器的不同
    进程)。当机器A上的进程调用机器B上的进程时,A上的调用进程被挂起,而B上的被调
    用进程开始执行.调用方使用参数将信息传送给被调用方,然后通过传回的结果得到信息.
    在这个过程中,A是RPC客户,B是RPC服务器.同时,编程人员看不到任何消息的传递,
    其行为如同一个过程到另一个过程的调用一样.

常规过程调用与RPC通信的区别

常规的

  • 当theClinet需要调用一个远程过程的时候,通过theClinet将参数打包成一个消息,并附加被调用过程的名字(指明要调用服务器上的哪一个过程),然后发送消息到服务器,theClinet发送完消息以后,必须等待服务器的应答,这个时候,执行流是空闲的.

RPC

  • RPC的Server运行时会阻塞在接受消息的调用上,当接到客户端的请求后,它会解包以获取请求参数,这类似传统过程调用中,被调用函数从栈中接受参数,然后确定调用过程的名字调用相应过程。调用结束后,返回值通过主程序打包并发送回客户端
    Hadoop源码剖析07-远程过程调用(一)

实现RPC需要关注的三个问题

  • RPC的语法应该与高级程序设计语言中的本地过程调用的语法有相同的外观
  • RPC和本地调用的语义尽可能的类似,如参数传递中包含的语义
  • RPC的接受者(也就是服务器上业务代码的执行)应当如同一个传统的调用