`
jimmee
  • 浏览: 538791 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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调用的处理方式
底层实现方式暴露的接口处理结果的方式
同步同步直接读取结果
异步同步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/673212http://jimmee.iteye.com/blog/765267 分析过使用每种方式处理请求的问题。

这里再对nio的reactor模式提一下:

具体的处理方式:
  •     1.一个线程来处理所有连接(使用一个Selector)
  •     2.一组线程来读取已经建立连接的数据(多个Selector,这里的线程数一般和cpu的核数相当);
  •     3.一个线程池(这个线程池大小可以根据业务需求进行设置)
  •     4.一个线程处理所有的连接的数据的写操作(一个Selector)





  • 大小: 89.4 KB
分享到:
评论

相关推荐

    Hadoop_RPC详细分析.doc

    1. 接收 Call 调用:RPC 服务端监听客户端的调用请求,并将其编码成 Call 对象,放入到 Call 队列中。 2. 处理 Call 请求:Handler 线程从 Call 队列中取出 Call 对象,并对其进行处理。 3. 响应客户端: RPC 服务端...

    hadoop rpc实例

    1. **协议定义**:首先,定义RPC协议,这通常是一个接口,包含一系列要暴露给远程调用的方法。这些方法的参数类型和返回值类型都需要是Hadoop RPC支持的数据类型。 2. **客户端和服务端**: - **客户端(hadoop_...

    学习hadoop_源代码,RPC_部分

    其中,Hadoop 的远程过程调用(RPC)机制是其核心组件之一,用于实现不同节点之间的高效通信。本文将详细介绍 Hadoop RPC 的基本概念、工作原理以及其实现细节。 #### 二、Hadoop RPC 基本介绍 ##### 2.1 RPC 概念...

    java_RPC_hadoop.zip

    1. **Java实现RPC**:Java中的RPC实现通常基于Socket编程,包括创建服务器端Socket监听客户端连接,客户端通过Socket发起连接并发送请求。Java的RMI(Remote Method Invocation)是官方提供的RPC实现,但Hadoop并不...

    PyPI 官网下载 | QuLab_RPC-1.3.3.tar.gz

    1. **RPC (Remote Procedure Call)**: 远程过程调用是一种计算机通信协议,允许一个程序在一台计算机上执行另一台计算机上的程序,而无需知道底层网络细节。QuLab_RPC很可能提供了RPC服务,使得不同进程或系统之间...

    Hadoop RPC机制分析

    在Hadoop中,远程过程调用(RPC)是核心组件之一,它使得节点间的通信变得高效且可靠。本文将深入探讨Hadoop的RPC机制,解析其工作原理,并结合源码分析其内部实现。 一、RPC简介 RPC是一种让程序能够调用运行在...

    PyPI 官网下载 | transmission_rpc-0.0.8.tar.gz

    此外,HTTP/JSON协议作为RPC通信的基础,也是传输RPC调用的关键。 最后,关于压缩包中的“transmission_rpc-0.0.8”文件,这通常包含该版本的源代码、文档、测试用例等资源。开发者可以通过解压后查看源代码,了解...

    hadoop中RPC协议的小测试例子(吴超老师)

    在IT行业中,分布式计算系统的重要性日益凸显,而Hadoop作为其中的佼佼者,其核心组件之一就是远程过程调用(RPC,Remote Procedure Call)。RPC允许一个程序在某个网络中的计算机上执行另一个计算机上的程序,而...

    java操作hadoop的RPC,源码

    Java操作Hadoop的RPC(Remote Procedure Call)是分布式计算领域中的关键技术,它允许在不同的进程或机器之间进行远程调用,如同本地调用一样。Hadoop作为一个开源的大数据处理框架,其RPC机制是实现各个组件如...

    Hadoop的RPC通信程序

    ### Hadoop的RPC通信程序详解 #### 一、引言 在分布式系统中,远程过程调用(Remote Procedure Call, RPC)是一种重要的通信机制,它允许一台计算机上的程序调用另一台计算机上的子程序,而无需程序员了解底层网络...

    Hadoop自己的Rpc框架使用Demo

    在分布式计算领域,Hadoop RPC(Remote Procedure Call)框架是一个至关重要的组件,它允许不同的进程之间进行通信,尤其是在大规模数据处理的场景下。Hadoop RPC是Hadoop生态系统中的基础服务,使得不同模块如HDFS...

    细细品味Hadoop_Hadoop集群(第11期)_HBase简介及安装.pdf

    客户端通过 RPC(远程过程调用)机制与 HMaster 和 HRegionServer 进行通信。 2. **HMaster**:HMaster 负责整个 HBase 集群的管理和协调工作,包括管理 HRegionServer、处理负载均衡、管理元数据等。HMaster 并不...

    Hadoop Java接口+RPC代码实现

    1.java接口操作Hadoop文件系统(文件上传下载删除创建......2.RPC远程过程调用的java代码实现,便于理解Hadoop的RPC协议,具体使用方法可参考我的博客https://blog.csdn.net/qq_34233510/article/details/88142507

    Hadoop_RPCDemo:Hadoop原始解析之RPC协议

    本文将深入探讨Hadoop中的远程过程调用(RPC)协议,这是Hadoop组件间通信的关键技术,也是理解Hadoop生态系统运作的重要一环。 RPC(Remote Procedure Call)允许一个程序在不关心远程服务器细节的情况下,调用...

    Hadoop里的RPC机制过程

    这个连接可以复用,使得客户端能够同时发起多个RPC调用,每个调用都有唯一的ID来标识。 2. **发送调用参数**:客户端将调用参数打包成Invocation对象,通常包括要调用的方法名和参数列表。这个过程涉及到Java的动态...

    rpc架构与hadoop分享

    RPC(Remote Procedure Call Protocol,远程过程调用协议)是一种通过网络请求服务的方式,它允许程序调用另一个地址空间中的函数或方法,就像调用本地进程中的函数或方法一样简单。RPC框架主要解决分布式系统中不同...

    Apache RPC调用实例

    **Apache RPC调用实例** Apache远程过程调用(Remote Procedure Call, RPC)是一种通信协议,允许网络上的一个程序调用另一个远程系统上的程序,并且看起来就像调用本地函数一样。在分布式系统中,RPC框架扮演着至...

    学习hadoop源代码,RPC部分.pdf

    1. **RPC原理**: Hadoop的RPC机制与RMI的原理相似,主要步骤包括: - 定义接口:用户首先定义一个接口,这个接口包含了客户端需要调用的远程方法。 - 服务器端实现:服务器端实现这个接口,提供实际的服务。 - ...

    hadooprpc机制&&将avro引入hadooprpc机制初探

    RPC(RemoteProcedureCall)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPCServer实现了一种抽象的RPC服务,同时提供Call队列。RPCServer作为服务提供者由两个...

Global site tag (gtag.js) - Google Analytics