Dubbo 与 Spring Cloud

最近阿里方面低调重启Dubbo的更新,连续发布了几个更新版本,修复了大量的问题和进行框架优化,这也让业界目光又重新聚焦到了Dubbo 和 Spring Cloud 这两个开发者熟知的框架上,

首先看下Dubbo和Spring Cloud有何不同?

功能 Dubbo Spring Cloud
服务注册中心 Zookeeper Spring Cloud Netflix Eureka
服务调用方式 RPC REST API
服务监控 Dubbo-monitor Spring Boot Admin
断路器 不完善 Spring Cloud Netflix Hystrix
服务网关 Spring Cloud Netflix Zuul
分布式配置 Spring Cloud Config
服务跟踪 Spring Cloud Sleuth
消息总线 Spring Cloud Bus
数据流 Spring Cloud Stream
批量任务 Spring Cloud Task

从上图可以看出其实Dubbo的功能只是Spring Cloud体系的一部分。

但其实这样对比是不够公平的,首先 Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流量监控和熔断。而 Spring Cloud 诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外由于依托了 Spring、Spring Boot 的优势之上,两个框架在开始目标就不一致,Dubbo 定位服务治理、Spring Cloud 是一个生态。

另外:

· Dubbo存在的jar包依赖问题(大体是指,Dubbo内部对部分通用jar包依赖了不同版本)(后续更新:可以通过其它方式处理,并且Dubbo开发团队已经在后续版本中解决,但是需要升级);
· 关于业界很多人说Dubbo是二进制RPC,Spring Cloud是基于HTTP协议的JSON,以此来衡量性能和传输效率,但其实存在不全面的地方, 感兴趣的完全可以通过测试工具去验证;
· 对于比较两者架构臃肿程度(例如Dubbo没有自己的依赖体系、Spring Cloud 全家桶过于臃肿自由度不高等),这些都是基于上述描述的一样,二者是不同是时期、不同目的的产物,自身设计都是尽可能贴合当下需求;

如果仅仅关注于服务治理的这个层面,Dubbo其实还优于Spring Cloud很多:

· Dubbo 支持更多的协议,如:rmi、hessian、http、webservice、thrift、memcached、redis 等。
· Dubbo 使用 RPC 协议效率更高,在极端压力测试下,Dubbo 的效率会高于 Spring Cloud 效率一倍多。
· Dubbo 有更强大的后台管理,Dubbo 提供的后台管理 Dubbo Admin 功能强大,提供了路由规则、动态配置、访问控制、权重调节、均衡负载等诸多强大的功能。
· 可以限制某个 IP 流量的访问权限,设置不同服务器分发不同的流量权重,并且支持多种算法,利用这些功能我们可以在线上做灰度发布、故障转移等,Spring Cloud 到现在还不支持灰度发布、流量权重等功能。

所以Dubbo专注于服务治理;Spring Cloud关注于微服务架构生态。

Dubbo发布对Spring Cloud有影响吗?

国内技术人喜欢拿 Dubbo 和 Spring Cloud 进行对比,是因为两者都是服务治理非常优秀的开源框架。但它们两者的出发点是不一样的,Dubbo 关注于服务治理这块并且以后也会继续往这个方向去发展。Spring Cloud 关注的是微服务治理的生态。因为微服务治理的方方面面都是它所关注的内容,服务治理也只是微服务生态的一部分而已。因此可以大胆的断定,Dubbo 未来会在服务治理方面更为出色,而 Spring Cloud 在微服务治理上面无人能敌。

同时根据 Dubbo 最新的更新技术来看,Dubbo 也会积极的拥抱开源,拥抱新技术。Dubbo 接下来的版本将会很快的支持 Spring Boot,方便我们享受高效开发的同时,也可以支持高效的服务调用。Dubbo 被广泛应用于中国各互联网公司,如今阿里又重新重视起来并且发布了新版本和一系列的计划,对于正在使用 Dubbo 的公司来说是一个喜讯,对于中国广大的开发者来说更是一件非常喜悦的事情。我们非常乐于看到中国有一款非常优秀的开源框架,让我们有更多的选择,有更好的支持。

两者其实不一定有竞争关系,如果使用得当甚至可以互补;另外两个关注的领域也不一致,因此对 Spring Cloud 的影响甚微。

如何选择?

可能很多人正在犹豫,在服务治理的时候应该选择那个框架呢?如果公司对效率有极高的要求建议使用 Dubbo,相对比 RPC 的效率会比 HTTP 高很多;如果团队不想对技术架构做大的改造建议使用 Dubbo,Dubbo 仅仅需要少量的修改就可以融入到内部系统的架构中。但如果技术团队喜欢挑战新技术,建议选择 Spring Cloud,Spring Cloud 架构体系有有趣很酷的技术。如果公司选择微服务架构去重构整个技术体系,那么 Spring Cloud 是当仁不让之选,它可以说是目前最好的微服务框架没有之一。

最后,技术选型是一个综合的问题,需要考虑团队的情况、业务的发展以及公司的产品特征。最炫最酷的技术并不一定是最好的,选择适合自己团队、符合公司业务的框架才是最佳方案。技术的发展永远没有尽头,因此我们对技术也要保持空杯、保持饥饿、保持敬畏!

相关网站和博文参考(持续更新中…):

Apache Dubbo 官网
Apache Dubbo 生态系统,构建产品级微服务
阿里重启维护 Dubbo 了 - InfoQ
阿里Dubbo疯狂更新,关Spring Cloud什么事? - ityouknow
Dubbo 各版本总结与升级建议
Dubbo Spring Boot 脚手架