一、问题解析

关于DubboSpringCloud的优缺点,我以奈菲(Netflix)版本为例,从以下5个方面来分析:

1、从整体架构上来看

Dubbo和SpringCloud的模式都比较接近,都需要服务提供方、注册中心、服务消费方,差异并不大,Dubbo的架构图是这样的(如图):

dubbo和springboot版本兼容性_dubbo

而SpringCloud的架构图是这样的(如图):

dubbo和springboot版本兼容性_spring cloud_02

2、从核心要素来看

SpringCloud更胜一筹,在开发过程中只要整合SpringCloud的子项目就可以顺利的完成各种组件的融合,而Dubbo需要通过实现各种Filter来做定制,开发成本以及技术难度略高(如图)。

dubbo和springboot版本兼容性_java_03

3、从协议上看

Dubbo默认采用的是单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。Dubbo还支持其他各种通信协议,而SpringCloud使用HTTP协议的RESTAPI,因此,在通信速度上Dubbo略胜(如图)。

dubbo和springboot版本兼容性_java_04

4、从服务依赖方式看

Dubbo服务依赖比较重,需要有完善的版本管理机制,但是程序入侵少,而SpringCloud是自有生态,省略了版本管理的问题,它使用JSON进行交互,为跨平台调用奠定了基础(如图)。

dubbo和springboot版本兼容性_spring cloud_05

5、从组件运行流程看

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

dubbo和springboot版本兼容性_微服务_06

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

dubbo和springboot版本兼容性_spring cloud_07

但是,两者的业务部署方式相同,都需要前置一个网关来隔绝外部直接调用原子服务的风险。Dubbo需要自己开发一套API网关,而SpringCloud则可以通过Zuul配置就可以完成网关定制(如图)。

dubbo和springboot版本兼容性_微服务_08


dubbo和springboot版本兼容性_java_09