首先,HTTP它本质上是一个协议,它是互联网数据通信的基础,定义了一套如何在网络上交换超文本的一个规则。它的核心就是资源和状态。比如说我们用get去获取一个用户资源,用put去更新它。
而RPC本质是一种编程范式,或者说一个架构思想。它的目标就一句话,就是让远程的一个服务方法调用的这样像本地一样没有感知,对吧?简单自然。为了实现这个目标,我们需要一个完整的框架,这个框架要去解决一些问题,比如说序列化,网络传输,服务发现等等。但是协议这一块,RPC框架可以去选择HTTP,也可以去选择其他的一些高性能的,或者说自定义一些协议都可以。所以一个非常关键的认知,RPC是一种思想,而HTTP是实现这种思想其中一种可能的传输协议。
RPC里面我可以用HTTP协议,也可以用其他协议。所以我们不要去比较它们的区别,而是要清楚什么时候用HTTP,什么时候用RPC调用。首先适合HTTP请求的,第一个接口是对外暴露的。这个一般是HTTP请求,比如说给其他的第三方合作端的移动端用,对吧?HTTP是互联网的通信语言,任何客户端任何语言都是支持的。如果你是内部的服务调用,就可以采用RPC,比如说dubbo对吧?因为你内部的网络环境是可控的,那么使用协议,你可以去用HTTP,也可以去用一些性能最高的,然后二进制协议呀,或者说一些高序列化的一些方式。然后吞吐量它肯定是要高于HTTP的,能够去降低我们的一个延迟。
好,然后还有一个,如果你用的是同一种语言,对吧?就是语言是一样的调用,那么你可以去用到RPC的一些通信。好,如果你是不同语言,那么你只能用通用的HTTP。