远程过程调用RPC简介
RPC(Remote Procedure Call, 远程过程调用):是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。
RPC是一种技术思想而非一种规范或协议,常见RPC技术和框架有:
(1). 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。
(2). 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
(3). 通信框架:MINA和Netty。
目前流行的开源RPC框架主要有阿里巴巴的Dubbo、Facebook的Thrift、Google的gRPC、Twitter的Finagle等。
RPC框架的重要组成:
(1). 客户端(Client):服务调用方。
(2). 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端。
(3). 服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理。
(4). 服务端(Server):服务的真正提供者。
(5). Network Service:底层传输,可以是TCP或HTTP。
一次RPC调用流程如下:
(1). 服务消费者(Client客户端)通过本地调用的方式调用服务。
(2). 客户端存根(Client Stub)接收到调用请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体。
(3). 客户端存根(Client Stub)找到远程的服务地址,并且将消息通过网络发送给服务端。
(4). 服务端存根(Server Stub)收到消息后进行解码(反序列化操作)。
(5). 服务端存根(Server Stub)根据解码结果调用本地的服务进行相关处理
(6). 服务端(Server)本地服务业务处理。
(7). 处理结果返回给服务端存根(Server Stub)。
(8). 服务端存根(Server Stub)序列化结果。
(9). 服务端存根(Server Stub)将结果通过网络发送至消费方。
(10). 客户端存根(Client Stub)接收到消息,并进行解码(反序列化)。
(11). 服务消费方得到最终结果。
RPC要解决的两个问题:
(1). 解决分布式系统中,服务之间的调用问题。
(2). 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。
RPC的核心并不在于使用什么协议。RPC的目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里。通过RPC能解耦服务,这才是使用RPC的真正目的。RPC的原理主要用到了动态代理模式,至于HTTP协议,只是传输协议而已。在RPC中可选的网络传输方式有多种,可以选择TCP协议、UDP协议、HTTP 协议。
简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。RPC会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯),RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的工作方式),RPC在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。
RPC采用客户机/服务器模式:请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需用通过网络来表达调用的语义和传达调用的数据,执行过程如下图所示,无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如不同的系统间的通讯,甚至不同的组织间的通讯。由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用时需要使用RPC。
进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。这些进程可以运行在同一计算机上或网络连接的不同计算机上。进程间通信技术包括消息传递、同步、共享内存和远程过程调用。IPC是一种标准的Unix通信机制。有两种类型的进程间通信(IPC):
(1). 本地过程调用(LPC):用在多任务操作系统中,使得同时运行的任务能互相会话。这些任务共享内存空间使任务同步和互相发送信息。
(2). 远程过程调用(RPC):RPC类似于LPC,只是在网上工作。
RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,实现复杂。HTTP主要用于对外的异构环境,浏览器接口调用,App接口调用,第三方接口调用等。
RPC使用场景(大型的网站,内部子系统较多、接口非常多的情况下适合使用RPC):
(1). 长链接:不必每次通信都要像HTTP一样去3次握手,减少了网络开销。
(2). 注册发布机制:RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。
(3). 安全性:没有暴露资源操作。
(4). 微服务支持:就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑。
注:以上内容均来自网络整理,主要参考:
1. https://mp.weixin.qq.com/s/UYL8yD9lusl3ELPSiIDk_A
2. https://www.zhihu.com/question/25536695
3. https://www.jianshu.com/p/b0343bfd216e
4. https://www.cs.rutgers.edu/~pxk/417/notes/03-rpc.html
以下是使用python3实现的简单的客户端、服务器简单测试代码:
test_server_1.py内容如下:
from xmlrpc.server import SimpleXMLRPCServerclass MyFuncs:def add(self, a, b):return a + bif __name__ == "__main__":s = SimpleXMLRPCServer(("localhost", 8000))s.register_instance(MyFuncs())print("server is online ...")s.serve_forever()
test_client_1.py内容如下:
import xmlrpc.clients = xmlrpc.client.ServerProxy("http://localhost:8000")
print("sum:", s.add(2, 3))
执行结果如下:
GitHub:https://github.com/fengbingchun/Python_Test
远程过程调用RPC简介相关推荐
- RabbitMQ教程远程过程调用RPC
前言:在前面的教程里我们学习了工作队列,实现了将工作任务发给不同的工人,如果任务是需要在另一台计算机上运行,我们如何实现运行远程计算机上的一个函数任务并等待其返回的结果呢,这种模式通常被称为远程过程调 ...
- 远程过程调用RPC 2:RPC思想与RPC框架
RPC思想与RPC框架 RPC思想 组成部分 RPC框架 完整的RPC框架 RPC调用关键点 RPC框架分类对比 RPC和REST REST主要原则 对比 RPC思想 上一篇笔记:远程过程调用RPC ...
- rpc 服务器不可用_什么是远程过程调用RPC
背景: 最近在开发中接触到微服务的一些概念,并且为其他业务组通过URL请求的方式提供了我们本地接口. 其中涉及到了,注册方法,发送和接收脚本,确定调用的URL,鉴权数据.从而引出今天要讲内容RPC ...
- 远程过程调用RPC RMI(Remote Method Invocation)和Web Service
2019独角兽企业重金招聘Python工程师标准>>> 一.RPC是什么 RPC的全称是Remote Procedure call,是进程间通信方式. 他允许程序调用另一个地址空间的 ...
- 《Go 开源说 2022》预告「微服务可用性」系列之第六期:远程过程调用RPC——gRPC...
点击蓝字 关注我们 写在前面 Go开源说是GoCN推出的一档分享Go开源好项目的直播栏目,2022年联合腾源会社区全面升级,通过全新的栏目设置,希望能够帮助到开源作者们实现以下目标: 第一是去推广他们 ...
- 130、RPC远程过程调用
RPC简介 1. 什么是RPC 远程过程调用(英语:Remote Procedure Call,缩写为 RPC,也叫远程程序调用)是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机 ...
- RPC 远程过程调用
RPC简介 RPC,英文全称: Remote Procedure Call. 中文名: 远程过程调用,是一个计算机通讯协议.借助RPC可以像调用本地服务一样地调用远程服务.比如两台服务器订单服务器和商 ...
- RPC(Remote Procedure Calls)远程过程调用
很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单 ...
- RPC(Remote Procedure Call)远程过程调用
所谓的RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制, 使得应用之间可以进行通讯,而且也遵从server/client模型. 使用的时候客户端调用serve ...
最新文章
- 在 Android 开发中使用 Kotlin 协程 (一) -- 初识 Kotlin 协程
- L1、L2正则化详解
- 修改XtraMessageBox的内容字体大小
- object-c 随机数总结
- pycharm更改为系统python3_今天配置好python3 装好了pycharm 就新建一个django一直改不好...
- 谷歌云请更正这张卡片的信息_如何识别和更正Google Analytics(分析)报告中的(未设置)值
- div固定大小文字溢出自动缩小_Figma 教程 | 文字工具
- 自旋锁SpinLock小案例
- [C++]头文件(Header Files)和命名空间(Namespace)
- 【诊断数据库文件-CDD】创建速成班-北汇信息小课堂(二)
- Dataframe基础操作巩固——美国大选献金项目
- (附源码)计算机毕业设计SSM基于java学科竞赛管理系统
- 密码学RSA解密之Pollard_rho分解
- Power bi 3.12 瀑布图
- python中的for什么意思_python中的for是什么
- 统计机器学习相关性分析
- navicat premium导入表格时出现无法打开文件
- cocos2d-js 苹果 刘海屏 适配
- 一般试卷的纸张大小是多少_考试试卷用的是什么尺寸的纸
- JVM内存模型JVM内存模型
热门文章
- Pycharm报错合集:在pycharm运行anaconda配置的Pytorch环境报错(Environment location diretory is not empty )
- 为什么不推荐使用汉字作为密码?
- Linux那些事儿之我是Sysfs(11)sysfs 创建普通文件
- 机器学习(12)欠拟合过拟合、模型分析与正则化
- c语言usb串口输出,C语言实现模拟USB对8bit数据的NRZI编码输出
- 实现2D全景图的中心视野变换
- 解决Qt+OpenGL更换图像纹理的问题
- 设置IDEA编辑过程直接通过F5刷新网页就可以实时查看JSP文件更新结果,而非通过重新run
- 在Ubuntu 14.04.3 64bit上安装照片编辑软件Fotoxx 15.10
- RTB中的cookie mapping理解