Dubbo v Spring Cloud:两大技术栈如何选型?

news2024/11/28 16:00:20

Java全能学习+面试指南:https://javaxiaobear.cn
提到微服务开源框架,不可不说的是 Dubbo 和 Spring Cloud,这两大框架应该是大家最熟悉的微服务解决方案,也是面试中的热点。今天我们梳理下 Dubbo 和 Spring Cloud 的应用特性,以及两个组件的功能对比。

Dubbo 应用

Dubbo 是阿里开源的一个分布式服务框架,目的是支持高性能的远程服务调用,并且进行相关的服务治理。在 RPC 远程服务这一课时我们也介绍过 Dubbo,从功能上,Dubbo 可以对标 gRPC、Thrift 等典型的 RPC 框架。

总体架构

下面这张图包含了 Dubbo 核心组件和调用流程:

包括了下面几个角色:

  • Provider,也就是服务提供者,通过 Container 容器来承载;
  • Consumer,调用远程服务的服务消费方;
  • Registry,服务注册中心和发现中心;
  • Monitor,Dubbo 服务调用的控制台,用来统计和管理服务的调用信息;
  • Container,服务运行的容器,比如 Tomcat 等。

应用特性

Dubbo 是一个可扩展性很强的组件,主要的特性如下。

(1)基于 SPI 的扩展

SPI(Service Provider Interface)是 JDK 内置的一种服务提供发现机制,JDK 原生的 SPI 加载方式不灵活,要获取一个类的扩展必须加载所有实现类,得到指定的实现类需要遍历。

Dubbo 中增强了原生的 SPI 实现,可以通过指定的扩展类名称来找到具体的实现,这样可以更好地进行功能点扩展。

(2)灵活的服务调用

Dubbo 作为一个优秀的 RPC 解决方案,支持多种服务调用方式,针对服务端和消费端的线程池、集群调用模式、异步和同步调用等都可以进行灵活的配置。

(3)责任链和插件模式

Dubbo 的设计和实现采用了责任链模式,使用者可以在服务调用的责任链上,对各个环节进行自定义实现,也可通过这种方式,解决 Dubbo 自带策略有限的问题。基于 SPI 和责任链模式,Dubbo 实现了一个类似微内核加插件的设计,整体的可扩展性和灵活性都比较高。

(4)高级特性支持

Dubbo 对远程服务调用提供了非常细粒度的功能支持,比如服务发布支持 XML、注解等多种方式,调用可以选择泛化调用、Mock 调用等。

Spring Cloud 应用

Spring Cloud 基于 Spring Boot,是一系列组件的集成,为微服务开发提供一个比较全面的解决方案,包括了服务发现功能、配置管理功能、API 网关、限流熔断组件、调用跟踪等一系列的对应实现。

总体架构

Spring Cloud 的微服务组件都有多种选择,典型的架构图如下图所示:

整体服务调用流程如下:

  • 外部请求通过 API 网关,在网关层进行相关处理;
  • Eureka 进行服务发现,包含健康检查等;
  • Ribbon 进行均衡负载,分发到后端的具体实例;
  • Hystrix 负责处理服务超时熔断;
  • Zipkin 进行链路跟踪。

应用特性

Spring Cloud 目前主要的解决方案包括 Spring Cloud Netflix 系列,以及 Spring Cloud Config、Spring Cloud Consul 等。

Spring Cloud 典型的应用如下:

  • 配置中心,一般使用 Spring Cloud Config 实现,服务发现也可以管理部分配置;
  • 服务发现,使用 Eureka 实现,也可以扩展 Consul 等;
  • API 网关,使用 Zuul 实现,另外还有 Kong 等应用;
  • 负载均衡,使用 Ribbon 实现,也可以选择 Feign;
  • 限流降级,使用 Hystrix 实现熔断机制,也可以选择 Sentinel。

Dubbo 和 Spring Cloud 对比

可以看到,在介绍 Dubbo 时,主要是从 RPC 服务调用的特性入手,而在介绍 Spring Cloud 时,更多的是强调其在微服务方面提供的整体解决方案。

Dubbo 更多关注远程服务调用功能特性,Spring Cloud 则包含了整体的解决方案,可以认为 Dubbo 支持的功能是 Spring Cloud 的子集。

功能对比

