基础-http与rpc的不同


HTTP 协议(Hyper Text Transfer Protocol),又叫做超文本传输协议。

RPC(Remote Procedure Call),远过程调用。它本身不是一个具体的协议,而是一种调用方式。虽然大部分RPC协议底层使用TCP,但实际上它们不一定非得使用TCP,改用UDP或HTTP,其实也可以做到类似的功能。

HTTP主要用户B/S架构,而RPC更多用于C/S架构。

主要区别

服务发现

HTTP中,知道服务域名,就可以通过DNS服务去解析得到它背后的IP地址,默认80端口。

RPC一般会有专门的中间服务去保存服务名和IP信息,比如Consul或Etcd甚至是Redis。想访问服务,就去这些中间服务获取IP和端口信息。由于DNS也是服务发现的一种,所以也有基于DNS去做服务发现的组件,比如CoreDNS。

底层连接形式

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

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

传输的内容

基于TCP传输的消息,都是消息头和消息体组成的。Header用于标记一些特殊信息,其中最重要的是消息体长度。Body则是放我们真正需要传输的内容,而这些内容只能是二进制01串。对于HTTP1.1,传输内容以字符串为主。Body使用Json来序列化结构体数据,内容冗余、重复。

RPC定制化程度更高,可以用体积更小的Protobuf或其他序列化协议去保存结构体数据,同时不需要考虑浏览器的各种行为,比如302。因此性能更好。


  目录