hadoop ipc原理简介
一、为什么不使用RMI
最最主要还是因为RMI的可控性不够灵活,其次数据序列化格式不够精简。
这两点可以在实际编程中慢慢体会,ipc例子可以在网上搜到。
二、主要技术元素
包含四点:1、序列化对象(数据传输的核心)
2、反射
3、动态代理
4、Socket传输
三、原理
主要说明实现原理,忽略网络异常处理机制、权限、版本校验。
客户端调用远程方法时,通过动态代理运用反射机制将所需参数以及方法等封装成序列化对象通过Socket传输给服务端,在没有接受到返回值时一直Wait。服务端获取到序列化对象后通过反射机制调用指定的方法得到返回值,然后将返回值传输给客户端。客户端接受到返回值后被Notify。
四、代码
主要分为Client 与Server。
Client并不复杂,主要任务是封装方法参数,等待返回值。
Server相对复杂一点,包含一个Listener、多个Reader、多个Handler、一个Responder,并使用了多路复用Selector机制。Listener复则接受来自各个客户端的连接请求,Reader负责读取客户端连接的数据并放入阻塞队列中供Handler处理,Handler从阻塞队列中获取数据解析成方法请求通过反射调用方法得到返回值后,将值放入阻塞队列中供Responder处理,Responder从阻塞队列中获取返回值后传输给客户端,至此整个流程完毕!
五、Hadoop ipc缺点
不适合流式数据的传输,也不适合大数据的传输,鉴于此创建了一个流式RPC的组件,具体参考开源软件中的“流式RPC”