RPC远程过程调用详解


RPC(remote procedure call)
分布式系统中, 服务之间的相互调用更加方便, 像调用本地服务一样.(无感远程调用)

实现RPC模型的函数和模块有很多, 只要通过该模型来实现远程调用, 都可称呼为RPC

Python中的RPC模型包有gRPC,xmlrpc等
但是, 需要明确的一点, RPC只是实现远程调用的一种思维, 一种模型. 许许多多的模块都会使用RPC思想模型进行构建.

 


RPC的调用步骤为:
发送 另端服务
user调用 ==>> client-stub打包参数 ==>> RPCRun发送... RPCRun接受 ==>> Server-stub 解包 ==>> Server进行调用,处理结果.

接受顺序相反: 客户端
Server得到结果,发送 ==>> ServerStub 打包返回值 ==>> RPCRun发送 ... RPCRun接受 ==>> ClientStub解包 ==>> 传递给User

 



 


RCP模块的工作内容:

除了中间的RPC部分, 其他和本地调用基本一样: 调用, 然后返回结果.
封装在RPC的服务调用部分工作内容:
在调用别的服务器的时候需要.
打包相关参数, 然后通过RPC发送请求并等待返回.
其他服务的RPC接收到请求,解包运行 打包返回.


每个服务要做的就是, 接受RPC解包分析请求, 然后调用服务返回结果, 最后返回内容前依旧打包.


打包解包:

在流程中, 除了相应服务这个必不可少的环节, 打包解包对也占比很重.

一般不管使用何种协议进行通讯, 必要的加密和解密, 以及数据的核对校验都十分重要.
RPC的编写应注意高效低延时, 数据保密性等.

在需要高效低延的RPC中, 一般很少去采用http通讯协议, http协议头较重, 相对二进制通讯来说需要传递很多臃肿的信息.

更多的时候是用过 序列化 和 反序列化 来实现内容的.


拓展:

-----
RPC与RESTful与RMI的区别差异.
RPC是完成 远程调用的方式方法的过程
RESTful 是url的命名风格.

如果书写一个RPC模块API的url地址,应该为:
queryGoods?goods_id = 1

RPC用来书写接口的时候更多是偏向于查询过程:
Goods?goods_id = 1

RESTful是资源的资源的增删改查.

两者在风格上的体现完全不同,显而易见, RESTful风格的接口在对接前端和阅读上拥有更好的可读性.

-----
RPC 与 RMI(Remote Method Ivocation)
RMI 是远程方法调用.
只有Java里面才可使用, 可以理解为是java语言中的RPC.
java中的虚拟机jvm实现进程通讯采用的就是RMI协议.
RMI中的每个方法都具有签名, RMI客户端和服务器通过方法签名进行远程方法调用,

-----
高性能的RPC框架:
    Dubbo


-----
RPC与Celery
Python中常用的异步处理,中的消息队列的实现原理, 与RPC类似.
都需要传递响应的参数以及函数名.


 

原文地址:https://www.cnblogs.com/jrri/p/11863749.html