Java——《面试题——Dobbo篇》

news2025/1/17 18:05:55

前文

java——《面试题——基础篇》

Java——《面试题——JVM篇》

Java——《面试题——多线程&并发篇》

Java——《面试题——Spring篇》

Java——《面试题——SpringBoot篇》

Java——《面试题——MySQL篇》​​​​​​

Java——《面试题——SpringCloud》 

 

目录

前文

1、 说说一次 Dubbo 服务请求流程?

2、说说 Dubbo 工作原理

3、Dubbo 支持哪些协议?

4、注册中心挂了,consumer 还能不能调用 provider?

5、怎么实现动态感知服务下线的呢?

6、Dubbo 负载均衡策略?

7、 Dubbo 容错策略

8、Dubbo 动态代理策略有哪些?

9、说说 Dubbo 与 Spring Cloud 的区别?

10、Zookeeper 和 Dubbo 的关系?


其实关于 Dubbo 的面试题,我觉得最好的文档应该还是官网Apache Dubbo,因为官网有中文版,照顾了很多阅 读英文文档吃力的小伙伴。但是官网内容挺多的,于是这里就结合官网和平时面试被问的相对较多 的题目整理了一下。

1、 说说一次 Dubbo 服务请求流程?

基本工作流程:

 上图中角色说明:

2、说说 Dubbo 工作原理

工作原理分 10 层:

第一层:service 层,接口层,给服务提供者和消费者来实现的(留给开发人员来实现);

第二层:config 层,配置层,主要是对 Dubbo 进行各种配置的,Dubbo 相关配置;

第三层:proxy 层,服务代理层,透明生成客户端的 stub 和服务单的 skeleton,调用的是接 口,实现类没有,所以得生成代理,代理之间再进行网络通讯、负责均衡等;

第四层:registry 层,服务注册层,负责服务的注册与发现;

第五层:cluster 层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一 个服务;

第六层:monitor 层,监控层,对 rpc 接口的调用次数和调用时间进行监控;

第七层:protocol 层,远程调用层,封装 rpc 调用;

第八层:exchange 层,信息交换层,封装请求响应模式,同步转异步;

第九层:transport 层,网络传输层,抽象 mina 和 netty 为统一接口;

第十层:serialize 层,数据序列化层。

这是个很坑爹的面试题,但是很多面试官又喜欢问,你真的要背么?你能背那还是不错的,我建议 不要背,你就想想 Dubbo 服务调用过程中应该会涉及到哪些技术,把这些技术串起来就 OK 了。

面试扩散

如果让你设计一个 RPC 框架,你会怎么做?其实你就把上面这个工作原理中涉及的到技术点总结一 下就行了。

3、Dubbo 支持哪些协议?

 还有三种,混个眼熟就行:Memcached 协议、Redis 协议、Rest 协议。

上图基本上把序列化的方式也罗列出来了。

4、注册中心挂了,consumer 还能不能调用 provider?

可以。因为刚开始初始化的时候,consumer 会将需要的所有提供者的地址等信息拉取到本地缓 存,所以注册中心挂了可以继续通信。但是 provider 挂了,那就没法调用了。

 关键字:consumer 本地缓存服务列表。

5、怎么实现动态感知服务下线的呢?

 服务订阅通常有 pull 和 push 两种方式:

pull 模式需要客户端定时向注册中心拉取配置;

push 模式采用注册中心主动推送数据给客户端。

Dubbo ZooKeeper 注册中心采用是事件通知与客户端拉取方式。服务第一次订阅的时候将会拉取 对应目录下全量数据,然后在订阅的节点注册一个 watcher。一旦目录节点下发生任何数据变化, ZooKeeper 将会通过 watcher 通知客户端。客户端接到通知,将会重新拉取该目录下全量数据, 并重新注册 watcher。利用这个模式,Dubbo 服务就可以做到服务的动态发现。

注意:ZooKeeper 提供了“心跳检测”功能,它会定时向各个服务提供者发送一个请求(实际上建立 的是一个 socket 长连接),如果长期没有响应,服务中心就认为该服务提供者已经“挂了”,并将其 剔除。

6、Dubbo 负载均衡策略?

随机(默认):随机来

轮训:一个一个来

活跃度:机器活跃度来负载

一致性 hash:落到同一台机器上

7、 Dubbo 容错策略

failover cluster 模式

provider 宕机重试以后,请求会分到其他的 provider 上,默认两次,可以手动设置重试次数,建 议把写操作重试次数设置成 0。

failback 模式

失败自动恢复会在调用失败后,返回一个空结果给服务消费者。并通过定时任务对失败的调用进行 重试,适合执行消息通知等操作。

failfast cluster 模式

快速失败只会进行一次调用,失败后立即抛出异常。适用于幂等操作、写操作,类似于 failover cluster 模式中重试次数设置为 0 的情况。

failsafe cluster 模式

失败安全是指,当调用过程中出现异常时,仅会打印异常,而不会抛出异常。适用于写入审计日志 等操作。

forking cluster 模式

并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多 服务资源。可通过 forks="2" 来设置最大并行数。

broadcacst cluster 模式

