hadoop_rpc调用(1)
首先谈谈rpc的实现方式。
就底层实现方式来说,有同步和异步两种方式:
1. 同步调用:client发送一次rpc请求到server,在server返回结果之前,在client和server之间建立的connection一直被本次调用hold住,如果有其他的调用想使用此connection发送新的rpc请求,则必须等待。client端接收到server的返回结果之后,释放connection的占用,本次调用结束。 2. 异步调用:client发送一次rpc请求到server,client只向对应的connection写入请求即可,之后并不hold住connection;其他后续的调用可以继续向相同的connection里写入rpc的调用请求。当server返回结果,client读取每次rpc的对应调用结果。
上层对rpc调用的暴露的封装接口,可以是同步和异步的两种方式:
1. 同步调用:底层可以是同步方式或者异步的实现方式。这里值得一提的是,底层实现是异步方式,但是对外暴露的封装接口是可以转化成同步的方式的(就是一个简单的技巧而已wait—notify) 2. 异步方式:底层的实现方式一般也是异步方式。当然底层的实现也是同步,只不多这个时候上层要做额外的异步封装。
表 1 rpc调用的处理方式
具体的处理方式:
1.一个线程来处理所有连接(使用一个Selector) 2.一组线程来读取已经建立连接的数据(多个Selector,这里的线程数一般和cpu的核数相当); 3.一个线程池(这个线程池大小可以根据业务需求进行设置) 4.一个线程处理所有的连接的数据的写操作(一个Selector)