当前位置: 首页 > news >正文

Dubbo与SpringCloud的区别和优缺点

经常会有同学问我,Dubbo和SpringCloud的选择。甚至也经常会有面试官就这个问题刨根问底。 说实话,其实我不太喜欢回答这个问题,本质上来讲,Dubbo的SpringCloud可以算是完全不同赛道的两种东西,就好像问大家西瓜和土豆我应该怎么选一样,不过为了让大家在面试时可以更好的回答这个问题,在此我们就分析一下Dubbo和SpringCloud的区别

定义上的区别

Apache Dubbo |ˈdʌbəʊ| 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。

Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems 。
翻译:springcloud为开发人员提供了快速构建分布式系统中一些常见模式的工具

以上内容均为官方定义,截图如下:


Dubbo官方定义
SpringCloud官方定义

从以上定义中我们不难看出,Apache Dubbo的目标是基于RPC调用为主,并扩展相应的功能。 而SpringCloud是致力于提供分布式服务的各种工具。可以这样讲,Apache Dubbo从概念上讲只相当于SpringCloud中的feign而已。

出发点不同

Apache Dubbo: 诞生于阿里巴巴的线上需求,主要是为了应对微服务场景下高并发的处理,所以Apache Dubbo的核心关注点就是解决微服务之间调用的性能。 并且将包括服务注册/发现、负载均衡等微服务的核心内容进行了集成。最后在核心调用流程稳定的情况下完成了包括本地存根、Mock、版本控制等诸多特性的集成。

SpringCloud: SpringCloud是Spring家族中在微服务领域的关键组成部分,延续了Spring一贯的风格:为大家提供好用的工具,可以屏蔽底层实现,一站式完成业务开发。包括后面的SpringCloud Netflix和SpringCloud Alibaba等都是基于此完成工具的开发。我们可以大概数一数SpringCloud的工具内容,Ribbon【负载均衡】、Feign【HTTP服务】、Hystrix【熔断降级】、Gateway【网关】等等,从其中我们不难发现,SpringCloud对于微服务的调用的性能并不太关心,它更关心的是处理微服务调用以外的内容,虽然他勉为其难的搞了一个Feign,但是我们都知道,HTTP的调用是非常耗时的,它与RPC的调用效率完全不可同日而语。

综上所述:Apache Dubbo的目标是为了高效调用服务。SpringCloud的目标是一条龙解决微服务的治理问题,那么出发点都不同,比较的意义又在哪里呢。

真实工作场景

事实上,目前我接触和了解的互联网大厂的项目里,单纯的使用SpringCloud的非常少。虽然不全是选用Apache Dubbo, 还有包括Thrift、Zero等微服务框架,但是Apache Dubbo的市场占有率会相对比较高,也是很多大厂项目的首选。
但是Apache Dubbo的服务治理其实并不太好用,比如熔断降级、限流等,同时Apache Dubbo还有一个比较麻烦的问题, 就是没有HTTP调用的逻辑,这一点对前后端分离的项目非常不友好。
基于以上内容,其实在实际项目中, Apache Dubbo和SpringCloud相结合才是目前比较主流的使用方式。服务之间的调用使用Apache Dubbo。熔断、网关、限流等使用SpringCloud。尤其是在拥有了SpringCloud Alibaba以后,SpringCloud与Apache Dubbo的结合更加紧密,这才是我个人建议的使用方式。



喜欢的朋友记得点赞、收藏、关注哦!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 1.熟悉接口测试(Postman工具)
  • 在Windows 7上安装Redis
  • 图说GPT网络结构(参数量与计算量估计)
  • Android Framework(六)WMS-窗口显示流程——窗口内容绘制与显示
  • 更换代理IP技术有哪些?
  • 如何在多台Linux虚拟机上安装和配置Kafka集群
  • 【FastAPI】服务器使用SSE实现客户端之间的广播和点对点功能
  • C#命令行参数解析库System.CommandLine介绍
  • vue3+ant design vue 中弹窗自定义按钮设置及以冒号为基准布局
  • 关于文件操作
  • CAD图1
  • 功能测试干了三年,快要废了。。。
  • 多维度测评!希亦、美的、大宇三大爆款超声波清洗机,谁才是实力王?
  • 『 Linux 』HTTP(一)
  • 【GO开发】MacOS上搭建GO的基础环境-Hello World
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • CSS 三角实现
  • JavaScript异步流程控制的前世今生
  • js对象的深浅拷贝
  • orm2 中文文档 3.1 模型属性
  • React中的“虫洞”——Context
  • Service Worker
  • Vue ES6 Jade Scss Webpack Gulp
  • webpack4 一点通
  • 分布式熔断降级平台aegis
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 排序算法学习笔记
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 设计模式走一遍---观察者模式
  • 用 Swift 编写面向协议的视图
  • 函数计算新功能-----支持C#函数
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 昨天1024程序员节,我故意写了个死循环~
  • #git 撤消对文件的更改
  • #ifdef 的技巧用法
  • #QT(一种朴素的计算器实现方法)
  • #数据结构 笔记三
  • $$$$GB2312-80区位编码表$$$$
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (Java数据结构)ArrayList
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (十六)一篇文章学会Java的常用API
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)Scala的“=”符号简介
  • (转)VC++中ondraw在什么时候调用的
  • ./和../以及/和~之间的区别
  • .Net 6.0 处理跨域的方式
  • .NET C# 操作Neo4j图数据库
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .net8.0与halcon编程环境构建