面试Dubbo ,却问我和Springcloud有什么区别?

news2024/11/17 13:58:29

Dubbo 、Springcloud? 这两有关系?

  • 前言
  • 一、RPC 框架的概念
    • 1. 什么是RPC框架
    • 2. RPC 和 普通通信 的区别
  • 二、常用 RPC 框架
    • 1. Dubbo
    • 2. gRPC
    • 3. Thrift
    • 4. Feign
  • 三、dubbo 与 Springcloud
    • 1. Dubbo 的模型
    • 2. Springcloud
    • 3. dubbo 与 Springcloud 的区别


前言

提到Dubbo,很多人都并不陌生,也是这些年来的热点面试内容。笔者也有很深的印象,在n年前的一场面试中,面试官问了一个问题:请至少说出Dubbo的六个包名,笔者当时虽然看过部分源码,但从未关注过包名,内心五味杂陈,当场就懵了。当然了,除开这种角度奇怪的提问,Dubbo也有一些看起来比较"正常"的面试题,比如著名的:

  • Dubbo 和 Springcloud 有什么区别?

时至今日,这个问题已经成了面试八股之一,我们就从这开始,讲述一下Dubbo 这个框架吧,喜欢的别忘记关注 + 收藏


一、RPC 框架的概念

1. 什么是RPC框架

我们在 《真的好用吗?鲜有人提的 RabbitMQ-RPC模式》 一文中,其实提到过RPC 的概念,今天我们正式介绍下所谓的RPC框架:

RPC(Remote Procedure Call - 远程调用) 是一种客户端和服务器端之间远程通信的模式,通过这种模式可以使得不同的进程、甚至不同的机器之间可以像调用本地函数一样调用远程函数。RPC框架就是一套实现RPC协议的软件框架,用于简化远程调用的过程,让开发者可以更方便地进行远程调用操作。

RPC框架通常包含以下组件:

  • 远程调用接口定义:定义远程调用的函数、参数和返回值,通常使用IDL(接口定义语言)进行定义。
  • 远程调用代理:用于将本地调用转化为远程调用,同时负责处理对远程调用的参数的序列化和反序列化。
  • 传输协议:用于在客户端和服务器之间传输远程调用的请求和响应,通常使用TCP或HTTP协议。
  • 服务注册与发现:用于将服务注册到注册中心,并让客户端发现可用的服务。
  • 负载均衡:用于管理多个服务提供者,并将请求均衡地分配给它们,以提高系统的稳定性和可用性

2. RPC 和 普通通信 的区别

为什么我们会有RPC 这种说法,”前台访问后台“ 这种模式算不算 RPC?

确实,一般前台调用后台也是将请求和参数,通过HTTP请求协议传输到后台,后台进行处理后返回结果。

从流程看二者较为相像,但是RPC其实是一种思想,集中在后台服务之间的调用,主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。从这个角度看,就不是所有的调用都能叫做RPC调用了。

而且两者一般有以下区别:

  1. 技术实现方式不同
    RPC是一种远程调用的方式,通常使用二进制协议(如Protocol Buffers、Thrift等)或者文本协议(如JSON、XML等)进行数据传输。而前台访问后台通常使用HTTP协议进行数据传输。

  2. 调用方式不同
    RPC的调用方式类似于本地方法调用,客户端通过编程语言提供的API直接调用服务端的方法。而前台访问后台通常是通过发送HTTP请求来访问服务器的接口,接口返回的数据可以通过AJAX等方式进行处理。

  3. 服务定位方式不同
    RPC通常使用服务地址(IP地址+端口号)来定位服务,客户端需要知道服务地址才能调用服务。而前台访问后台通常使用URL地址来定位服务,客户端可以通过URL地址来访问服务器的接口。

  4. 数据传输方式不同
    RPC通常使用高效的二进制协议或者文本协议进行数据传输,可以减少数据传输时间和网络带宽,适合在高并发或者低带宽的环境下使用。而前台访问后台通常使用HTTP协议进行数据传输,数据传输效率较低,不适合在高并发或者低带宽的环境下使用。

需要注意的是,还是那句话,RPC是手段,更是思想,并不规定其具体的实现方式,上述也只是通常情况下RPC的特征。

在这里插入图片描述

二、常用 RPC 框架

1. Dubbo