生产环境使用 Dubbo 组件实现服务调用,需要强依赖 ZooKeeper 注册中心;如果要实现服务治理的周边功能,比如配置中心、服务跟踪等,则需要集成其他组件的支持。

  • 注册中心:需要依赖 ZooKeeper,其他注册中心应用较少。
  • 分布式配置:可以使用 diamond,淘宝的开源组件来实现。
  • 分布式调用跟踪:应用扩展 Filter 用 Zippin 来做服务跟踪。
  • 限流降级:可以使用开源的 Sentinel 组件,或者自定义 Filter 实现。

对于 Spring Cloud,提供的功能更加多样,服务治理只是其中的一个方面,面向的是微服务整体的解决方案。

调用方式

Dubbo 使用 RPC 协议进行通讯,支持多种序列化方式,包括 Dubbo 协议、Hessian、Kryo 等,如果针对特定的业务场景,用户还可以扩展自定义协议实现。

Spring Cloud 一般使用 HTTP 协议的 RESTful API 调用,RESTful 接口相比 RPC 更为灵活,服务提供方和调用方可以更好地解耦,不需要依赖额外的 jar 包等,更适合微服务的场景。从性能角度考虑,一般来说,会认为 PRC 方式的性能更高,但是如果对请求时延不是特别敏感的业务,是可以忽略这一点的。

服务发现

Dubbo 的服务发现通过注册中心实现,支持多种注册中心,另外本地测试支持 Multicast、Simple 等简单的服务发现方式。Spring Cloud 有各种服务发现组件,包括 Eureka、Consul、Nacos 等。前面提到过,ZooKeeper 实现的是 CAP 中的 CP 一致性,Spring Cloud 中的 Eureka 实现的是 AP 一致性,AP 更适合服务发现的场景。

开发成本

应用 Dubbo 需要一定的开发成本,自定义功能需要实现各种 Filter 来做定制,使用 Spring Cloud 就很少有这个问题,因为各种功能都有了对应的开源实现,应用起来更加简单。特别是,如果项目中已经应用了 Spring 框架、Spring Boot 等技术,可以更方便地集成 Spring Cloud,减少已有项目的迁移成本。

经过上面的对比可以看出,Dubbo 和 Spring Cloud 的目标不同,关注的是微服务实现的不同维度,Dubbo 看重远程服务调用,Spring Cloud 则是作为一个微服务生态,覆盖了从服务调用,到服务治理的各个场景。

总结

今天我们对比了微服务的两大技术栈,分别介绍了 Dubbo 和 Spring Cloud 的架构,以及应用特性。

Spring Cloud 从发展到现在,社区一直保持高度活跃,各类解决方案越来越丰富,另外,Dubbo 在近几年又重启维护,发布了新的版本,并且也官宣了新的升级计划,相信在两大开源框架的加持下,会更好地提高大家的开发效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1069864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

win10 U盘安装教程

一年内,第三次重装电脑了,我必须要写一份教程了。从制作U盘开始,到重装系统,全部都记录一下,以备不时之需。 首先,找一个U盘,如果U盘内有需要文件,请自行备份,因为这个U盘…

“双节”出游,VR智慧景区让你的旅游更具“心价比”

中秋国庆八天长假落幕,全国旅游消费市场人气旺、活力足,黄金周旅游消费的变化凝结成为新的文旅趋势,更多的游客会选择人少、景美、价优的错峰游,为了享受品质游玩,VR全景展示为众多游客带来旅游新体验,让你…

分类预测 | MATLAB实现KOA-CNN-BiLSTM开普勒算法优化卷积双向长短期记忆神经网络数据分类预测

分类预测 | MATLAB实现KOA-CNN-BiLSTM开普勒算法优化卷积双向长短期记忆神经网络数据分类预测 目录 分类预测 | MATLAB实现KOA-CNN-BiLSTM开普勒算法优化卷积双向长短期记忆神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现KOA-CNN-BiLST…

洗地机怎么选?2023年洗地机推荐

洗地机结合洗地、拖地、扫地的功能,在日常生活中备受关注,他能帮助我们更加节省时间和节省体力,但是面对参差不齐的洗地机市场如何选到适合自己的呢,下文整理了几款非常值得入手的性价比型号,供大家选择参考。 一、CE…

SpringBoot项目创建

创建SpringBoot项目: 选择maven项目,选择Java版本 选择springboot版本(这里随便选择,后面会进行更改,用不到这么高的版本),选择所需要的对应工具。 然后下一步即可。 配置修改 ,结构…