广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志 等本地资源信息。

8、Dubbo 动态代理策略有哪些?

默认使用 javassist 动态字节码生成,创建代理类,但是可以通过 SPI 扩展机制配置自己的动态代理 策略。

9、说说 Dubbo 与 Spring Cloud 的区别?

这是很多面试官喜欢问的问题,本人认为其实他们没什么关联之处,但是硬是要问区别,那就说说 吧。

回答的时候主要围绕着四个关键点来说:通信方式、注册中心、监控、断路器,其余像 Spring 分布 式配置、服务网关肯定得知道。

通信方式

Dubbo 使用的是 RPC 通信;Spring Cloud 使用的是 HTTP RestFul 方式。

注册中心

Dubbo 使用 ZooKeeper(官方推荐),还有 Redis、Multicast、Simple 注册中心,但不推荐。; Spring Cloud 使用的是 Spring Cloud Netflix Eureka。

监控

Dubbo 使用的是 Dubbo-monitor;Spring Cloud 使用的是 Spring Boot admin。

断路器

Dubbo 在断路器这方面还不完善,Spring Cloud 使用的是 Spring Cloud Netflix Hystrix。

分布式配置、网关服务、服务跟踪、消息总线、批量任务等。

Dubbo 目前可以说还是空白,而 Spring Cloud 都有相应的组件来支撑。

10、Zookeeper 和 Dubbo 的关系?

Zookeeper的作用

zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简 单来说就是ip地址和服务名称的对应关系。当然也可以通过硬编码的方式把这种对应关系在调用方 业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉 的机器提供服务。zookeeper通过心跳机制可以检测挂掉的机器并将挂掉机器的ip和服务对应关系 从列表中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码的情况通过添加机器来提 高运算能力。通过添加新的机器向zookeeper注册服务,服务的提供者多了能服务的客户就多了。

dubbo

是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo 提供一个框架解决这个问题。 注意这里的dubbo只是一个框架,至于你架子上放什么是完全取决于 你的,就像一个汽车骨架,你需要配你的轮子引擎。这个框架中要完成调度必须要有一个分布式的 注册中心,储存所有服务的元数据,你可以用zk,也可以用别的,只是大家都用zk。

zookeeper和dubbo的关系

Dubbo 的将注册中心进行抽象,它可以外接不同的存储媒介给注册中心提供服务,有 ZooKeeper,Memcached,Redis 等。

引入了 ZooKeeper 作为存储媒介,也就把 ZooKeeper 的特性引进来。首先是负载均衡,单注册中 心的承载能力是有限的,在流量达到一定程度的时 候就需要分流,负载均衡就是为了分流而存在 的,一个 ZooKeeper 群配合相应的 Web 应用就可以很容易达到负载均衡;资源同步,单单有负载 均衡还不 够,节点之间的数据和资源需要同步,ZooKeeper 集群就天然具备有这样的功能;命名 服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动 的时候,向 ZooKeeper 上的 指定节点 /dubbo/${serviceName}/providers 目录下写入自己的 URL 地址,这个操作就完成了服 务的发布。 其他特性还有 Mast 选举,分布式锁等。

 

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

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

相关文章

springboot+mybatis笔记学习

1.环境搭建 1.引入pom依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version> </dependency> <dependency><groupId>org…

人工智能(2):机器学习算法分类

根据数据集组成不同&#xff0c;可以把机器学习算法分为&#xff1a; 监督学习无监督学习半监督学习强化学习 1 监督学习 定义&#xff1a; 输入数据是由输入特征值和目标值所组成。 函数的输出可以是一个连续的值(称为回归&#xff09;&#xff0c;或是输出是有限个离散值&…

07- c语言字符串 (C语言)

一 字符串的定义及基本使用 1、什么是字符串 被双引号引用的字符集合&#xff01;例如&#xff1a;”hello” 、”world”&#xff0c;或者是以 \0 结尾的字符数组&#xff01;&#xff01;&#xff01; 比如&#xff1a;char ch[] {h, e, \0} 注意&#xff1a;”hello” 中…

Win10同时安装MYSQL5.7和MYSQL8.0版本

一、准备好两个MySQL版本的压缩包 官网下载网址&#xff1a;https://dev.mysql.com/downloads/ 二、安装 MYSQL5.7 2.1、解压文件夹&#xff0c;然后新建一个 my.ini文件 my.ini文件内容: [mysql] # 设置mysql客户端默认字符集 default-character-setutf8 port 3305 [mysq…

leetcode1.两数之和

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【LeetCode】 &#x1f353;希望我们一起努力、成长&#xff0c;共同进步。 题目链接 给定一个整数数组 nums 和一个整数目标值 target&am…

FPGA-DFPGL22学习1-上手开发板

文章目录 前言一、FPGA是什么&#xff1f;二、FPGA内部结构1) 可编程输入/输出单元2) 基本可编程逻辑单元3) 嵌入式块 RAM4) 丰富的布线资源5) 底层嵌入功能单元 Logos 系列芯片 前言 和原子哥一起学习FPGA 开发环境&#xff1a;正点原子 ATK-DFPGL22G 开发板 参考书籍&…

