Http和Rpc以及Http1.0/1.1/2.0之间有什么区别
http 1.0、1.1、2.0之间有什么区别
http 1.0
1.0:短连接
100张图需要100次tcp流程。
http 1.1
1.1:长连接
100张图需要1次tcp流程(一次完整的流程3次握手4次挥手)。
http 2.0
2.0:长连接+io多路复用模型(五大模型之一)
基于1.1的长连接的基础上,增加io多路复用模型。
Http和Rpc的区别
如果不是内部的接口调用,而是跨总服、跨公司或者是跨一些项目时,很可能会用到两个不同的东西,一个是Http,还有一个是Web Service。
如果是同一个公司的不同系统,上下流的关系,我们很可能会用到一些消息队列,比如说Kafka、RocketMQ等一系列的东西。
性能
主要差别在序列化和反序列化。
rpc通过thrift实现了二进制传输。
http使用的是json,序列化更消耗性能。
协议
rpc基于tcp也可以基于http
http只能是http
负载
rpc自带负载均衡
http需要自己搞,例如nginx等等
传输效率
rpc:可以自定义tcp协议,报文比较小。
http里面包含了很多头部信息,例如keepalivetime,refer等。
如果你基于http2.0协议,也可以减少报文,提高效率。
通知
rpc:自动通知。
http:事先通知,自行修改nginx配置或者其他负载均衡的配置。
总结
rpc适用于公司内部的调用,传输效率比较高,但是不建议去传一些文本、视频或者是图片。他默认自己也实现了负载。他适用于公司里面,大家都使用相同的技术栈。
如果我们的http适用于对外的这种环境,比如说我和其他项目组之间的、或者说我和其他公司之间的,像这些层面,我们可以考虑用到http或者是WebService。
如果是一个系统或者我们公司上下内部的,这种情况下我们可以通过kafka或者RocketMQ等来构造一个消息的传输。
像这种情况下,我们能做到第三方调用的接口实现起来比较简单,而且相对来说比较灵活。不局限于Java、Python,它是跨语言、跨平台的。