阿里巴巴开源的高性能、轻量级的RPC框架,支持多种协议和序列化方式,并提供了丰富的服务治理能力。
特点:轻量级、高性能、多协议、多语言、丰富的治理能力

2. gRPC

Google开源的高性能、跨语言的RPC框架,采用Protocol Buffers作为数据传输格式,支持多种语言和多种平台。
特点:跨语言、高性能、基于Protocol Buffers数据格式、支持多种平台、支持流式数据传输

3. Thrift

Facebook开源的高性能、跨语言的RPC框架,支持多种协议和多种语言,在分布式系统、大规模数据处理等领域得到广泛应用。
特点:跨语言、高性能、多协议、多语言、支持异步调用、支持服务发现和负载均衡

4. Feign

Netflix的轻量级HTTP请求框架,用于简化服务之间的调用。使用注解方式定义服务接口,自动集成了Ribbon负载均衡和Hystrix熔断器。通过声明式的方式,简化了服务调用的代码编写。
特点:高性能、基于接口定义、多种编码方式、集成负载均衡、支持断路器


三、dubbo 与 Springcloud

1. Dubbo 的模型

我们再来看一张图,这是经典的RPC原理图,这张图解释了RPC的调用流程,所以按理说,如果不考虑协议层的内容,这是很容易实现的,那为什么还会有像Dubbo这样专门的RPC框架呢
在这里插入图片描述
其实,简单的RPC是容易实现的,但也仅有最基础的功能,我们在远程调用时往往还会遇到很多问题,比如

  • 调用者先部署,怎么能拿到被调用方的IP并配置呢
  • 调用的序列化协议、传输协议怎么确定
  • 被调用方是集群,该怎么处理调用的逻辑
  • 被调用方宕机,怎么自动切换另一台
  • 同步或非同步的调用都需要自己实现

而 Dubbo 则支持多协议多语言。同时选择引入了注册中心,使得调用方和被调用方能互相得到对方整体的情况
在这里插入图片描述

而且其内部设定了容错机制,负载均衡机制,使得调用可靠性大大增强,开发者省心很多,下图就是其内部实现的模型,这张图以后在Dubbo专栏还会多次出现,所以暂时看不明白也不用担心

在这里插入图片描述

我们再来看下那个让我记了N年的问题:Dubbo的六个包名,其实当时就可以回答RPC层级下的几个级别就可以了

在这里插入图片描述
本次我们不展开讲,你只需要知道dubbo是一款帮助你实现RPC功能的省心框架即可。

2. Springcloud

如果你之前接触过SpringCloud,应该能明白它与Spring家族其他产品的显著不同,打个比方,如果说 Spring或 SpringBoot 是住房设计图,那SpringCloud就是一套城市指导方案,包含住房及道路设计、人员管理、安全控制等等。其官方介绍如下

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). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.
Spring Cloud 为开发人员提供了在分布式系统中快速构建一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。分布式系统的协调导致了样板模式,使用 Spring Cloud 开发人员可以快速建立实现这些模式的服务和应用程序。它们可以在任何分布式环> > 境中很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心和托管平台,如Cloud Foundry。

Spring Cloud 主要包含这些特性:

  • 分布式/版本化配置
  • 服务注册和发现
  • 路由
  • 服务到服务呼叫
  • 负载平衡
  • 断路器
  • 全局锁
  • 领导层选举和集群状态
  • 分布式消息传递
    在这里插入图片描述

如果你想了解更多,可以直接点击Spring-Cloud官网

3. dubbo 与 Springcloud 的区别

让我们回到开篇提到那个常见的面试题:

  • Dubbo 和 Springcloud 有什么区别?

在论坛看过很多人提出这个问题,评论区一般则是对这个问题嗤之以鼻,这是为什么呢? 因为本质上 dubbo 与 Springcloud 并不在一个赛道上,就好像问 地球 和 M78星云 有什么区别一样。

Spring Cloud是一个开源的分布式系统开发框架,它提供了一系列的工具和组件,用于构建和管理分布式应用程序。然而,Spring Cloud本身并不是一个用于实现RPC(远程过程调用)的框架。

当然,两者并不是毫无联系,Spring Cloud 推荐将 Netflix Feign 作为RPC框架配合使用,这倒是一个RPC框架,可以拿来与 Dubbo 作对比。当然,Spring Cloud也可以配合Dubbo一起使用,使得服务之间的调用更加方便和高效。

