`
jimmee
  • 浏览: 530338 次
  • 性别: 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通信程序

    使用Hadoop的RPC机制创建一个协议接口、通信服务端、通信客户端程序 目标:通过该任务,理解分布式系统中远程过程调用协议,掌握分布式系统中客户机与服务器的通信机制。

    Hadoop Java接口+RPC代码实现

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

    Hadoop里的RPC机制过程

    Hadoop里的RPC机制过程,代码示例rpc调用过程

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

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

    [HBase]源码级强力分析hadoop的RPC机制

    这些天一直奔波于长沙和武汉之间,忙着腾讯的笔试、面试,以至于对hadoopRPC(RemoteProcedureCallProtocol,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。...

    hadoop的经典讲义

    hadoop Common – 是hadoop的核心,包括文件系统、远程调用RPC的序列化函数。 HDSF : 提供高吞吐量的可靠分布式文件系统是 GFS的开源实现。 •Hadoop的文件系统。必须通过hadoop fs 命令来读取。支持分布式。 ...

    Hadoop学习笔记—3.HadoopRPC机制的使用

    (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网络通信细节,对我们来说是透明的。因此,它经常用于分布式网络通信中。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间...

    hadoop入门java代码hdfs文件操作 wordCount源码

    hadoop入门级的代码 Java编写 eclipse可运行 包含 hdfs的文件操作 rpc远程调用的简单示例 map-reduce的几个例子:wordcount 学生平均成绩 手机流量统计

    Hadoop 培训课程(2)HDFS

    Hadoop 培训课程(2)HDFS 分布式文件系统与HDFS HDFS体系结构与基本概念*** HDFS的shell操作*** java接口及常用api*** ---------------------------加深拓展-------------...RPC调用** HDFS的分布式存储架构的源码分析**

    hadoofus:用于 C 的 HDFS 客户端库

    您的选择,您可以用Hadoop 0.20.203通过1.xy(说话HDFS_NN_v1 / HDFS_DATANODE_AP_1_0 ),2.0.x版本的Hadoop( HDFS_NN_v2 / HDFS_DATANODE_AP_2_0 ),或Hadoop2.2.x的和更高的( HDFS_NN_v2_2 / HDFS_DATANODE_...

    MapReduceV1:TaskTracker端启动Task流程分析

    TaskTracker周期性地向JobTracker发送心跳报告,在RPC调用返回结果后,解析结果得到JobTracker下发的运行Task的指令,即LaunchTaskAction,就会在TaskTracker节点上准备运行这个Task。Task的运行是在一个与...

    javaJDK apache Zookeeper Dubbo等资源.zip

    Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [1] Spring框架无缝集成。 Dubbo是一款高性能、轻量级的开源Java RPC框架,...

    大型分布式网站架构与实践

     如何实现基于HTTP协议和TCP协议的RPC调用,它们之间有何差别,分别适应何种场景。  如何实现服务的动态注册和路由,以及软负载均衡的实现。  1.1 基于TCP协议的RPC 3  1.1.1 RPC名词解释 3  1.1.2 对象的...

    AvroParquetExample:一个展示 Avro 和 Parquet 功能的项目

    AvroParquet 示例 ... 远程过程调用 (RPC)。 与动态语言的简单集成。 代码生成不需要读取或写入数据文件,也不需要使用或实现 RPC 协议。 代码生成作为一种可选的优化,只值得为静态类型语言实现。

Global site tag (gtag.js) - Google Analytics