RPC(Reomte Procedure Call Protocol)
远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如 TPC或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC在使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用Client-Server结构,通过request-response消息模式实现。
RPC三个过程
- 通讯协议
- 寻址 互联网IP
- 数据序列化
RPC用途
- 服务化/微服务
- 分布式系统架构
- 服务可重用
- 系统间交互调用
RPC特性以及适用场景
特点:同步调用,对于要等待返回结果的场景,RPC可以非常自然直觉的使用(RPC也可以是异步调用)。
由于等待结果,Consumer会有线程消耗。如果以异步RPC的方式使用,Consumer线程消耗可以去掉。不能暂存请求,
压力会直接传导到服务Provider。
RPC的流程
- 客户端处理过程中调用Client sub,传入参数。
- Client sub将参数编组为消息,然后通过系统调用向服务端发送信息。
- 客户端本地操作系统将消息从客户端机器发送到服务端机器。
- 服务端操作系统将接收的数据包传给Server stub。
- Server stub解组消息为参数。
- Server stub再调用服务端的过程,过程执行结果以反方向的相同步骤响应给客户端。
stub(存根):分布式计算中的存根是一段代码,它转换在远程调用期间Client和Server之间的参数。
RPC流程中需要处理的问题
- Client stub、Server stub的开发
- 参数如何编组为消息,以及解组信息
- 消息如何发送
- 过程结果如何表示,异常情况如何处理
- 如何实现安全的访问控制
RPC协议
调用过程中需要将参数编组为消息发送,接收方接收到消息进行解组消息参数,过程处理结果同样需要编组,解组。消息由哪些构成以及消息的表示形式就构成了协议。
协议的请求,响应消息的格式。
RPC框架基本定义
封装好了参数编组、消息解组、底层网络通信的RPC程序开发框架,让我们直接在基础上只需要专注于我们的过程代码编写。
常用RPC框架
Webservice:Apache XFC, Apache Axis2,Java自带的JAX-WS.
微服务:dubbo,spingCloud,Apache Thrift,ICE,GRPC等等
RPC框架核心功能要点
- 服务的暴露 根据IDL生成,共享接口
- 远程代理对象 JDK代理、字节码生成
- 通信 协议(TCP\HTTP)、消息ID、IO、连接、心跳
- 序列化 序列化方式、元数据、编码内容