分布式项目远程调用,大部分都是使用dubbo,那dubbo跟http请求有什么别人呢,为什么不直接用http请求呢,也不需要配置,非常简单,所以今天拿dubbo和http做一下比较。



首先从协议层开始比较

TCP/IP 层级模型结构

为什么不用dubbo要用mq 为什么用dubbo代替http_封装

网络结构

作用

应用层

直接对应用程序提供服务,定义了用于在网络中进行通信和传输数据的接口

表示层

定义不同的系统中数据的传输格式,编码和解码规范等

会话层

管理用户的会话,控制用户间逻辑连接的建立和中断

传输层

管理着网络中的端到端的数据传输

网络层

定义网络设备间如何传输数据

数据链路层

将上面的网络层的数据包封装成数据帧,便于物理层传输

物理层

从第七层传到第一层,接受方则相反,主要就是传输二进制数据。

从上面图中可以看出五层协议结构里面,表示层和会话层合并到了应用层,因为HTTP是应用层协议,而TCP/IP是传输层协议,因此使用TCP/IP协议的dubbo自然性能要比HTTP协议快。



再从socket连接来比较

socket连接

dubbo默认使用socket长连接,即首次访问建立连接以后,后续网络请求使用相同的网络通道,这样避免了多次重复创建TCP连接的开销



http1.1协议默认使用短连接,每次请求均需要进行三次握手,而http2.0协议开始将默认socket连接改为了长连接



http协议有一个特效,会有一系列的http header,这些内容往往会占用几k的数据,访问量非常大的时候,这些数据也是一种负担,而使用dubbo,协议可以自定义,这些无关数据可以省掉。



再从封装性来聊一聊

封装

简单来说成熟的rpc库相对http容器,更多的是封装了“服务发现”,"错误重试,负载均衡"一类面向服务的高级特性。可以这么理解,rpc框架是面向服务的更高级的封装。如果把一个http server容器上封装一层服务发现和函数代理调用,那它就已经可以做一个rpc框架了。



安全方面呢,谁的安全性更好呢

安全

dubbo设计之初基本都是考虑内网通讯,安全上基本没什么考虑,比http的安全差了很远


小结:

小编就总结到这里,欢迎大家来补充()