首先需要声明的是,我是基于Hadoop 3.0的源码
?什么是RPC
RPC:远程过程调用,怎么理解这个概念呢,就是说比如有两台服务器A、B,A服务器上的程序想要调用B服务器上的某个方法就像在本地调用一样,能够的到结果或者失败之后的异常。那么这个过程中涉及到几个部分呢。这里先举一个简单的例子来说明一下。
RPC可以简单的抽象成一个打电话的例子(虽然有所不同,但是初期这样可以有助于理解)。如果我们在公司因为下雨然后想关上家里的窗户,我们可能伸手去关掉吗?如果你不是在家办公显然不可能。但是你可以打电话叫你的家人或者房东帮你关上,并且叫他关上之后给你一个答复,所以你通过这个过程关上了窗户,这就是RPC,你通过远程调用了房东或者家人的手去把窗户关上了。那接下来看看这个过程需要解决的几个问题。
1、 通信问题:如果没有电话,那么上面这个过程肯定不可能实现,你也许说我公司离家近,我可以靠喊,但是喊也是一种通信,我们需要一种通信手段去和远程的服务器建立联系。在Hadoop中使用的是socket通信。
2、 序列化问题:我们在通电话的过程还需要将我们说的话转化成电磁波传送到房东的手机上在转化成声音,这就是一个序列化和反序列化的过程。在程序中我们也需要将调用的方法参数等等信息进行序列化,然后传输到远程服务器上,再反序列化成相应的对象参数。
我们暂时就这样去理解RPC,当然RPC不止这样。更