Spring Cloud 与 Dubbo的比较

0. 介绍  

微服务的核心要素在于服务的发现、注册、路由、熔断、降级、分布式配置,基于上述几种必要条件对 Dubbo 和 Spring Cloud 做出对比。

当前微服务架构,Dubbo和SpringCloud比较火,另外还有Thrift、gRPC等等,下面把这些做一个比较,即可看出SpringCloud的强大之处。由于图片比较长,我分了两张图。

 

1. Spring Cloud 简介  

作为新一代的服务框架,Spring Cloud 提出的口号是开发“面向云的应用程序”,它为微服务架构提供了更加全面的技术支持
Spring Cloud是一个完整的微服务解决方案,正如上面的表格中展现的,它提供分布式情况下的各种解决方案合集。而Dubbo是一款高性能的Java RPC框架。Spring Cloud 自从发布到现在,仍然在不断的高速发展,几乎考虑了服务治理的方方面面,开发起来非常的便利和简单。

Spring Cloud 抛弃了 Dubbo 的 RPC 通信,采用的是基于 HTTP 的 REST 方式。严格来说,这两种方式各有优劣。虽然从一定程度上来说,后者牺牲了服务调用的性能,但也避免了上面提到的原生 RPC 带来的问题。而且 REST 相比 RPC 更为灵活,服务提供方和调用方,不存在代码级别的强依赖,这在强调快速演化的微服务环境下显得更加合适。

很明显,Spring Cloud 的功能比 Dubbo 更加强大,涵盖面更广,而且作为 Spring 的拳头项目,它也能够与 Spring Framework、Spring Boot、Spring Data、Spring Batch 等其他 Spring 项目完美融合,这些对于微服务而言是至关重要的。

微服务背后一个重要的理念就是持续集成、快速交付,而在服务内部使用一个统一的技术框架,显然比将分散的技术组合到一起更有效率。

更重要的是,相比于 Dubbo,它是一个正在持续维护的、社区更加火热的开源项目,这就可以保证使用它构建的系统持续地得到开源力量的支持。

 

2. Dubbo简介  

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo 出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司;只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,设计的目的还是服务于自身的业务为主。Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

在微服务架构的实施和落地过程中,通常我们会进行技术选型,很多人会拿阿里开源的Dubbo和Spring Cloud进行对比,实际上对比的是REST和RPC,其实Dubbo和Spring Cloud并不在同一领域,没有可比性。

Spring Cloud和Dubbo的对比有点不公平,Dubbo只是实现了服务治理,而Spring Cloud下面有17个子项目(可能还会新增)分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,一定程度来说,Dubbo只是Spring Cloud Netflix中的一个子集。但是在选择框架上,方案完整度恰恰是一个需要重点关注的内容。

打个不恰当的比喻:使用Dubbo构建的微服务架构就像组装电脑,各环节我们的选择自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了,总是让人不怎么放心,但是如果你是一名高手,那这些都不是问题;而Spring Cloud就像品牌机,在Spring Source的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础有足够的了解。

 

3. 运行流程  

Dubbo:每个组件都是需要部署在单独的服务器上,gateway用来接受前端请求、聚合服务,并批量调用后台原子服务。每个service层和单独的DB交互。

SpringCloud:所有请求都统一通过 API 网关(Zuul)来访问内部服务。网关接收到请求后,从注册中心(Eureka)获取可用服务。由 Ribbon 进行均衡负载后,分发到后端的具体实例。微服务之间通过 Feign 进行通信处理业务。


 

4. 优势  

SpringCloud基于Http调用的方式,更加灵活,但是消息封装臃肿(可以使用gzip压缩);Dubbo基于RPC调用的方式,使服务就像可以调用自己本地的服务一样调用别人的服务

Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况

Dubbo在传输前需要将数据进行序列化,同时接收返回数据结果也需要以统一的序列化方式反序列化;而SpringCloud需要封装请求头和请求体,通过Http向服务发起请求,在经过服务的处理之后封装响应头和响应体返回相应信息

SpringCloud更新快,处于高速迭代阶段;而Dubbo更新频率很低,在社区活跃度上SpringCloud优于Dubbo(社区越活跃,问题多,解决问题也多,资料多,同样框架也会越来越完善)

Dubbo 关注于服务治理这块并且以后也会继续往这个方向去发展,Spring Cloud 关注的是微服务的全套解决方案,服务治理也只是微服务生态的一部分而已。因此可以大胆的断定,Dubbo 未来会在服务治理方面更为出色,而 Spring Cloud 在微服务治理上面无人能敌。

