ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Dubbo问题

Dubbo问题 Dubbo基于TCP长连接NIO比HTTP短连接效率更高为什么Dubbo 效率更高是因为“复用连接省握手 NIO 高并发省线程 二进制序列化省带宽”三者叠加。但这主要适用于“内部高频小请求”场景对外暴露或低频调用时HTTP 的通用性和易用性反而更有优势。网络层面的“效率”差异你提到的点HTTP短连接每次请求都要经历TCP 三次握手 可能还有 TLS/SSL 加密握手。如果一次请求只传几十 KB 数据光是建立连接的开销就占了很大比例。Dubbo长连接连接建立后复用省去了重复握手的网络 RTT往返时延和 CPU 加解密开销。这个差异在“高并发小数据量”场景下非常明显但在“大文件传输”场景下传输时间会淹没握手时间差异反而不大。更核心的差异通信模型BIO vs NIO你提到了 Dubbo 基于 NIO这是比“长连接”更关键的因素HTTP 1.1传统虽然是长连接Keep-Alive但底层 Servlet 容器大多基于BIO阻塞 I/O或简单线程池。一个请求独占一个线程直到响应返回。如果服务处理慢线程就被挂起导致线程资源浪费。DubboNetty NIO基于Reactor模型。IO 线程只负责收发数据不执行业务逻辑。业务逻辑交给业务线程池异步处理。一个线程可以同时处理成千上万个连接IO 利用率极高。协议本身的序列化效率这也是容易被忽略的一点HTTP通常使用JSON/XML文本协议包含大量冗余字段如{name:test}中的大括号、引号体积大序列化/反序列化耗 CPU。Dubbo默认使用Hessian2或可选的Protobuf二进制协议。数据体积更小解析速度更快网络传输时间更短。关键前提“效率更高”是有场景限制的Dubbo 的高效是有代价的并不是绝对碾压适用场景内部微服务高频调用QPS 高、数据包小。此时 Dubbo 优势明显。不适用的场景跨公网调用NAT/防火墙HTTP/HTTPS 穿透性更好Dubbo 自定义协议容易被拦截。前端浏览器调用浏览器只支持 HTTP/WebSocket无法直接使用 Dubbo 协议。大文件/大报文此时传输带宽是瓶颈协议差异可忽略HTTP 的生态工具反而更丰富。生产环境中Dubbo和Open Feign可以共存么
返回列表