Dubbo与Spring Cloud的区别

2023-11-06

 

这是个老生常谈的问题,每个技术团队在业务转型微服务化架构的时候都会纠结过这个选型问题。

首先,dubbo 之前确实在 2012 年的时候发布了最后一个版本 2.5.3 并且停止维护更新,在2017年的时候又”起死回生“,官方宣布重启更新,并重点投入开源建设;终于在 2017 年 9 月,新发布了 2.5.4 版本,这中间"沉寂"的 5 年的时间究竟是出于什么原因,我们无需关注,幸运的是,Dubbo 于 2018 年 2 月通过投票进入 Apacha 基金会孵化器,并且宣布框架不再仅局限于 java 语言,这对于国内的很大一部分开发者而言算是一大福音;

所以想说的是,dubbo 框架并没有废弃,相反现在正处于积极活跃的开源孵化中,因此对于想使用 dubbo 的用户而言,大可不必担心,它确实是一个非常不错的分布式技术选型对象。

那接下来我们再聊聊 Dubbo 与 SpringCloud 的区别,希望能为后续同样纠结在这个问题上的同学提供一些参考意见。

从严格意义上来说,Dubbo和SpringCloud的定位是不一样的,dubbo 包括官方对自身的定义很清楚,从github的项目简介即可看出——Apache Dubbo is a high-performance, java based, open source RPC framework. 翻译过来就是,Dubbo 是一个高性能的、基于java的开源 RPC框架;划重点:高性能 和 RPC框架

而 Spring Cloud呢,官方对于它的定义可以直接参考官网:

Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state).

简单介绍就是 SpringCloud 提供了一系列通用工具来帮助开发者在分布式系统里快速构建一些常见模式,比如分布式配置管理、服务发现、熔断降级、智能路由、微代理、控制总线、一次性令牌、全局锁、分布式选主、分布式session等等一系列你可能目前还没想到,但是开发过程中也许会碰到的问题;看到这里大家应该已经会有一个比较初步的感觉,SpringCloud 的设计目标是提供一整套服务治理能力,它是一个完整的体系,涉及范围很广;

而 dubbo ,它只是一个分布式的 RPC 框架,如果一定要按照分布式系统架构里的功能来定义的话,只是解决了服务发现、服务路由、服务降级和负载均衡方面的能力,新版本里也提供了动态配置中心和服务治理相关的能力,但相比 Sprin Cloud 而言,还是差了相当一部分的能力;

从功能支持上来说,dubbo 的角色定位可能更像是另外一个大名鼎鼎的框架,那就是 gRPC,而且两者在使用的方式以及工作原理上都非常相似,都是基于序列化协议来解决分布式系统中的远程调用问题,在使用上可以通过约定接口或者通过 proto 文件生成代码文件来“提升用户的使用”

那么问题来了,功能越多一定越好吗?答案显然不是,取决于你究竟想要什么?

如果你在系统设计之初就已经考虑到了后续可能会涉及到各种服务治理能力,比如分布式配置、全局锁、分布式session等常见需求,那么使用 SpringCloud 将会减少你很多的工作,因为这些基本上都是"套件",相互配合使用会非常顺畅。如果你想要的只是解决分布式架构后的远程调用问题,那么 Dubbo 是一个不错的选择。

SpringCloud 和 Dubbo 的基本差异大概就是如上所述,很多同学可能还是觉得很迷茫,不知道该如何做选择,这里再补充几个比较关键的差异点,希望能帮助你更好的结合自身业务做出选择:

1、能力支持方面

上文也提到,SpringCloud 提供了一整套微服务治理的功能组件,很多组件基本上都是"开箱即用"的,并且相互之间能很好的兼容,举个例子,如果要在 Spring Cloud 里实现服务发现、负载均衡和熔断降级,你只需要引用SpringCloud 的依赖组件即可,直接通过注解便可使用,基本上零配置;而 dubbo 框架,除了上述提到的能力支持之外,如果想要使用熔断降级,那你可能需要额外引用 hystrix 或者 resilience4j 来实现;温馨提示,hystrix 官方目前也已经宣布不再更新,并且推荐使用 resilience4j 。

2、协议兼容方面

SpringCloud 里并没有限制服务之间的通信协议,但是主流的一些客户端比如 restTemple、feign 等都是直接支持使用 Ribbon 来做服务注册发现和智能路由的,其底层通信的协议都是HTTP;而dubbo框架缺省是基于NIO异步传输使用 TCP 长连接并采用 Hessian 二进制序列化方式通信的;

