其实我个人不太愿意,拿Dubbo和Spring Cloud进行对比,因为它俩最初出现并不是为了解决同一类问题。但是,国内技术是在太卷,加上微服务的盛行,很多互联网大厂也经常会问到这个问题。那么今天,我还是给大家来详细聊一聊。
另外,我花了1个多星期把往期的面试题解析配套文档准备好了,想获取的小伙伴可以在我的煮叶简介中找到。
1、两者对比
关于Dubbo和Spring Cloud的优缺点,我以奈菲(Netflix)版本为例,从以下5个方面来分析:
1)、从整体架构上来看
Dubbo和SpringCloud的模式都比较接近,都需要服务提供方,注册中心,服务消费方。差异并不大。Dubbo的架构图是这样的,
而Spring Cloud的架构图是这样的
2)、从核心要素来看
Spring Cloud 更胜一筹,在开发过程中只要整合Spring Cloud的子项目就可以顺利的完成各种组件的融合,而Dubbo需要通过实现各种Filter来做定制,开发成本以及技术难度略高。
3)、从协议上看
Dubbo默认采用的是单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。Dubbo还支持其他各种通信协议,而Spring Cloud 使用HTTP协议的REST API。因此,在通信速度上Dubbo略胜。
4)、从服务依赖方式看
Dubbo服务依赖比较重,需要有完善的版本管理机制,但是程序入侵少。而Spring Cloud是自有生态,省略了版本管理的问题,它使用JSON进行交互,为跨平台调用奠定了基础。
5)、从组件运行流程看
Dubbo的每个组件都是需要部署在单独的服务器上, 用来接收前端请求、聚合服务,并批量调用后台原子服务。每个Service层和单独的DB交互。
而Spring Cloud所有请求都统一通过 API 网关(Zuul)来访问内部服务。网关接收到请求后,从注册中心(Eureka)获取可用服务。由 Ribbon 进行均衡负载后,分发到后端的具体实例。微服务之间通过 Feign 进行通信处理业务。
但是,两者的业务部署方式相同,都需要前置一个网关来隔绝外部直接调用原子服务的风险。Dubbo需要自己开发一套API 网关,而Spring Cloud则可以通过Zuul配置就可以完成网关定制。所以,从使用方式上Spring Cloud更加方便。
以上就是我对Dubbo和Spring Cloud的理解。