首先谈谈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调用的处理方式
底层实现方式 | 暴露的接口 | 处理结果的方式 |
同步 | 同步 | 直接读取结果 |
异步 | 同步 | wait-notify处理结果 |
异步 | 异步 | 注册回调函数 |
通过阅读hadoop的rpc实现代码,可以知道,其采用的是底层使用异步发送数据;上层以同步方式暴露接口。因此,有几个问题需要处理(其实,一般的网络调用,也就这些问题):
- 1.怎么标识同一个请求,即服务器返回的结果必须与请求对应起来(切记,这很重要,如果请求1得到请求2的结果,如果服务器没有对这种异常进行处理的话,整个client-server的通信就乱套了,这种情况在实际开发中还真遇到过)。
- 2.怎么处理超时情况,一般而言,client-server之间的通信,发送一个请求后,若sever没有返回结果,不会无限制的等待下去,因此都会设置一个超时时间,进行超时处理;
- 3.怎么处理异常情况,比如网络出现问题时,connection其实已经失效,这时候读写数据都会发生错误。
解决方案:
- 1. 标识同一个请求(call),这很简单,只要保证同一个connection内,给其分配一个惟一id作为标识即可,可根据id找到对应的call
- 2.超时也很简单,在创建连接的时候,设置超时时间即可,当超时时,可以标记此次操作失败,但是不一定需要关闭连接;
- 3.当网络出现异常时,读写出现错误时,则需要关闭掉连接,处理所有的还没有收到结果的请求。
上面都是从client的角度来看的,但是server端来看处理,处理如何呢?
server的处理方式, 我已经在
http://jimmee.iteye.com/blog/673212,
http://jimmee.iteye.com/blog/765267 分析过使用每种方式处理请求的问题。
这里再对nio的reactor模式提一下:
具体的处理方式:
- 1.一个线程来处理所有连接(使用一个Selector)
- 2.一组线程来读取已经建立连接的数据(多个Selector,这里的线程数一般和cpu的核数相当);
- 3.一个线程池(这个线程池大小可以根据业务需求进行设置)
- 4.一个线程处理所有的连接的数据的写操作(一个Selector)
- 大小: 89.4 KB
分享到:
相关推荐
1. 接收 Call 调用:RPC 服务端监听客户端的调用请求,并将其编码成 Call 对象,放入到 Call 队列中。 2. 处理 Call 请求:Handler 线程从 Call 队列中取出 Call 对象,并对其进行处理。 3. 响应客户端: RPC 服务端...
1. **协议定义**:首先,定义RPC协议,这通常是一个接口,包含一系列要暴露给远程调用的方法。这些方法的参数类型和返回值类型都需要是Hadoop RPC支持的数据类型。 2. **客户端和服务端**: - **客户端(hadoop_...
其中,Hadoop 的远程过程调用(RPC)机制是其核心组件之一,用于实现不同节点之间的高效通信。本文将详细介绍 Hadoop RPC 的基本概念、工作原理以及其实现细节。 #### 二、Hadoop RPC 基本介绍 ##### 2.1 RPC 概念...
1. **Java实现RPC**:Java中的RPC实现通常基于Socket编程,包括创建服务器端Socket监听客户端连接,客户端通过Socket发起连接并发送请求。Java的RMI(Remote Method Invocation)是官方提供的RPC实现,但Hadoop并不...
1. **RPC (Remote Procedure Call)**: 远程过程调用是一种计算机通信协议,允许一个程序在一台计算机上执行另一台计算机上的程序,而无需知道底层网络细节。QuLab_RPC很可能提供了RPC服务,使得不同进程或系统之间...
在Hadoop中,远程过程调用(RPC)是核心组件之一,它使得节点间的通信变得高效且可靠。本文将深入探讨Hadoop的RPC机制,解析其工作原理,并结合源码分析其内部实现。 一、RPC简介 RPC是一种让程序能够调用运行在...
此外,HTTP/JSON协议作为RPC通信的基础,也是传输RPC调用的关键。 最后,关于压缩包中的“transmission_rpc-0.0.8”文件,这通常包含该版本的源代码、文档、测试用例等资源。开发者可以通过解压后查看源代码,了解...
在IT行业中,分布式计算系统的重要性日益凸显,而Hadoop作为其中的佼佼者,其核心组件之一就是远程过程调用(RPC,Remote Procedure Call)。RPC允许一个程序在某个网络中的计算机上执行另一个计算机上的程序,而...
Java操作Hadoop的RPC(Remote Procedure Call)是分布式计算领域中的关键技术,它允许在不同的进程或机器之间进行远程调用,如同本地调用一样。Hadoop作为一个开源的大数据处理框架,其RPC机制是实现各个组件如...
### Hadoop的RPC通信程序详解 #### 一、引言 在分布式系统中,远程过程调用(Remote Procedure Call, RPC)是一种重要的通信机制,它允许一台计算机上的程序调用另一台计算机上的子程序,而无需程序员了解底层网络...
在分布式计算领域,Hadoop RPC(Remote Procedure Call)框架是一个至关重要的组件,它允许不同的进程之间进行通信,尤其是在大规模数据处理的场景下。Hadoop RPC是Hadoop生态系统中的基础服务,使得不同模块如HDFS...
客户端通过 RPC(远程过程调用)机制与 HMaster 和 HRegionServer 进行通信。 2. **HMaster**:HMaster 负责整个 HBase 集群的管理和协调工作,包括管理 HRegionServer、处理负载均衡、管理元数据等。HMaster 并不...
1.java接口操作Hadoop文件系统(文件上传下载删除创建......2.RPC远程过程调用的java代码实现,便于理解Hadoop的RPC协议,具体使用方法可参考我的博客https://blog.csdn.net/qq_34233510/article/details/88142507
本文将深入探讨Hadoop中的远程过程调用(RPC)协议,这是Hadoop组件间通信的关键技术,也是理解Hadoop生态系统运作的重要一环。 RPC(Remote Procedure Call)允许一个程序在不关心远程服务器细节的情况下,调用...
这个连接可以复用,使得客户端能够同时发起多个RPC调用,每个调用都有唯一的ID来标识。 2. **发送调用参数**:客户端将调用参数打包成Invocation对象,通常包括要调用的方法名和参数列表。这个过程涉及到Java的动态...
RPC(Remote Procedure Call Protocol,远程过程调用协议)是一种通过网络请求服务的方式,它允许程序调用另一个地址空间中的函数或方法,就像调用本地进程中的函数或方法一样简单。RPC框架主要解决分布式系统中不同...
**Apache RPC调用实例** Apache远程过程调用(Remote Procedure Call, RPC)是一种通信协议,允许网络上的一个程序调用另一个远程系统上的程序,并且看起来就像调用本地函数一样。在分布式系统中,RPC框架扮演着至...
1. **RPC原理**: Hadoop的RPC机制与RMI的原理相似,主要步骤包括: - 定义接口:用户首先定义一个接口,这个接口包含了客户端需要调用的远程方法。 - 服务器端实现:服务器端实现这个接口,提供实际的服务。 - ...
RPC(RemoteProcedureCall)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPCServer实现了一种抽象的RPC服务,同时提供Call队列。RPCServer作为服务提供者由两个...