RPC(远程过程调用)原理及应用
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(远程过程调用)原理及应用相关推荐
- 微服务之RPC(远程过程调用)的四种方式
微服务思想 微服务思想-注册中心zookeeper 微服务: 架构设计采用分布式思想,当服务器发生故障时,可以实现自动化的故障迁移.无需人为干预. 注册中心实现原理: ZK工作原理说明 Zookeep ...
- Go语言:RPC简介及原理介绍
背景 在前面的课程<Go语言微服务理论与实践课程>课程中,我们已经学习了微服务的理论知识,了解了微服务实践中需要解决哪些问题.从本篇技术文档开始,我们进入新的微服务内容的学习.在本系列课程 ...
- RPC远程过程调用简介
1. 什么是RPC 远程过程调用(英语:Remote Procedure Call,缩写为 RPC,也叫远程程序调用)是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而 ...
- RPC远程过程调用概念及实现
什么是RPC RPC 的全称是 Remote Procedure Call 是一种进程间通信方式. 它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远 ...
- spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo SpringBoot + Dubbo + zookeeper Spring Security
spring-boot重头再来 6 文章目录 spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo dubbo-admin安装 dubbo-admin ...
- RPC通信基本原理 -- 浅析RPC远程过程调用基本原理
一.RPC基本概念 1.1.RPC简介 RPC 的全称是 Remote Procedure Call是一种进程间通信方式. RPC只是一个概念 而不是具体的协议或框架. 它允许程序调用另一个地址空间( ...
- rpc远程过程调用_什么是远程过程调用(RPC)?
rpc远程过程调用 Remote Procedure Call (RPC) is a protocol or architecture which is used to run programmes ...
- RPC 远程过程调用协议
RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC协议假定某些传输协议的存 ...
- RPC入门总结(一)RPC定义和原理
转载:深入浅出 RPC - 浅出篇 转载:RPC框架与Dubbo完整使用 转载:深入浅出 RPC - 深入篇 转载:远程调用服务(RPC)和消息队列(Message Queue)对比及其适用/不适用场 ...
- RPC实现和原理解析
RPC简介 RPC 又名远程过程调用协议RPC(Remote Procedure Call Protocol),允许像调用本地服务一样调用远程服务. RPC是指远程过程调用,也就是说两台服务器A,B, ...
最新文章
- C#之windows桌面软件第七课:(下集)串口工具实现数据校验、用灯反应设备状态
- 2*2矩阵训练集比例对BP神经网络分类性能影响
- 笔记-项目管理基础知识-复习要点
- 【机器学习】深度剖析 LightGBM vs XGBOOST 哪个更胜一筹
- Memcache存储大数据的问题(大于1m)
- 路飞学城Python-Day171
- 精通ASP.NET MVC ——路由
- mysql查询时,offset过大影响性能的原因与优化方法
- Oracle结果集缓存(Result Cache)--服务器、客户端、函数缓存
- logstash-input-jdbc 同步mysql数据到es
- 《Android游戏开发详解》一2.2 设置开发机器
- MySQL 聚合函数(一)聚合(组合)函数概述
- 金蝶BOS开发之--非空验证、时间、电话号码验证
- 图像语义分割(14)-FastFCN: 重新思考语义分割模型主干网络中的扩张卷积
- [leetcode] Sudoku Solver
- 算法:有效九宫格数独Valid Sudoku
- 一个简单的二层系统分析全程
- win10计算机怎么改中文,win10系统中文语言的设置方法
- 学硕 申请清华计算机博士,2017年清华大学申请考核制考博成功经验谈
- Window下安装Rabitmq的插件以及激活
热门文章
- python: for循环时列表长度改变,会发生什么?
- 肇庆市二技学校计算机电算化,肇庆市有那些技术学校
- 机器学习之监督学习(一)——决策树
- 面向对象编程(七):接口(抽象类)
- OpenCV精进之路(二十三):实例——Bag of Features(BoF)图像分类实践
- OpenCV精进之路(九):图像轮廓和图像分割修复——图像修复技术
- 将数据集转换为Excel格式的一个实现
- 世界五百强面试题目及应答评点
- opencv OCR 端到端场景文本检测与识别(webcam_demo) vs2015
- 目标检测之Selective Search原理简述(转)