这会涉及后续系统在扩展上的兼容性问题,比如需要调用一个三方系统或者是被第三方系统调用,相比而言 HTTP 协议可能更加通用。

3、模型定义方面

dubbo 在模型设计上将一个接口定义为一个服务,而 SpringCloud 里则是将一个应用定义为一个服务,这两者在模型上是存在很大差异的,你也许会奇怪,这个对使用会有影响吗?从现有使用方面来说是没有什么影响的,但是你如果有关注 Service Mesh 最新微服务技术的话,目前对 Dubbo 协议这块可能支持暂时还不完善,其中很大一部分原因就是因为在服务模型上与 K8S 的服务模型有差异;

4、调用性能方面

如果分布式系统中比较关注远程调用的性能,那 Dubbo 可能是一个较好的选择,基于 NIO 和 TCP 长连接的通信传输方式,在性能上相比 HTTP 协议是有绝对优势的;当然基于 SpringCloud 你也可以使用 gRPC 协议来解决性能问题,那就是另外一个问题了。

利益相关:我网易轻舟就以 Spring Cloud 和 Service Mesh 作为微服务基础设施,适用于微服务改造、业务中台、数字化转型、工业互联网、开放平台等多种场景。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dubbo与Spring Cloud的区别 的相关文章

  • hive建表

    https blog csdn net wgyzzzz article details 107446435 一 hive建表语法 二 hive外部表 1 准备测试数据 放入虚拟机 data目录下 2 创建外部表 3 装载数据 4 查询tes
  • unity使用setTrigger需注意地方

    使用上可以参考另一篇文章 RPG游戏主角状态机 Trigger触发器 注意都是从Any State开始的 否则你在使用Aniamtor的Trigger参数触发时没反应
  • 网页开发基础常见html、css

    目录 HTML基础 一 段落 行内和换行标签 二 文本样式标签 三 表格标签 四 表单标签 五 多行文本标签 六 列表标签 七 超链接标签 八 图像标签 HTML基础 html语言基本格式 常用的HTML标签 一 段落 行内和换行标签 二
  • 我为什么不在乎人工智能

    有人听说我想创业 给我提出了一些 忽悠 的办法 他们说 既然你是程序语言专家 而现在人工智能 AI 又非常热 那你其实可以搞一个 自动编程系统 号称可以自动生成程序 取代程序员的工作 节省许许多多的人力支出 这样就可以趁着 AI 热 拉到投
  • 记录一下:使用 python -m SimpleHTTPServer 快速搭建http服务

    为什么80 的码农都做不了架构师 gt gt gt 在 Linux 服务器上或安装了 Python 的机器上 Python自带了一个WEB服务器 SimpleHTTPServer 我们可以很简单的使用 python m SimpleHTTP
  • WinForm显示3D图(Sharpgl)

    总述 Sharpgl是 NET平台的Opengl 可以用来绘画 展示3D图 本文将介绍如何显示SOlidWorks等软件制作的3D模型 安装Sharpgl 下载SharpGL vsix文件并点击安装 VS中就会有相应的项目出现了 之后创建工
  • C语言(Head First C)-7:数据结构与动态存储

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 7 数据结构与动态存储 一个结构根本不够 本章内容 1 如何用结构指针吧自定义数据类型连接成复杂的大型数据结构 通过创建链表探索其中的基本原理 2 通过在堆上动态分配
  • Jmeter元件正则表达式提取Response headers的数据

    本文以cookie提取为例来介绍用正则表达式如何提取Response headers的数据 实际cookie的获取只需要一个cookies管理器即可 jmeter会自动获取cookie 如果是用正则表达式提取Response headers
  • 基于深度学习的推荐系统(一)

    本文主要介绍推荐系统基本概念以及基本的协同过滤算法原理 推荐系统 快速有效地从复杂的数据中获取有价值的信息成为大数据大战的关键难题 推荐系统根据用户需求与兴趣 通过推荐算法从海量数据中挖掘出用户感兴趣的项目 如信息 服务 物品 将结果以个性
  • 前端基础知识6

    谈谈你对语义化标签的理解 语义化标签就是具有语义的标签 它可以清晰地向我们展示它的作用和用途 清晰的代码结构 在页面没有css的情况下 也能够呈现出清晰的代码内容 有利于SEO 爬虫依赖标签来确定关键字的权重 因此可以和搜索引擎建立良好的沟
  • SpringBoot 2.2.5 使用@ID 避坑指南

    1 如果你的数据库中没有主键 在你指定 ID的时候这个指必须是唯一的而且不能为null 如果不唯一 你数据库有6个数据 选为主键的字段 distinc一下有2个 那么就会3 3的重复 如果为null 则映射出来的bean中有null
  • FastDFS-02-JavaAPI

    我是码赛客1024 本节我们来使用java调用FastDFS进行文件上传等操作 一 介绍 在上一章节 咱们搭建好了fastdfs服务器 并实现了基于命令的上传测试和web访问 本节 咱们使用Java来调用API实现上传文件到FastDFS
  • linux命令&和&&,

    在linux中 和 和 介绍如下 表示任务在后台执行 如要在后台运行redis server 则有 redis server 表示前一条命令执行成功时 才执行后一条命令 如 echo 1 echo 2 表示管道 上一条命令的输出 作为下一条
  • 全网唯一最全彻底删除VS及VS注册表!

    当我们不再需要vs或者vs ide出现问题 并且你的专业课老师不教的情况下 怎么样独自且快速的情况下卸载干净 需要重装时 发现总是卸载不干净 卸载重装后该存在的问题还是存在 没有因重装而解决 那么如何彻底的卸载vs不留残留 设备 HPZHA
  • android集成flutter No implementation found for method getDatabasesPath on channel com.tekartik.sqflite

    项目场景 原有android项目集成flutter 环境 flutter sdk 1 17 4 android studio 3 6 3 android sdk 29 问题描述 运行报错 Unhandled Exception Missin
  • 模板和容器

    1 什么是模板 模板定义 模板就是实现代码重用机制的一种工具 它可以实现类型参数化 即把类型定义为参数 从而实现了真正的代码可重用性 我们知道 C 是一种 强类型 的语言 也就是说一个变量 编译器必须确切的知道它的类型 而模板就是构建在这个
  • 爬虫实战学习----基础

    今天在学习爬虫入门的过程中 遇到了百度的反爬 发送请求无法得到内容 出现 网络不给力 稍后重试 或者 百度安全验证 写一下当时的解决方案 最基础的导入 发送请求和打印数据如下 导入模块 import requests 发送get请求 res
  • tf好朋友之matplotlib的使用——连续图像部分plt.plot

    tf好朋友之matplotlib的使用 连续图像部分plt plot 连续图像常用函数及其作用 plt plot plt figure plot 应用示例 学了这么多机器学习 好像还不知道这么去展示我的学习成果 一想到matlab里面有这么
  • 树莓派上手第一课:系统烧录,树莓派的配置,获取ip,ssh,远程桌面...

    最近树莓派涨价挺高的 卖了我的3b 小赚了几百块钱 借了朋友的3b来写篇关于树莓派的入门博客吧 主要包括系统烧录 树莓派的配置 ssh 远程桌面 系统烧录 准备一个树莓派 8g及8g以上的tf卡 键盘 鼠标 HDMI输出的显示屏 去官网下载

