本帖最后由 sstutu 于 2014-8-18 21:32 编辑
1.web请求其实是http协议,而你所说的web请求可能是在说通过界面的方式,hadoop有自己的REST API,所以你想通过rpc返回参数,也是可以用过web的方式的。
2.这里在说一下,为什么使用RPC:其实各种协议各有优点和缺点。
对于RPC有如下比喻:
RPC与是Socket的类比
两个老板手下各有一个负责接通MSN的秘书.这两个秘书就是基于RPC协议建立的会话层通信.老本不需要知道怎么使用MSN,只要告诉秘书,秘书就会通过MSN与对方建立会话请求和响应.而基于Socket的通信,老板需要会使用MSN,这样尽管老板需要事先培训一下MSN的简单使用常识,但若与对方通信时,无需经过秘书,效率更高.
也就说说:
Socket、RPC与http的区别与联系:
RPC使用简单方便,但是效率可能低一些。
Socket使用方便、灵活,但是开发麻烦。
socket是一个针对TCP和UDP编程的借口,你可以借助它建立TCP连接等等。而TCP和UDP协议属于传输层
http是个应用层的协议,它实际上也建立在TCP协议之上。
换一种方式:http是建立在tcp端口上的一种通信协议了,也是一种socket接口
这里再次总结:
也就是说本质是Socket、RPC与http的区别与联系本质是Socket、RPC的区别
而转回来:
RPC使用简单方便,但是效率可能低一些。
Socket使用方便、灵活,但是开发麻烦。
作者为什么选择RPC,可能是因为Hadoop集群大部分都是局域网的方式,即使是两个集群分隔两地(虽然很少),但是RPC也能完成通信。所以作者权衡使用了RPC的方式。
不过在想想,你们的集群目前是十几台,还是几十台,并且还会把集群一个在广州,一个在北京,这种可能性几乎很少。只要有点云技术常识,是不会这么干的。
关于RPC和Socket,可以参考下面贴子
RPC和Socket的区别
|