摘要:什么是rpc,原理
什么是rpc
RPC 【Remote Procedure Call,远程过程调用】:A调用B,A挂起,B执行,执行完毕后,继续执行A,这种机制称为RPC。
是一种通过网络从远程计算机程序上请求服务来得到计算服务或者数据服务,且不需要了解底层网络技术的协议和框架。
RPC服务原理
socket 套接字
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为socket。
socket用于描述IP地址和端口,是一个通信连接的句柄,可以用来实现不同的计算机之间的通信,是网络编程接口的具体实现。
rpc调用过程
1 | +---------客户端---------+ +---------服务端---------+ |
- 第1步,客户端调用本地存根方法,对于客户端程序来说,就是本地普通方法,但是,他的执行与本地代码不同,因为真正执行的是发生在远程服务器上。
客户端存根方法会将参数打包并封装成一个或多个网络消息体并发送到服务端。参数封装到网络消息中的过程称为编码(encode),他会将所有数据序列化为字节数组格式 - 第2步,客户端存根通过系统调用,使用操作系统内核提供的socket套接字接口来向远程服务发送我们编码的的网络消息
- 第3步,网络消息由内核通过某种协议(UDP,TCP)传输到远端服务器。
- 第4步,服务端存根接收到客户端消息,并对参数消息进行解码(decode),通常会将参数从标准的网络格式转换成特定的语言格式。
- 第5步,服务端存根调用服务端方法,并将从客户端接收的参数传递给该方法,他来运行具体的功能并返回,这部分代码的执行对客户端来说就是远程调用过程
- 第6步,服务端方法执行完毕后,会把结果返回到服务端存根代码中。
- 第7步,服务端存根在将该返回值进行编码并序列化后,通过一个或多个套接字网络消息发送给客户端
- 第8步,消息通过网络发送给客户端存根中。
- 第9步,客户端存根从本地socket接口中读取结果消息。
- 第10步,客户端存根将结果传给客户端函数,并且将消息从网络二进制转化为本地语言格式。
以上为整个rpc调用过程。
在程序中使用RPC
目前大部分语言【C、C++、java等】,都没有设计用于远程调用的内置语法,因此不能编译生成必要的存根方法。
IDL 接口定义语言。
RPC是构建在语言级别之上的,是跨语言的,他在OSI七层网络模型中介于会话层和表示层之间。