RPC 是构建 hadoop 体系结构的基石。

RPC(Remote Procedure Call Protocol)——远程过程调用协议。所谓远程过程调用,也即是远程调用过程,它是一种通过网络从远程计算机程序上请求服务(某一过程),而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。

RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。

远程指不在同一个进程。Java 中通过调用 main 方法产生进程。远程过程调用意味着对另一个 main 方法(另一个 Java 进程)中的程序进行调用。

远程过程调用至少需要两个过程(也即两个 Java 进程)。

  • (1)调用方(client),主动发起请求,调用(指定ip和端口port)server中的方法
  • (2)被调用方(server),把调用结果返回给客户端。

RPC 服务器 与 http 服务器

经典的 RPC 服务器包括:hadoop 集群结构的:

  • NameNode、SecondaryNameNode、DataNode
  • JobTracker、TaskTracker

职责介绍:

  • (1)HTTP 服务器提供的是资源文件,需要存储空间足够大
  • (2)RPC 服务器提供的是计算过程的返回值,需要计算能力足够强

RPC 再次明晰了客户端和服务器的职责。

RPC 机制的模拟

  • (0)MyBiz、MyBizable

    package rpc;import java.io.IOException;import org.apache.hadoop.ipc.VersionedProtocol;public interface MyBizable extends VersionedProtocol{long VERSION = 12345L;public abstract String hello(String name);}
    package rpc;import java.io.IOException;import org.apache.hadoop.ipc.VersionedProtocol;public class MyBiz implements MyBizable {@Overridepublic String hello(String name){System.out.println("我被调用了,猜猜看我会出现在哪一边?");return "hello " + name;}@Overridepublic long getProtocolVersion(String protocol, long clientVersion)throws IOException {return VERSION;}
    }
  • (1)MyServer

    package rpc;import java.io.IOException;import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    import org.apache.hadoop.ipc.RPC.Server;public class MyServer {static final String ADDR = "localhost";static final int PORT = 12345;public static void main(String[] args) throws Exception {Server server = RPC.getServer(new MyBiz(), ADDR, PORT, new Configuration());// 在指定的ip,指定的端口进行监听server.start();}
    }
  • (2)MyClient

    package rpc;import java.io.IOException;
    import java.net.InetSocketAddress;import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    import org.apache.hadoop.ipc.VersionedProtocol;public class MyClient {public static void main(String[] args) throws Exception {MyBizable proxy = (MyBizable)RPC.waitForProxy(MyBizable.class,MyBizable.VERSION,new InetSocketAddress(MyServer.ADDR, MyServer.PORT),new Configuration());System.out.println("客户端结果:"+proxy.hello("zch"));// 关闭网络连接RPC.stopProxy(proxy);}
    }

    注:

  • (1)客户端获得的代理对象 proxy,调用其hello()成员函数,是在客户端还是在服务器端执行的呢?

    这正是RPC(远程调用的精髓所在)。如果是以远程调用的方式执行对象的方法,则应是在服务器端执行,将结果返回给客户端。

  • (2)客户端调用服务器端的方法,意味着调用服务器端的对象中的方法

  • (3)如果服务器端的对象允许客户端调用,那么这个对象必须实现接口

  • (4)如果客户端能够调用服务器端对象的方法,那么这些方法一定位于对象的接口中。因为客户端只能获得接口(waitForProxy())

  • (5)在命令行界面,输入jps(查看 java 进程),会看到服务器端的 java 进程名;

RPC(远程过程调用)原理及应用相关推荐

  1. 微服务之RPC(远程过程调用)的四种方式

    微服务思想 微服务思想-注册中心zookeeper 微服务: 架构设计采用分布式思想,当服务器发生故障时,可以实现自动化的故障迁移.无需人为干预. 注册中心实现原理: ZK工作原理说明 Zookeep ...

  2. Go语言:RPC简介及原理介绍

    背景 在前面的课程<Go语言微服务理论与实践课程>课程中,我们已经学习了微服务的理论知识,了解了微服务实践中需要解决哪些问题.从本篇技术文档开始,我们进入新的微服务内容的学习.在本系列课程 ...

  3. RPC远程过程调用简介

    1. 什么是RPC 远程过程调用(英语:Remote Procedure Call,缩写为 RPC,也叫远程程序调用)是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而 ...

  4. RPC远程过程调用概念及实现

    什么是RPC RPC 的全称是 Remote Procedure Call 是一种进程间通信方式. 它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远 ...

  5. spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo SpringBoot + Dubbo + zookeeper Spring Security

    spring-boot重头再来 6 文章目录 spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo dubbo-admin安装 dubbo-admin ...

  6. RPC通信基本原理 -- 浅析RPC远程过程调用基本原理

    一.RPC基本概念 1.1.RPC简介 RPC 的全称是 Remote Procedure Call是一种进程间通信方式. RPC只是一个概念 而不是具体的协议或框架. 它允许程序调用另一个地址空间( ...

  7. rpc远程过程调用_什么是远程过程调用(RPC)?

    rpc远程过程调用 Remote Procedure Call (RPC) is a protocol or architecture which is used to run programmes ...

  8. RPC 远程过程调用协议

    RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC协议假定某些传输协议的存 ...

  9. RPC入门总结(一)RPC定义和原理

    转载:深入浅出 RPC - 浅出篇 转载:RPC框架与Dubbo完整使用 转载:深入浅出 RPC - 深入篇 转载:远程调用服务(RPC)和消息队列(Message Queue)对比及其适用/不适用场 ...

  10. RPC实现和原理解析

    RPC简介 RPC 又名远程过程调用协议RPC(Remote Procedure Call Protocol),允许像调用本地服务一样调用远程服务. RPC是指远程过程调用,也就是说两台服务器A,B, ...

最新文章

  1. C#之windows桌面软件第七课:(下集)串口工具实现数据校验、用灯反应设备状态
  2. 2*2矩阵训练集比例对BP神经网络分类性能影响
  3. 笔记-项目管理基础知识-复习要点
  4. 【机器学习】深度剖析 LightGBM vs XGBOOST 哪个更胜一筹
  5. Memcache存储大数据的问题(大于1m)
  6. 路飞学城Python-Day171
  7. 精通ASP.NET MVC ——路由
  8. mysql查询时,offset过大影响性能的原因与优化方法
  9. Oracle结果集缓存(Result Cache)--服务器、客户端、函数缓存
  10. logstash-input-jdbc 同步mysql数据到es
  11. 《Android游戏开发详解》一2.2 设置开发机器
  12. MySQL 聚合函数(一)聚合(组合)函数概述
  13. 金蝶BOS开发之--非空验证、时间、电话号码验证
  14. 图像语义分割(14)-FastFCN: 重新思考语义分割模型主干网络中的扩张卷积
  15. [leetcode] Sudoku Solver
  16. 算法:有效九宫格数独Valid Sudoku
  17. 一个简单的二层系统分析全程
  18. win10计算机怎么改中文,win10系统中文语言的设置方法
  19. 学硕 申请清华计算机博士,2017年清华大学申请考核制考博成功经验谈
  20. Window下安装Rabitmq的插件以及激活

热门文章

  1. python: for循环时列表长度改变,会发生什么?
  2. 肇庆市二技学校计算机电算化,肇庆市有那些技术学校
  3. 机器学习之监督学习(一)——决策树
  4. 面向对象编程(七):接口(抽象类)
  5. OpenCV精进之路(二十三):实例——Bag of Features(BoF)图像分类实践
  6. OpenCV精进之路(九):图像轮廓和图像分割修复——图像修复技术
  7. 将数据集转换为Excel格式的一个实现
  8. 世界五百强面试题目及应答评点
  9. opencv OCR 端到端场景文本检测与识别(webcam_demo) vs2015
  10. 目标检测之Selective Search原理简述(转)