那么,如果真有人问出了这种问题,笔者还是建议不必嗤笑,不要触面试官的霉头,还是该认真地回答:

答:两者关注的点不一样,Dubbo 是专业的RPC框架,关注高性能的RPC调用;Spring Cloud则是致力于提供大规模微服务架构方案,并非一个单一的组件。硬要对比的话,SpringCloud框架囊括的功能更多,其中包括了RPC功能,而除了RPC,SpringCloud还涉及网关、分布式配置、消息总线等模块,这些则是Dubbo所不具备的。
而关于RPC功能实现,官方推荐的是使用Feign组件,当然,Spring Cloud也可以使用dubbo来完成RPC功能,现在SpringCloud下有Spring Cloud Alibaba方案,适用于一站式的分布式开发,其中就使用的dubbo来作为RPC框架

在这里插入图片描述

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

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

相关文章

若隐若现的芯片

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>若隐若现的芯片</title><script src"https://unpkg.co/gsap3/dist/gsap.min.js">…

HBase(5):导入测试数据集

1 需求 将ORDER_INFO.txt 中的HBase数据集&#xff0c;我们需要将这些指令放到HBase中执行&#xff0c;将数据导入到HBase中。 可以看到这些都是一堆的put语句。那么如何才能将这些语句全部执行呢&#xff1f; 2 执行command文件 2.1 上传command文件 将该数据集文件上传到指…

单点登录原理

单点登录原理 一、什么是单点登录 单点登录英文全称Single Sign On&#xff0c;简称SSO。指在多系统应用群中登录一个系统&#xff0c;便可在其他所有系统中得到授权而无需再次登录&#xff0c;包括单点登录与单点注销两部分。 二、为什么需要单点登录 在一些子系统用户信息…

初识Go语言25-数据结构与算法【堆、Trie树、用go中的list与map实现LRU算法、用go语言中的map和堆实现超时缓存】

文章目录 堆Trie树练习-用go中的list与map实现LRU算法练习-用go语言中的map和堆实现超时缓存 堆 堆是一棵二叉树。大根堆即任意节点的值都大于等于其子节点。反之为小根堆。   用数组来表示堆&#xff0c;下标为 i 的结点的父结点下标为(i-1)/2&#xff0c;其左右子结点分别为…

Python图像锐化及边缘检测(Roberts、Prewitt、Sobel、Lapllacian、Canny、LOG)

目录 图像锐化概述 算法方法介绍 代码实现 效果展示 图像锐化概述 图像锐化(image sharpening)是补偿图像的轮廓&#xff0c;增强图像的边缘及灰度跳变的部分&#xff0c;使图像变得清晰&#xff0c;分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮…

Docker|kubernetes|本地镜像批量推送到Harbor私有仓库的脚本

前言&#xff1a; 可能有测试环境&#xff0c;而测试环境下有N多的镜像&#xff0c;需要批量导入到自己搭建的Harbor私有仓库内&#xff0c;一般涉及到批量的操作&#xff0c;自然还是使用脚本比较方便。 本文将介绍如何把某个服务器的本地镜像 推送到带有安全证书的私有Harb…

【P61】JMeter JDBC Connection Configuration

文章目录 一、JDBC Connection Configuration 参数说明二、准备工作 一、JDBC Connection Configuration 参数说明 可以给数据源配置不同的连接池&#xff0c;供后续 JDBC 采样器使用&#xff1b;使用前请将对应的数据库驱动复制到 $JMETER_HOME/lib/ 或者 $JMETER_HOME/lible…

使用注解开发

使用注解开发 为了方便查看测试结果以及方便调试&#xff0c;先熟悉和配置日志。 日志 日志工厂 如果一个数据库操作出现了异常、需要进行排错&#xff0c;可以通过查看日志的方式实现。 Mybatis内置的日志工厂能够提供日志功能&#xff0c;具体的日志实现有以下几种&#xff…

基于Java+Vue前后端分离“魅力”繁峙宣传网站设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

国产MCU-CW32F030开发学习-ST7735 LCD模块

国产MCU-CW32F030开发学习-ST7735 LCD模块 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件0.96 IIC oled模块 ST7735 LCD模块 硬件接口使用的 2.54mm 间距的排针接口&#xff0c;这使用杜邦线进行连接. ST7735参数供电电压3.3~5.5V驱动ICST7735分辨率128x1…