需要强调的是 Dubbo 未来的定位并不是要成为一个微服务的全面解决方案(Spring Cloud 是),而是专注在 RPC 领域,成为微服务生态体系中的一个重要组件。

如果仅关注于服务治理的这个层面,Dubbo其实还优于Spring Cloud很多:
(1) 支持多种序列化协议,如 Hessian、HTTP、WebService。
(2) Dobbo Admin后台管理功能强大,提供了路由规则、动态配置、访问控制、权重调节、均衡负载等功能。
(3) Dubbo 使用 RPC 协议效率更高,在极端压力测试下,Dubbo 的效率会高于 Spring Cloud 效率一倍多

 

5. 比较  

从开发风格上来讲,Dubbo 更倾向于Spring Xml的配置方式,Dubbo官方也推荐这种方式。Spring Cloud基于Spring Boot,Spring Boot采用的是基于注解和JavaBean配置方式的敏捷开发。从开发速度上讲,Spring Cloud具有更高的开发和部署速度。

Spring Cloud 的通信方式大多数是基于HTTP Restful风格的,服务与服务之间完全无关、无耦合。由于采用的是HTTP Rest,因此服务无关乎语言和平台,只需要提供相应API接口,就可以相互调用。Dubbo 的通信方式基于远程调用,对接口、平台和语言有强依赖性。如果需要实现跨平台调用服务,需要写额外的中间件,这也是Dubbo存在的原因。

Dubbo更易上手,并且广泛使用于阿里巴巴的各大站点,经历了“双11”期间高并发、大流量的检验,Dubbo框架非常成熟和稳定。Spring Cloud服务框架严格遵守Martin Fowler 提出的微服务规范,社区异常活跃,它很可能成为微服务架构的标准

SpringCloud基于Http调用的方式,更加灵活,但是消息封装臃肿(可以使用gzip压缩);Dubbo基于RPC调用的方式,使服务就像可以调用自己本地的服务一样调用别人的服务
Dubbo在传输前需要将数据进行序列化,同时接收返回数据结果也需要以统一的序列化方式反序列化;而SpringCloud需要封装请求头和请求体,通过Http向服务发起请求,在经过服务的处理之后封装响应头和响应体返回相应信息

Dubbo 和 Spring Cloud 并不是完全的竞争关系,两者所解决的问题域并不一样。Dubbo 的定位始终是一款 RPC 框架,而 Spring Cloud 的目标是微服务架构下的一站式解决方案。如果非要比较的话,Dubbo 可以类比到 Netflix OSS 技术栈,而 Spring Cloud 集成了 Netflix OSS 作为分布式服务治理解决方案,但除此之外 Spring Cloud 还提供了配置、消息、安全、调用链跟踪等分布式问题解决方案。

 

6. 选择  

服务治理的时候应该选择那个框架?
如果公司对效率有极高的要求建议使用 Dubbo,相对比 RPC 的效率会比 HTTP 高很多,如果公司选择微服务架构去重构整个技术体系,那么 
Spring Cloud 是当仁不让之选,它可以说是目前最好的微服务框架没有之一,并且可以断言,将来Dubbo可以很好的整合到Spring Cloud中。

同时阿里巴巴已经推出了Spring Cloud Alibaba项目由两部分组成:阿里巴巴开源组件和阿里云产品组件,旨在为Java开发人员在使用阿里巴巴产品的同时,通过利用 Spring 框架的设计模式和抽象能力,注入Spring Boot和Spring Cloud的优势。

随着Spring Cloud Alibaba的推出,在服务治理方面,可以选的方案就有两个,但是Dubbo在RPC性能当仁不让,那么就看其整合程度。

Dubbo 的定位始终是一款 RPC 框架,而 Spring Cloud 的目标是微服务架构下的一站式解决方案。如果非要比较的话,Dubbo 可以类比到 Netflix OSS 技术栈,而 Spring Cloud 集成了 Netflix OSS 作为分布式服务治理解决方案,但除此之外 Spring Cloud 还提供了配置、消息、安全、调用链跟踪等分布式问题解决方案。

 

7. 其他  

参考:https://www.cnblogs.com/hmy-1365/p/11050265.html
https://blog.csdn.net/u010664947/article/details/80007767

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Freedom3568

技术域不存在英雄主义,不进则退

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值