HTTP与RPC之间的区别
发布于 4 年前 作者 rwan 3401 次浏览 来自 分享

背景

网上对于使用HTTP还是RPC有许多讨论,rpc 比 http 快了多少倍?既然有了 http,为什么还要用 rpc 调用等等。那我们不妨来罗列一下两者的区别和优缺点,看看具体这两者之间有些什么区别。

简介

在详述两者区别之前,我们先要对这两者进行一些说明:

RPC(Remote Procedure Call,远程过程调用)

HTTP(HyperText Transfer Protocol 超文本传输协议)

RPC是基于 TCP/IP协议,HTTP则是基于HTTP协议,我们首先来看一下下面这张OSI的七层网络结构模型。

实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。我们应该将重点放在应用层和传输层这两个层面。因为HTTP是应用层协议,而TCP是传输层协议。如果不是很明白的话那我们就具体用图说明一下。

TCP/IP通信

在利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则从链路层往上走。如下:

HTTP通信

使用HTTP请求如下所示:

我们从上面两张图其实就很清晰的明白了,HTTP其实就是建立TCP/IP之上的一种应用层协议,而RPC呢其实就是自定义的TCP/IP协议。

这里我们来说一下很多人的一个理解误区,那就是 「HTTP协议相较于自定义TCP报文协议,增加的开销在连接的建立与断开」。其实不然:

  1. HTTP协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接
  2. HTTP也可以使用 Protobuf 这种二进制编码协议对内容进行编码

那我们得出两者最大区别就是 「传输协议不同」。

在通用定义的HTTP1.1协议的TCP报文中包含太多废信息,我们来看看一个POST协议的大致格式

HTTP/1.0 200 OK 
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
  <body>Hello World</body>
</html>

我们可以看到,即使编码协议即Body采用的是二进制编码协议,但是报文元数据也就是Header头的键值对还是使用了文本编码,我们可以看到上面的这条协议,其实有效字节数只有30%,虽然实际应用中报文内容不会那么短,但是累计下来报头的占比也是相当可观的。

那么我们再来对比一下自定义TPC协议的报文

整个报头所占的字节只有16Byte,大大精简了传输内容。

但这里的效率优势仅仅是针对 HTTP1.1协议来说的,HTTP2.0协议已经有话了编码效率,而且也支持了多路复用等等高性能的能力,例如GRPC这种RPC库就是使用了HTTP2.0协议。所以其实在性能上,两者的差距已经不在那么巨大。但仅针对于HTTP1.1协议与RPC协议来对比,后者的性能能够达到前者的10倍甚至100倍。

如何选择

我们来总结一下,基于HTTP1.1协议与RPC协议的比较下:

  1. RPC比HTTP更快
  2. RPC整体实现更为复杂,HTTP更为开箱即用
  3. HTTP更为灵活,因为它不关心实现细节,跨平台跨语言。
回到顶部