7346-2015 控制电机基本外形结构型式

声明 本文是学习GB-T 7346-2015 控制电机基本外形结构型式.pdf而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了控制电机的机座号、外形及安装尺寸、轴伸型式、出线方式、标记及铭牌。 本标准适用于各类控制电机(以下简称电机),其…

漏洞复现--中远麒麟堡垒机SQL注入

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

性能监控-微服务链路追踪skywalking搭建

中文文档:hong设置 (skyapm.github.cio) 参考:微服务链路追踪SkyWalking的介绍和部署_skywalking部署_技术闲聊DD的博客-CSDN博客 参考:链路追踪SkyWalking整合项目以及数据持久化_skywalking 持久化_技术闲聊DD的博客-CSDN博客 Liunx部署skywalking以…

python每日一练(2)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

【debian 12】:debian系统切换中文界面

目录 目录 项目场景 基础参数 原因分析 解决方案 1.ctrlaltT 打开终端 2.查询当前语言环境(我的已经设置成了中文 zh_CN.UTF-8) 3.打开语言配置界面 4.最后一步:重启 不要放弃任何一个机会! 项目场景: 这两…

项目进展(十)-解决ADS1285在调试时出现的问题

一、解决大坑 在项目进展(九)-完善ADS1285代码这边博客中,看似解决了问题,可以去读数据,但是其实是给自己挖大坑,这边博客就是来填坑的。   首先呢,上篇博客说的是用0x12指令来读取数据&#…

Nebula图数据库

文章目录 摘要引言Nebula图数据库概述Nebula图数据库架构Nebula命令和语法详解连接到Nebula图数据库创建图空间使用图空间创建图插入节点数据插入边数据查询节点数据查询边数据 高级用法索引图计算数据导入和导出事务管理数据备份和恢复安全性管理 Nebula使用实例结论参考文献 …

SwiftUI Spacer() onTapGesture 无法触发

问题:点击这个黑色区域不会 print,黑色区域看上去刚好是 Spacer() 占据的区域 解决办法:不使用 onTapGesture,用 Button 包裹一下 Code: import SwiftUIstruct TestTap: View {var body: some View {NavigationStack {List {Sect…

【框架风格】解释器模式

1、描述 解释器框架风格(Interpreter Framework Style)是一种软件架构风格,其核心思想是构建一个解释器(Interpreter)来解释并执行特定领域或问题领域的语言或规则。以下是解释器框架风格的一些特点: 1. 领…

parameterType后面报红

第一种 :parameterType后面报红,点击file——settings 第二种:写全类名

三十、【进阶】B树的演变过程

1、索引结构 (1)二叉树 (2)B-Tree树 B-Tree树最大度数为5,代表每一个节点最多存储4个key(每个节点最多存储4个数据),5个指针(可以指向5个子节点)。 2、演变过程(最大度数为5) &…

C++ 33.学习C++的意义-狄泰软件学院

一些历史 UNIX操作系统诞生之初是直接用汇编语言编写的随着UNIX系统的发展,汇编语言的开发效率成为瓶颈,所以需要一个新的语言替代汇编语言1971年通过对B语言改良,使其能直接产生机器代码,C语言诞生UNIX使用C语言重写&#xff0c…

音频格式怎么转换成mp3?

音频格式怎么转换成mp3?那是因为很多时候我们在使用手机录音或下载平台音频时,可能会遇到无法打开或播放的情况。这通常是因为我们所使用的音频格式不被通用的播放器所支持,导致了无法打开的问题。为了解决这个问题,我们需要将音频…

“新”国货@2023:质疑、回归与转机

【潮汐商业评论/ 原创】 “我是真爱买国货,上到冰箱电视洗衣机,这样的家电大件儿,下到日化洗护用品,这样的日常小件儿,统统首选国货品牌,也只考虑国货品牌。”此时此刻,Grace正与大家分享着自己…

软件设计师_数据结构与算法基础_学习笔记

文章目录 6.1 数组与矩阵6.1.1 数组6.1.2 稀疏矩阵 6.2 线性表6.2.1 数据结构的定义6.2.2 顺序表与链表6.2.2.1 定义6.2.2.2 链表的操作 6.2.3 顺序存储和链式存储的对比6.2.4 队列、循环队列、栈6.2.4.2 循环队列队空与队满条件6.2.4.3 出入后不可能出现的序列练习 6.2.5 串6.…