dubbo 和 springcloud的区别和联系

6,546 阅读3分钟

「这是我参与 2022 首次更文挑战的第 15 天,活动详情查看:2022 首次更文挑战

同声相应,同气相求。

前言

dubbo 是基于 java 的高性能 RPC 分布式服务框架,在分布式有着广泛的应用,即使在 springcloud 体系如火如荼的当前, dubbo 依然占有一席之地。今天我们就拿面试中常见的问题来分享一下,即 dubbo 和 springcloud 的区别和联系。

dubbo

说起 dubbo,就绕不开这样一张图,dubbo 的启动流程:

  • 1 start, 在 spring 容器启动时,会自动启动 dubbo 的服务提供者 provider。
  • 2 register,dubbo 的服务提供者 provider 在启动后会去注册中心注册内容,内容包括: ip 、port、接口列表(接口类和方法)、版本、 通信协议。
  • 3 subscribe,当订阅者 consumer 启动后,会自动去 registry 获取已经注册的服务信息。
  • 4 notify ,当注册中心监听到 provider 的注册信息发生变化时,register 会主动推送消息给 consumer 消费者。
  • 5 invoke, consumer 调用同步调用 privider 的方法,并等待调用后的返回结果。
  • 6 count, 监控计数,每隔 2 分钟,provider 和 consumer 自动向监控者 monitor 发送调用统计信息。

对于 dubbo 的应用场景,如下图所示:

springcloud

springcloud 的经典图如下所示,我们知道在分布式系统中有一个 cap 理论,其中的注册中心 springcloud 使用的是保证 AP 的 eureka , 而且 springcloud 提供的是一整套的解决方案,不像 dubbo 一样仅仅是某几项功能。

springcloud 各个组件的架构图如下所示,这里体现的是一个生态系统,包括网关、负载均衡、服务治理、注册中心、链路追踪、配置中心等组件,所有的组件都是可以用项目的方式进行搭建,而不是向 dubbo 一样需要在服务器上搭建各种服务,比如 zk, dubboadmin 等:

dubbo 和 springcloud 的异同

springcloud 不是一个开发框架,而是一整套的解决方案,而 dubbo 仅仅是一个 rpc 的框架。

  • 1 dubbo 采用的是传输层 tcp 协议,是二进制传输的,占用带宽较少,序列化采用的是 jdk 自带的序列化协议。springcloud 是应用层 http 协议,占用带宽比较多,同时 springcloud 采用的是 json 报文传输,消耗会比较大。
  • 2 dubbo 调用使用的是长链接,适合传输数据量小的包,而对于 springcloud 是短连接,适合传输大数据量的信息,比如图片、文本之类的。
  • 3 dubbo 开发需要依赖 jar 包,对依赖的管理比较复杂。springcloud 的接口协议比较松散,约束性不强。
  • 4 关于 dubbo 和 springcloud 的提供的服务功能差异如下图所示:
  • 5 注册中心使用的不同,dubbo 默认使用的是 zk, 而 springcloud 使用的注册中心为 eureka, 前者保证的是 cp ,而后者保证的是 ap, 但是随着 springcloud alibaba 的出现,又引入了 nacos 这样的神器,兼有注册中心和配置中心的功能。

总结

本文简单的介绍了 dubbo 和 springcloud 的联系和区别,dubbo 作为一款 rpc 框架在技术迭代后仍然发挥着重要作用,因为不是所有的业务场景都需要高大上的 springcloud 成套解决方案,扎实掌握成熟技术,保持对新技术的跟进学习,拓宽视野才是最重要的。