0%

微服务框架选型之 Dubbo VS. Spring Cloud

当前开源的微服务框架有Dubbo, Spring Cloud, Dubbox, Motan, Thrift, GRPC 等;以Dubbo和Spring Cloud使用最广,本文仅对这两个框架结合自己项目的情况进行比较。

Dubbo 架构

Dubbo 架构图

从Dubbo的架构图中我们可以看出Dubbo重点是RPC框架,对应微服务相关的其它组件,如服务发现,配置管理等需要用户自己适配;

Spring Cloud架构

Spring Cloud架构图

Spring Cloud架构中包括了微服务生态中的大部分组件,包括但不限于服务发现,配置管理,路由网关,限流熔断等

详细比较

我们结合自己项目的情况从10个方面对两个框架比较

迁移成本

现有的系统正在线上运行,所以迁移过程中不能影响现有的系统而且尽量不耽误新功能的开发;

  1. Dubbo迁移过程
  • 分离服务接口到独立的jar包
  • 在服务端xml文件中配置服务接口将服务暴露出去
  • 在客户端引入接口jar包,在xml文件中引入服务端暴露的接口
  1. Spring Cloud迁移过程
  • 为接口定义HTTP协议
  • 服务端在controller里面以rest API的方式暴露接口
  • 客户端根据定义的http协议用FeignClient注解的形式定义访问接口
  • 客户端代码引入FeignClient定义的协议接口

由此可见,dubbo迁移不需要修改java 代码,spring cloud 需要为每个接口定义一套http协议,而且客户端需要定义访问接口

社区支持

社区支持我们参考github的数据

Dubbo Spring Cloud
Star 18k+ 2.1k+
Fork 12k+ 1.1k+
Contribute 70+ 130+
Open Issues 430+ 380+
Close Issues 740+ 1.9k+
Latest Updated 几个小时前,但是2014-10-30到2017-09-07断更 几个小时前

服务治理

  • Dubbo服务治理不太完善
  • Spring Cloud有比较完善的服务治理组件,Zuul, Ribbon, Hystrix等

生态建设

  • Dubbo生态包括: RPC框架,服务治理, 服务降级,其它相关组件可以集成第三方成熟的开源组件;
  • Spring Cloud生态包括: RPC框架,服务发现,配置服务,服务治理,服务降级,日志收集,任务管理,几乎包括了服务化相关的所有组件;

分布式事务

Dubbo和Spring Cloud 都没有实现分布式事务

运维成本

运维需要关注以下组件

  1. 服务发现
  • Dubbo采用Zookeeper公司有Zookeeper的使用经验
  • Spring Cloud采用Eureka,需要搭建新的eureka服务
  1. 配置管理
  • Dubbo采用Apollo,公司已经投入生产环境
  • Spring Cloud 需要重新部署spring cloud config
  1. 服务治理
  • Dubbo 需要独立部署Dubbo-OPS, Zipkin/hydp/cat
  • Spring Cloud 需要独立部署 Zuul, Zipkin
    综上,Dubbo新部署2个组件,Sping Cloud新部署4个组件

开发流程

  • Dubbo开发流程
    1. 确保服务发现组件已启动
    2. 定义接口,生成接口jar包发布到maven仓库
    3. 服务端实现接口逻辑;同时客户端引入接口jar包,实现客户端逻辑, 完成自测
    4. 客户端服务端联调
  • Spring Cloud开发流程
    1. 确保服务发现组件已启动
    2. 定义http接口,形成文档
    3. 服务端实现接口逻辑而且以rest API的形式发布出去;同时客户端根据http接口约定实现客户端逻辑,完成自测
    4. 客户端服务端联调
      所以,Dubbo的接口具有强依赖性,Spring Cloud主要依赖约定

集成测试

Dubbo和Spring Cloud集成测试的时候都需要服务的和客户端配合完成

学习成本

  • Dubbo主要提供Spring Xml配置的方式,同时社区也提供SpringBoot的注解方式Dubbo Spring Boot Project ,而且Dubbo官方提供了最佳实践;目前我们的项目中两种方式都存在,所以学习成本基本可以忽略;
  • Spring Clould是建立在SpringBoot基础上的,采用大量的注解方式,目前我们也大量使用SpringBoot, 所以学习成本基本可以忽略;

性能

  • Dubbo默认采用Dubbo协议,Dubbo协议工作在TCP层,同等条件下性能优于HTTP协议
  • Spring Clould采用HTTP协议, 性能略逊与Dubbo

最后将以上比较项目给出数值的形式

对比项目 权重 Dubbo Spring Cloud
迁移成本 10 8 4
社区支持 9 7 8
服务治理 8 5 7
生态建设 7 7 8
分布式事务 6 0 0
运维成本 5 4 3
开发流程 4 3 2
集成测试 3 2 2
学习成本 2 2 1
性能 1 1 0
总计 37 33

结论:

Dubbo优势在于从迁移成本低,能在尽可能不改动现有代码的基础上完成服务化的迁移,而且我们团队成员使用Dubbo的经验比使用Spring Cloud的经验丰富;Spring Cloud的优势在于生态比较完善,社区支持良好;最终根据我们项目当前实际情况,我们认为Dubbo是最好的选择,可以在业务开发的同时平滑地完成服务化;