文章目录

  • 什么是RPC
  • RPC原理是什么
  • RPC解决了什么问题
  • 常见的RPC框架
  • 对比HTTP和PRC


什么是RPC

远程过程调用,通过网络从远程计算机程序上请求服务,对于调用者而言,该过程就像调用本地方法一样简单,而不需要了解底层网络传输协议。
比如,A需要调用B的某个方法,此时,可以选择使用Http协议请求服务,但是比较慢,RPC就是为了解决这个问题。
RPC一般会包含有 传输协议序列化协议

RPC原理是什么

RPC架构图:

后端rpc怎么获取请求头ip和port rpc请求流程_HTTP


RPC流程图:(有点类似一个HTTP请求的历程,只关注应用层,而忽视具体的网络传输。)

后端rpc怎么获取请求头ip和port rpc请求流程_后端rpc怎么获取请求头ip和port_02


对于Client function而言,调用远程服务和调用本地方法是一样的,具体的调用过程对于它而言是透明的。

Client function1 以本地调用的方式调用远程服务function2(String args[]) Client stub接收到远程调用后,将类、方法名、参数 以及自身的IP:Port等组装成请求体,即序列化:RpcRequest.

Client stub找到对应服务的IP:Port,Client通过socket将RpcRequest发送给Server

Server接收socket传输的消息体,Server stub解析RpcRequest,将其反序列化为Java对象:RpcRequest.

Server stub根据RpcRequest中的类、方法、参数调用本地方法function2.

Server stub接收function2的处理结果,并将Java对象序列化:RpcResponse.

Server stub找到对应服务的IP:Port,Server通过socket将RpcResponse返回给Client.

Client stub接收到响应体,并返序列化为Java对象RpcResponse,将结果返回给function1.

RPC解决了什么问题

让分布式系统中不同服务之间调用远程方法像本地调用一样简单,这些服务可能部署在不同的机器上。

常见的RPC框架

RMI(JDK自带)
Hession 是一个轻量级的remoting on http工具,使用简单的方法提供了RMI的功能。
Dubbo 开源高性能RPC框架,可以和Spring框架集成,是Spring Cloud Alibaba 中的官方组件。
gPRC 可以在任何环境中运行的开源高性能RPC框架。
Apache Thrift 跨语言RPC通信框架。

对比HTTP和PRC

RPC 是一种设计,为了解决不同服务之间的调用问题, 它一般会包含有 传输协议序列化协议 ,以及丰富的服务治理功能。
HTTP 是一种协议,RPC框架可以使用 HTTP协议(基于TCP/IP协议栈传输数据)作为传输协议或者直接使用TCP作为传输协议,使用不同的协议一般也是为了适应不同的场景。
此外,一个优秀的RPC框架还提供了“服务注册与发现”、负载均衡、服务治理等功能。
对于连接方式:
rpc支持长连接。
HTTP1.x只支持短连接,HTTP2.0支持长连接。
性能:
RPC可以基于很多序列化方式,比如Kryo 和 FST,Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等,且性能比较高。
HTTP(超文本传输)主要是通过JSON进行序列化和反序列化,效率较低。
注册中心:
RPC框架一般有服务注册与发现中心,无需记住每台服务器的地址。
HTTP都是直连,必须知道IP或域名才能访问。
负载均衡:
当调用某一服务时存在多个部署该服务的服务器,
RPC框架一般自带负载均衡策略。
HTTP一般需要借助第三方工具实现负载均衡,比如NGINX(upstream+proxy_pass)。
总结:RPC框架一般带有丰富的服务治理功能,适合企业内部接口调用。HTTP实现简单,标准化程度高,适合多平台之间相互调用