用 Dubbo 传输文件?被老板一顿揍

本文探讨了Dubbo服务中传输文件的不合适之处,包括内存占用问题和单连接模型的限制,并对比了HTTP协议的优势。文章还讨论了Feign在文件传输上的不足,指出Feign虽然作为HTTP客户端,但仍然存在内存占用问题。总结建议在文件传输场景下,应避免使用Dubbo,考虑直接使用HTTP或客户端直传的方式。
摘要由CSDN通过智能技术生成

公司之前有一个 Dubbo 服务,其内部封装了腾讯云的对象存储服务 SDK,目的是统一管理这种三方服务的SDK,其他系统直接调用这个对象存储的 Dubbo 服务。这样可以避免因平台 SDK 出现不兼容的大版本更新,从而导致公司所有系统修改跟着升级的问题。

想法是好的,不过这种做法并不合适,因为 Dubbo 并不适合传输文件。好在这个系统在上线不久就没人用废弃了……

虽然系统废弃了,不过就这个 Dubbo 上传文件的主题还是可以详细分析下,聊聊它到底为什么不适合传文件。

Dubbo 怎么传文件?

难道这样直接传 File 吗?

void sendPhoto(File photo);

当然不行!Dubbo 只是将对象进行序列化然后传输,而 File 对象就算序列化也无法处理文件的数据,所以只能直接发送文件内容:

void sendPhoto(byte[] photo);

但这样就会导致 consumer 端需要 一次性读取完整的文件内容至内存 中,再大的内存也扛不住这样玩。而且 provider 端在接受数据解析报文时,也需要一次性将 byte[] 读取至内存中,也是一样有内存占用过高问题。

单连接模型问题

除了内存占用问题之外,Dubbo(这里指 Dubbo 协议)的单连接模型也不适合文件传输。

Dubbo 协议 默认是单连接的模型,即一个 provider 的所有请求都是用一个 TCP 连接。默认使用 Netty 来进行传输, 而 Netty 中为了保证 Channel 线程安全,会将写入事件进行排队处理 。那么在单连接下,多个请求都会使用同一个连接,也就是同一个

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud 和Dubbo 都是企业级服务发现和微服务架构的解决方案,它们各有特点: **Spring Cloud**: 1. **背景不同**:Spring Cloud 是基于Spring框架的一系列组件集合,构建在成熟稳定的Spring生态系统之上。 2. **轻量级**:Spring Cloud 侧重于提供微服务的全栈解决方案,包括服务网关(Zuul)、服务注册与发现(Eureka)、负载均衡(Hystrix)、断路器(Resilience4j)、消息总线(RabbitMQ 或 Kafka 等)等。 3. **声明式API**:通过@EnableXxx注解轻松启用功能,简化了服务集成的配置。 4. **开箱即用**:Spring Cloud 提供了一套完整的工具链,可以快速搭建微服务架构。 **Dubbo**: 1. **初心不同**:Dubbo 主要是阿里巴巴内部早期的分布式服务治理框架,旨在解决高性能、高可用的远程服务调用问题。 2. **设计目标**:强调性能、稳定性、高并发,适合大规模商业系统。 3. **协议丰富**:除了HTTP和RPC外,还支持其他如TCP、UDP、JMS等通信协议。 4. **侵入性较强**:Dubbo 使用的是注解驱动的编程模式,需要在每个服务接口上显式配置。 **区别总结**: - Spring Cloud 更注重微服务的全面解决方案和开发体验,而Dubbo 更偏向底层服务治理。 - Spring Cloud 可能更适合对快速迭代和开发效率要求较高的团队。 - Dubbo 则适用于对性能、稳定性和容错有极高要求的大型企业应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值