Hadoop RPC

Hadopp作为分布式存储系统,为了便于各个节点之间的通信和交互,基于IPC进程间通信模型,实现了一套高效的轻量级RPC框架,这套RPC框架底层采取了javaNIO,java动态代理以及protobuf等基础技术。

RPC:Remote Procedure Call Protocol
远程过程调用协议,RPC基于TCP/UDP网络协议来传递RPC请求以及响应消息。

RPC采用客户端/服务端模式,客户端发送带参数请求,服务端会保持睡眠状态知道有调用请求到达为止。

1 RPC框架的结构:

  • 通信模块

  • 客户端Stub程序

  • 服务端Stub程序

  • 请求程序

  • 服务程序

Hadoop RPC_第1张图片
图片发自App

通信模块:

传输RPC请求和响应的网络通信模块,可以基于TCP/UDP协议,可以是同步/异步;Hadoop实现了ipc.Client类和ipc.Server类提供的基于TCP/IP Socket的网络通信功能,客户端可以通过Client类将序列化的请求发送到远程服务器,服务器会通过Server类接收来自客户端的请求。

客户端Stub程序

客户端的Stub可以看做是一个代理对象,它会将请求程序的RPC调用序列化,并调用Client.call()方法将这个请求发送给远程服务器,这些实现对客户端调用程序是完全透明的。
备注:默认序列化工具是protobuf
a

服务器端Stub程序

在服务器端,Stub程序会将远程客户端发送的调用请求和参数反序列化,根据调用信息触发对应的服务程序,然后将服务程序返回的响应信息序列化并发会客户端。

请求程序

请求程序会像调用本地方法一样调用客户端Stub程序,然后接受Stub程序返回的响应信息。

服务程序

服务器会接受来自Stub程序的调用请求,执行对应的逻辑,并返回执行结果。

2 使用Hadoop RPC框架的几个步骤:

  • 定义RPC协议

  • 实现PRC协议

  • 客户端获取代理对象
    获取一个RPC协议的代理对象,通过Java动态代理机制,这个RPC请求会由一个代理对象处理,这个对象会将RPC调用信息和参数序列化,然后通过Client.call()方法将这个请求发送给远程服务器

  • 服务器构造并启动RPC Server
    构造一个Server对象,使用这个对象来响应客户端的RPC请求。

3 Hadoop RPC实现

Hadoop RPC框架主要由三个类组成:

  • RPC类:
    对外提供一个使用Hadoop RPC框架的接口

  • Client类:
    用于实现RPC客户端功能,内部类有:Call 、Connection

  • Server类:

采用了多线程多Reator的设计模式,Server内部类有:Listener、Reader、Handler、Responder

用于实现PRC服务端功能,使用了线程池、JavaNIO、Reactor模式
Reactor模式:是一种广泛应用于在服务器端的设计模式,由单线程单Reator、多线程单Reator、多线程多Reator两种,处理流程是:应用程序向一个中间人注册IO事件,当中间人监听到这个IO事件后,会通知并唤醒应用程序处理这个事件。这个中间人其实就是一个不断等待循环的线程,它会接受所有应用程序的注册,并检查注册的IO事件是否就绪,如就绪则通知程序进行处理。


Boy-20180725

你可能感兴趣的:(Hadoop RPC)