什么是HTTP,什么是RPC
HTTP
超文本传送协议HTTP规定在HTTP客户和HTTP服务器之间的每次交互,都由一个ASCII码串构成的请求和一个类似的通用互联网扩充,即“类MIME(MIME-like)”的响应组成。HTTP报文通常都使用TCP连接传送。
HTTP基础可以参考HTTP协议——超文本传送协议
RPC
远程过程调用RPC(Remote Procedure Call)是一种计算机通信协议,允许一个节点调用另外一个节点的程序,而感觉上就像调用本地的程序一样。发送请求的节点是客户端(Client),处理请求并且执行返回结果的是服务端(Server)。
RPC主要包括两部分传输协议和序列化协议,常用的Thrift既是传输协议,也是序列化协议。
HTTP vs RPC
一种说法RPC比HTTP更快
不单是效率这么简单。HTTP2.0逐渐被越来越多的网站应用,优化数据传输的效率,多路复用技术的应用也增加了服务器响应的速度。简单地说RPC比HTTP更快是片面,而且不准确的。
从两个方面比较
传输协议
HTTP报文通常都使用TCP连接传送。而RPC因企业内部自己使用可能存在多种不同的协议,例如gRPC使用HTTP2协议,dubbo使用自定义的TCP协议。
因为HTTP协议是通用协议,在自主性方面有先天不足,一些信息无论是否需要其实都需要传输,比如HTTP1.1的开始行、首部行和实体主体这些几乎都是不可以缺少的,而且实体主体的编码格式也需要统一,由于诸多的限制,比起规范更加宽松的RPC传输协议自然传输效率更可能相对低一些。从这方面看HTTP更具有普适性。
同样,规范更加宽松的RPC可以面向服务封装自定义的一些特性,例如适时熔断,服务发现等等,另外根据需要也会做一些效率和可用性上的优化。
序列化协议
同样地,在序列化协议上,HTTP也因为具有普适性而不如RPC的可操作性强。
总结
在对外提供接口时,因为要具有大家都认可的统一的协议,因为普适性,HTTP是首选。对内部提供接口时,良好的面向服务封装的RPC更具有竞争力,可以针对服务进行可用性和效率的优化,包括业务需要上的服务发现、熔断等;也包括单纯技术上的序列化的优化提高传输效率。