什么是rpc以及作用
Posted myiuni
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是rpc以及作用相关的知识,希望对你有一定的参考价值。
1
RPC简介
RPC(Remote Procedure Call,即远程过程调用)是建立在Socket之上的,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过程调用)。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。对于RPC架构来说,应用越底层,代码越复杂、灵活性越高、效率越高;应用越上层,抽象封装的越好、代码越简单、效率越差。
通过RPC,我们可以充分利用非共享内存的多处理器环境(例如通过局域网连接的多台应用服务器),这样可以简便地将你的应用分布在多台应用服务器上,应用程序就像运行在一个多处理器的计算机上一样。我们可以方便的实现过程代码共享,提高系统资源的利用率,也可以将以大量数值处理的操作放在处理能力较强的系统上运行,从而减轻前端机的负担。
RPC作为普遍的C/S开发方法,开发效率高效、可靠。但RPC方法的基本原则是:以模块调用的简单性忽略通讯的具体细节,以便程序员不用关心C/S之间的通讯协议,集中精力实现应用过程。这就决定了 RPC生成的通讯包不可能对每种应用都有最恰当的处理办法,与Socket方法相比,传输相同的有效数据,RPC占用更多的网络带宽。RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源。
2
RPC架构的作用
RPC 的主要目标是让构建分布式计算(应用)更容易、透明,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。
1、从通信协议的层面,大致可以分为:
(1)基于HTTP协议的(例如基于文本的SOAP(XML)、REST(JSON)、基于二进制Hessian(Binary));
(2)基于TCP协议的(通常会借助Mina、Netty等高性能网络框架)。
2、只有二进制数据才能在网络中传输,序列化和反序列化的定义是:
(1)将对象转换成二进制流的过程叫做序列化;
(2)将二进制流转换成对象的过程叫做反序列化。
3、 RPC架构分为三部分:
(1)、服务提供者(RPC Server),运行在服务器端,提供服务接口定义与服务实现类。
(2)、服务中心(Registry),运行在服务器端,负责将本地服务发布成远程服务,管理远程服务,提供给服务消费者使用。
(3)、服务消费者(RPC Client),运行在客户端,通过远程代理对象调用远程服务。
服务提供者启动后主动向服务(注册)中心注册机器ip、端口以及提供的服务列表; 服务消费者启动时向服务(注册)中心获取服务提供方地址列表,可实现软负载均衡和Failover。
3
RPC调用流程
简单来说一个RPC架构里包含如下4个组件:
1、 客户端(RPC Client):服务调用方
2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方
3、 服务端存根(Server Stub):接受客户端发送过来的消息并解包,再调用本地服务
4、 服务端(RPC Server):真正的服务提供者。
RPC采用C/S模式,请求程序就是一个客户端应用,而服务提供者就是一个服务器。首先,服务消费者(RPC客户端应用)调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务提供方(RPC服务器端),进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,调用服务端方法对调用请求进行计算而得到计算结果,并发送答复信息,然后等待下一个调用信息;最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
以上是关于什么是rpc以及作用的主要内容,如果未能解决你的问题,请参考以下文章