基于antdv封装的特殊复杂表格,带通行描述信息、可展示通行的单元格信息、可跨页选择数据功能、分页功能、可编辑单元格功能

基于antdv封装的特殊复杂表格&#xff0c;带通行描述信息 主要功能&#xff1a; 可展示通行的单元格信息可跨页选择数据功能表单插槽、合计插槽、操作按钮区插槽分页功能接口内请求api可编辑单元格表格组件暴漏出的方法&#xff1a;查询、获取选中数据、接口返回数据、当前表…

消防应急照明和疏散指示系统手动控制的设计与应用

摘要&#xff1a;针对非集中控制型消防应急照明和疏散指示系统在火灾确认后如何手动控制系统的应急启动存在的实际问题&#xff1a;在哪里手动控制&#xff1f;由谁来手动控制&#xff1f;什么时候能够手动控制&#xff1f;提出 3 种手动控制应急启动系统的方案&#xff1a;① …

Fluttter的ClipRRect控件

ClipRRect简介 ClipRRect&#xff08;Rounded Rectangle Clip&#xff09;是Flutter中的一个控件&#xff0c;用于将其子控件剪裁为圆角矩形形状。 使用场景 ClipRRect通常在需要给子控件添加圆角效果时使用。它可以用于创建圆角图片、圆角容器等各种UI元素。 主要属性 bo…

uniapp 开发小程序之实现不同身份展示不同的 tabbar(底部导航栏),附带相关问题解答

效果展示&#xff1a; 引言 在开发过程中逐渐意识到uniapp原生的tabbar可能不能满足开发要求&#xff0c;通过浏览博客才选择使用uView的Tabbar 底部导航栏来实现&#xff0c;我选择用的是2X版本 安装 我是使用Hbuilder插件的方式引入的组件库&#xff0c;安装配置可以看这篇…

CVE-2023-34541 LangChain 任意命令执行

漏洞简介 LangChain是一个用于开发由语言模型驱动的应用程序的框架。 在LangChain受影响版本中&#xff0c;由于load_prompt函数加载提示文件时未对加载内容进行安全过滤&#xff0c;攻击者可通过构造包含恶意命令的提示文件&#xff0c;诱导用户加载该文件&#xff0c;即可造成…

单片机学习 14-DS18B20温度传感器实验

DS18B20 温度传感器实验 ​ 本次实验我们来学习精度较高的外部 DS18B20 数字温度传感器&#xff0c;由于此传感器是单总线接口&#xff0c;所以需要使用 51 单片机的一个 IO 口模拟单总线时序与 DS18B20 通信&#xff0c;将检测的环境温度读取出来。开发板上集成了 1 个 DS18B…

createdTime(new Date()) 数据库时间比实际多八小时

本来是createdTime&#xff08;new Date&#xff08;&#xff09;&#xff09;&#xff0c;一次生成两条数据 一直正常&#xff0c;今天却多八小时 一开始往new Date&#xff08;&#xff09;差八个小时的问题上找&#xff0c; 网上说要 在apprication.yml文件中配置一下数据…

大佬详细讲解:银行核心项目之测试阶段

最近有小伙伴留言说「想了解核心系统建设中&#xff0c;冒烟、SIT、UAT、回归测试的重点&#xff0c;如何设计测试案例&#xff0c;或相关的资料推荐等」。 这个话题很笼统&#xff0c;测试这一块儿除了业务测试&#xff0c;还有性能测试、安全测试等&#xff1b;以及不同的角…

解决pyecharts图表在jupyter notebook无法显示的问题

在jupyter notebook尝试制作pyecharts图表&#xff0c;遇到无法显示的问题&#xff0c;网上查到的结果有各种不同原因&#xff0c;此处一一罗列&#xff0c;便于大家排查并彻底解决问题。 情况1&#xff1a;图表完全无法显示 解决方案&#xff1a;参考此文档 注&#xff1a;…

web自动化测试——xpath和css语法详解(五)

目录 1.css选择器 1.1什么是css选择器&#xff1f; 1.2css选择器语法 2.xpath 1.什么是xpath&#xff1f; 2.什么是XML? 3.XML与HTML 4.节点的概念 5.XPath &#x1f381;更多干货 完整版文档下载方式&#xff1a; 1.css选择器 1.1什么是css选择器&#xff1…