【9.2】HTTP 和 RPC 的区别

734 阅读2分钟

首先,HTTP 和 RPC 是两个维度的东西,没有对比性,很多人可能会把他们混淆,下面我们来分别介绍一下:

HTTP

HTTP 是一种协议,超文本传输协议,是为了 web 浏览器和 web 服务器之间的通信来设计的,当然也可以用作别的(比如服务的 openAPI)。

HTTP 协议规定了浏览器和服务器的一种通信格式,让任何浏览器和服务器都可以以这种形式正常交流,比如:

image.png

数据传输通常是基于 TCP/IP 协议的。但是 HTTP 本身没有规定数据传输一定要用什么协议,只要是可靠的传输其实都可以,目前基本都是基于 TCP/IP 的。

RPC

RPC 是一个概念,是远程过程调用,这是相对于本地过程调用来说的。RPC 的通信可以基于 HTTP 协议,也可以基于别的协议,是不做约束的。

本地过程调用,之前在单体时代,我们服务中的 service 调用的就是我们服务中的方法

const data = await this.user.getUserList()

但是现在都是微服务的方式,根据业务模块做了不同服务的拆分,比如校验服务、基础服务等,不同的小组维护不同自己模块的服务。

不同服务之间需要进行通信,就可以使用 rpc 的方式

const data = await userRpc.getUserList()

为什么需要 rpc 呢?

除了 rpc 的方式,我们也可以选择 http 的方式做通信,但是 rpc 有这些优势:

  1. 使用的方式和之前本地调用类似,比较方便
  2. http 协议会比较冗余,rpc 的格式相对简单

不过 rpc 也有不同的实现方式,比如常见的 thrift,在公司内部统一实现方式即可

公司内部的服务之间调用,一般采用 rpc 的方式

http 的特点是比较通用,像对外的 openAPI,第三方的接口,一般都是 http 的格式的