随机推荐

  • 大数据、云计算、区块链、人工智能!你选择哪个?

    日前 在以 突破 为主题的t112018暨talkingdata数值智能峰会上 数千名相干行业从业者研讨以数值驱动冲破发展的新模式 新路径 目前计算机相干领域的就业情况还是比较不错的 随着大数据 物联网 区块链 人工智能等技术的快速进展 这
  • 基于单片机智能温室大棚控制系统

    功能介绍 以51单片机作为主控系统 DS18B20温度采集模块检测温度 光敏电阻和ADC0832组成的光照检测模块 土壤湿度检测模块检测土壤湿度 CO2检测模块检测CO2浓度 LCD1602显示模块显示测量值 若温度小于温度最小值 声光报警
  • Operator方式下的Prometheus监控二进制方式部署的kubernetes组件

    Operator方式下的Prometheus默认监控的是以静态pod形式部署的kubernetes组件 kubectl kube controller manager kube scheduler 如果需要监控以rpm包或者二进制包方式部署
  • 关于router-link和router-view

    router link和router view在同一个vue文件 A vue 里面 router link设置路由跳转 router view根据路由显示组件 在同一个页面中 A vue组件是全局的页面 B vue组件和C vue组件是A页
  • 最强的表格组件—AG Grid使用以及License Key Crack

    PS 想要官方 License Key翻到最后面 Ag Grid简介 Ag Grid 是一个高级数据网格 适用于JavaScript TypeScript应用程序 可以使用React Angular和Vue等流行框架进行集成 它是一种功能强
  • 系统地址和服务器地址不一致,服务器和ip地址不一致t3

    服务器和ip地址不一致t3 内容精选 换一换 输入AK SK后 已经确认AK SK内容准确 但仍然认证失败 界面报错关键信息如下 查看 root MindStudioMS 2 3 system log idea log 有如下日志报错 从日
  • 有符号数的四舍五入(round)(verilog实现)

    有符号数的表达方式见上篇 有符号小数的表示 扩展和计算 weixin 42330305的博客 CSDN博客 对于有符号数 正数和负数的四舍五入有些许不同 需要区别对待 一 正数 对于正数来说 如果被截掉的数的最高位为1 则结果为保留的数 1
  • 【分析方法】A/B test

    A B测试是什么 怎么做 有什么作用呢 本篇文章为大家分享了几种应用场景及案例 告诉大家如何在团队中有效推进A B测试 一 A B测试 为了检测某些用户到底属于哪一类别 我们定制了A类用户喜欢的产品和B类用户喜欢的产品 统计并对比了不同方案
  • 给jupyter添加多个python版本的kernel

    两种方法 1 想添加的python版本已存在 1 通过ipykernel为jupyter添加python环境 activate env name python m ipykernel install name env name 2 关闭py
  • Windows安装Anaconda,创建pytorch环境,pycharm配置环境

    目录 1 简介 2 安装Anaconda 3 创建一个独立的环境 4 安装依赖的库 5 安装pytorch 6 pycharm中使用conda环境 7 到这里安装就结束了 希望对您有所帮助 如有什么错误请指正 1 简介 安装Anaconda
  • C++:重载

    一 重载 重载 重载函数是函数的一种特殊情况 为方便使用 C 允许在同一范围中声明几个功能类似的同名函数 但是这些同名函数的形式参数 指参数的个数 类型或者顺序 必须不同 也就是说用同一个函数完成不同的功能 重载函数常用来实现功能类似而所处
  • git fatal: unable to access  Failed to connect to localhost port 1080: Connection refused

    git 拉取 更新子模块失败 提示失败 Submodule libXesBase https git xxxxx com xesoa libXesBase git registered for path libXesBase Cloning
  • 整合google,51ditu和mapbar的地图API

    http blog 163 com goodluck lq 126 blog static 63285386201001994058213
  • Java中的异常处理机制的简单原理和应用。

    异常是指java程序运行时 非编译 所发生的非正常情况或错误 与现实生活中的事件很相似 现实生活中的事件可以包含事件发生的时间 地点 人物 情节等信息 可以用一个对象来表示 Java使用面向对象的方式来处理异常 它把程序中发生的每个异常也都
  • 基于STM32F103单片机的车牌识别图像处理识别系统 原理图PCB程序设计

    硬件电路的设计 末尾附文件 系统硬件系统分析设计 1 STM32单片机核心电路设计 STM32系列处理器是意法半导体ST公司生产的一种基于ARM 7架构的32位 支持实时仿真和跟踪的微控制器 选择此款控制芯片是因为本系统设计并非追求成本的最
  • React通过axios拿到数据后,使用hooks,通过map函数对列表进行渲染

    导入hooks 导入你封装的http模块 引入样式 import React useEffect useState from react import http from API import index scss 默认导出一个函数组价 并
  • C#学习记录——.NET的三层架构

    每一个不曾起舞的日子 都是对生命的辜负 尼采 每一个不读书的的日子 都是对时光的辜负 今天学习 零基础学C 3 0 NET的三层架构 为了实现大型应用系统后续功能的扩展性和程序的灵活性 NET编程语言借鉴了JAVA的MVC思想 产生了三层架
  • MySQL - 第9节 - MySQL内外连接

    目录 1 内连接 2 外连接 2 1 左外连接 2 2 右外连接 3 简单案例 1 内连接 表的连接分为内连接和外连接 内连接实际上就是利用where 子句对两种表形成的笛卡儿积进行筛选 我们前面学习的查询都是内连接 也是在开发过程中使用的
  • Markdown语法--Obsidian笔记

    Markdown 语法 笔记 文章目录 Markdown 语法 笔记 语法分类 文字层级类 1 标题 2 段落 3 区块引用 4 代码区块 5 列表 6 待办事项 文字格式类 1 样式 2 表格 链接引用类 1 链接 2 图片 3 脚注 4
  • Dubbo与Spring Cloud的区别

    这是个老生常谈的问题 每个技术团队在业务转型微服务化架构的时候都会纠结过这个选型问题 首先 dubbo 之前确实在 2012 年的时候发布了最后一个版本 2 5 3 并且停止维护更新 在2017年的时候又 起死回生 官方宣布重启更新 并重点