TrumanWong

既然有HTTP协议,为什么还要有RPC

TrumanWong
11/15/2022

什么是RPC

远程过程调用RPC(Remote Procedure Call)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC是一种服务器-客户端Client/Server模式,经典实现是一个通过__发送请求-接受回应__进行信息交互的系统。

什么是HTTP

超文本传输协议HTTP(HyperText Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的__应用层协议__。

HTTP和RPC有什么区别

现在我们来分析RPCHTTP区别比较明显的几个点:

服务发现

首先要向某个服务器发起请求,得先建立连接,而建立连接的前提是,得知道IP地址和端口。这个找到服务对应的IP端口的过程,其实就是服务发现。

HTTP中,则是根据服务的域名,通过DNS服务去解析得到IP地址,默认80端口。

RPC的话,就有些区别,一般会有专门的中间服务去保存服务名和IP信息,比如consuletcd,甚至是redis。想要访问某个服务,就去这些中间服务去获得IP和端口信息。由于dns也是服务发现的一种,所以也有基于dns去做服务发现的组件,比如CoreDNS

底层连接形式

以主流的HTTP1.1协议为例,其默认在建立底层TCP连接之后会一直保持这个连接keep alive,之后的请求和响应都会复用这条连接。

RPC协议,也跟HTTP类似,也是通过建立TCP长链接进行数据交互,但不同的地方在于,RPC协议一般还会再建个连接池,在请求量大的时候,建立多条连接放在池内,要发数据的时候就从池里取一条连接出来,用完放回去,下次再复用。

传输的内容

RPC,使⽤⾃定义的TCP协议,可以让请求报⽂体积更⼩,或者使⽤HTTP2协议,也可以很好的减少报⽂的体积,提⾼传输效率。

HTTP,如果是基于HTTP1.1的协议,请求中会包含很多⽆⽤的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为⼀个RPC来使⽤的,这时标准RPC框架更多的是服务治理。

总结

因为良好的RPC调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用HTTP调用则缺少了这些特性。