mysql没有data和my.ini文件怎么办?

目录 一、前言 二、其他知识 一、前言 data是存储mysql数据的地方&#xff0c;ini是mysql配置文件的地方&#xff0c;要配置文件就可以在ini里面配置就好了。在mysql的安装位置没有发现这两个文件&#xff0c;不是没有&#xff0c;而是在其他地方。&#x1f447; 其实这两个…

【CSS】`top: 50%;` 和 `transform: translateY(-50%);`的区别和联系

top: 50%; 和 transform: translateY(-50%);的区别 在某些情况下&#xff0c;top: 50%; 和 transform: translateY(-50%); 可以达到类似的效果&#xff0c;但它们实际上具有不同的工作原理和应用场景。 top: 50%;&#xff1a;这是一个相对定位属性&#xff0c;用于设置元素相对…

P6739 [BalticOI 2014 Day1] Three Friends

[BalticOI 2014 Day1] Three Friends 题目描述 有一个字符串 S S S&#xff0c;对他进行操作&#xff1a; 将 S S S 复制为两份&#xff0c;存在字符串 T T T 中在 T T T 的某一位置上插入一个字符&#xff0c;得到字符串 U U U 现在给定 U U U&#xff0c;求 S S S…

【吴恩达老师《机器学习》】课后习题4之【神经网络反向传播】(代码注释详细)

前情回顾 上一周是已经给定了神经网络的最优权重参数&#xff0c;接着直接代到前向传播里面去&#xff0c;算得最终的预测值就可以了。 这周呢&#xff0c;需要搭建整个完整的神经网络&#xff0c;并且需要自己去进行训练&#xff0c;找到最终的这个优化的权重参数。 可能需要…

WVP PRO配置实战

WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的开箱即用的网络视频平台&#xff0c;负责实现核心信令与设备管理后台部分&#xff0c;支持NAT穿透&#xff0c;支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联&#xff0c;支持将不带国标功能的摄像机/直播流/直播…

FPGA-DFPGL22学习2-开发平台学习

文章目录 前言一、Pango Design Suite软件的使用流程二、使用步骤1.新建一个工程2.设计输入3.配置工程4.分析与综合&#xff08;编译检查&#xff09;5.约束输入6.编译工程7.下载程序 总结 前言 和原子哥一起学习FPGA 开发环境&#xff1a;正点原子 ATK-DFPGL22G 开发板 参考…

5.2.2如何改变文件属性与权限

常用于群组、拥有者、各种身份的权限之修改的指令&#xff0c;如下所示&#xff1a; 改变一个文件的群组很简单&#xff0c;直接chgrp来改变&#xff0c;指令就是change group。要被改变的群组名称必须要在/etc/group文件内存在才行&#xff0c;否则就会显示错误。 假设你已经…

构造中序线索二叉树和先序线索二叉树,中序线索二叉树找寻前驱结点和后继结点,包含完整代码

一.线索二叉树的结点结构&#xff1a; lchildltagdatartagrchild ltag 0, lchild域指示结点的左孩子 ltag 1, lchild域指示结点的前驱 rtag 0, rchild域指示结点的右孩子 rtag 1, rchild域指示结点的后继 这里用char型作为树的数据域类型 //定义线索二叉树的结…

chatgpt赋能python:Python用于股票:掌握数据、分析趋势

Python用于股票&#xff1a;掌握数据、分析趋势 在当今数字化时代&#xff0c;投资者使用数据分析技术作出投资决策变得越来越重要&#xff0c;而Python正是一种无形中帮助投资者进行数据分析的强有力工具。Python是一种高级数据分析语言&#xff0c;具有易读易懂的语法和强大…

牛客网专项练习——C语言错题集(9)

文章目录 字符常量\0 与 逻辑假的关系不同类型变量所占空间大小运行多个 fork容易造成缓冲区溢出的字符串操作函数函数原型格式指针变量的关系运算&#xff0c;空指针访问存储单元BSS 段二维数组初始化 字符常量 ‘a’ 是一个字符常量&#xff0c;占用 1 个字节空间。 ‘\0’ …

数据结构期末复习【更新】

数据结构期末复习【更新】 1.模式匹配2.画二叉树&#xff08;根据中序和后序&#xff0c;前序和中序&#xff09;及其线索二叉树3.求叶子结点个数4.建立二叉排序树5.广义表6.求存储地址7.代码设计8.哈夫曼树9.最小生成树10.深度遍历、广度遍历、邻接表建立11.哈希表&#xff08…

【Leetcode60天带刷】day28回溯算法——93.复原IP地址 ,78.子集 , 90.子集II

​ 题目&#xff1a; 地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址&#xf…

【Leetcode60天带刷】day22二叉树—— 235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插入操作 ,450.删除二叉搜索树中的节点

​ 题目&#xff1a; 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先…

【Leetcode60天带刷】day23二叉树—— 669. 修剪二叉搜索树 ,108.将有序数组转换为二叉搜索树 , 538.把二叉搜索树转换为累加树

​ 题目&#xff1a; 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即&#xff0c;如果没有被移除&…