Dubbo高频面试题

引言

作为分布式服务框架的标杆,Dubbo凭借其高性能RPC通信、灵活的服务治理能力和丰富的容错机制,成为Java技术栈中微服务领域的核心考点。本文系统梳理Dubbo高频面试核心知识点,涵盖容错策略、负载均衡、注册中心原理、服务上下线感知等关键技术细节,助您深入理解Dubbo设计思想,从容应对分布式服务架构面试挑战。无论是服务注册发现流程,还是ZooKeeper节点监听机制,这里提供清晰的技术脉络与场景化解析。

Dubbo 容错策略(调用失败处理方式)

  1. 默认额外重试2次。
  2. 只请求一次,失败直接抛异常。
  3. 只请求一次,失败吞掉异常 不做任何处理。
  4. 记录失败请求,后台定时任务进行重发。
  5. 广播给服务提供者集群 ,只要有一个节点返回,则成功。
  6. 逐个调用服务提供者集群,只要有一个节点失败,则失败。

Dubbo 核心功能

  1. 面向接口的高性能RPC调用。
  2. 服务自动注册和发现。
  3. 负载均衡策略。
  4. 多样的容错策略。
  5. 可视化服务治理和运维。

Dubbo 负载均衡策略

  1. 随机
  2. 轮询
  3. 加权随机
  4. 加权轮询
  5. 一致性hash
  6. 最小活跃数:当一个新的请求到达时,负载均衡器会检查所有可用服务实例的活跃请求数,并选择活跃请求数最少的实例来处理该请求。如果有多个服务实例的活跃请求数相同且都是最少的,负载均衡器会在这些实例中随机选择一个来处理请求,以避免所有请求都集中到某一个实例上。

Dubbo 工作流程

  1. 服务启动后,provider和consumer根据配置信息,连接到注册中心,分别进行服务注册和服务订阅。
  2. 注册中心根据订阅关系,将provider信息发送给consumer,consumer会将provider信息缓存再本地。如果信息有变化,consumer会收到注册中心的消息推送。
  3. 服务调用时,consumer会生成代理对象,根据负载均衡策略,选择一台provider进行接口调用,同时定时向monitor发送接口调用次数以及耗时。
  4. provider收到请求后对数据进行反序列化,通过代理对象调用具体接口。

Dubbo 如何感知服务下线?

  1. Dubbo通过ZK来实现服务注册和发现,通过ZK来维护提供者和消费者的地址。
  2. /dubbo/services/providers和/dubbo/services/consumers节点维护提供者和消费者地址。
  3. ZK通过心跳检测机制(客户端主动定期向ZooKeeper服务器发送心跳消息,也称为Ping请求),判断Dubbo的服务提供者的运行状态,来决定是否从服务列表中移除,当出现故障时ZK会剔除这个服务地址。
  4. Dubbo的服务消费端通过Watch机制来对/providers节点进行监控,一旦节点下的子节点发生变化,ZK就会发送事件通知Dubbo的服务消费端,消费端收到后会将变更本地缓存的服务地址。

Dubbo 注册中心Zookeeper结构

/dubbo└── com.example.DemoService├── providers├── consumers├── configurators└── routers
  1. /dubbo/com.example.DemoService:这个节点是具体的服务接口节点,以服务接口的全限定类名命名。每个服务对应一个这样的节点。
  2. /dubbo/com.example.DemoService/providers:这个节点下存储的是所有提供该服务的提供者信息。节点的内容通常是 URL 格式,包含服务提供者的 IP、端口、协议、版本、方法等信息。
  3. /dubbo/com.example.DemoService/consumers:这个节点下存储的是所有订阅了该服务的消费者信息。节点内容也是 URL 格式,包含消费者的 IP、端口、应用名、版本、时间戳等信息。

感谢您的阅读!如果文章中有任何问题或不足之处,欢迎及时指出,您的反馈将帮助我不断改进与完善。期待与您共同探讨技术,共同进步!

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

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

相关文章

氮气吹扫电磁阀

一、氮气吹扫电磁阀的概述 氮气吹扫电磁阀是一种重要的工业自动控制设备,用于对工业设备中出现的杂质和沉淀物进行清理,以保证生产线的畅通和生产效率的稳定。其作用是在需要吹扫清洗的工业设备中,通过控制气源的气压,打开电磁阀…

网络安全的守护者:iVX 如何构建全方位防护体系

一、安全技术的三大趋势 在数字化时代,网络安全面临着前所未有的挑战。随着企业级应用的普及,安全技术也在不断演进。目前,安全技术架构的发展呈现出三大趋势: 零信任架构的崛起:传统的网络安全依赖于边界防护&#…

微软云如何申请使用

微软云(Azure)新手“开荒”指南:5步搞定账户,直达云端! 还在为云计算的复杂门槛发愁吗?别担心!当全球83%的企业都在加速“上云”,微软智能云Azure凭借其在全球34个区域、200服务的庞…

magic-api配置Git插件教程

一、配置gitee.com 1,生成rsa密钥,在你的电脑右键使用管理员身份运行(命令提示符),执行下面命令 ssh-keygen -t rsa -b 2048 -m PEM一直按回车键,不需要输入内容 找到 你电脑中的~/.ssh/id_rsa.pub 文件…

ojs导入显示空白页错误信息

ojs技术支持:ojs.net.cn error: Uncaught Error: Call to a member function getData() on null in /var/www/html/ojs3/classes/search/ArticleSearchIndex.inc.php:38 Stack trace: #0 /var/www/html/ojs3/plugins/importexport/esci/filter/esciXmlArticleFilter.inc.php(…

【ConvLSTM第一期】ConvLSTM原理

目录 🧠 一、ConvLSTM 原理详解1.1 背景1.2 ConvLSTM 的结构 参考 ConvLSTM(Convolutional Long Short-Term Memory)是一种结合了卷积神经网络(CNN)与循环神经网络(RNN)中 LSTM(长短…

4.8.1 利用Spark SQL实现词频统计

在利用Spark SQL实现词频统计的实战中,首先需要准备单词文件并上传至HDFS。接着,可以通过交互式方法或创建Spark项目来实现词频统计。交互式方法包括读取文本文件生成数据集,扁平化映射得到新数据集,然后将数据集转成数据帧&#…

Linux相关概念和易错知识点(41)(UDP、TCP报头结构)

目录 1.UDP(1)传输层(2)UDP报头(3)缓冲区和sk_buff①缓冲区②sk_buff 2.TCP(1)发送和接受缓冲区(2)报头结构①按序到达②可靠传输③流量控制④紧急指针 1.UDP…

光谱相机在生态修复监测中的应用

光谱相机通过多维光谱数据采集与智能分析技术,在生态修复监测中构建起‌“感知-评估-验证”‌的全周期管理体系,其核心应用方向如下: 一、土壤修复效能量化评估 ‌重金属污染动态监测‌ 通过短波红外(1000-2500nm)波…

[网页五子棋]项目介绍以及websocket的消息推送(轮询操作)、报文格式和握手过程(建立连接过程)

文章目录 项目背景核心技术创建项目WebSocket消息推送轮询操作 报文格式握手过程(建立连接过程) 项目背景 用户模块 用户的注册和登录管理用户的天梯分数,比赛场数,获胜场数等信息 匹配模块 依据用户的天梯积分,来实现匹配机制 对战模块 把两…

时序模型介绍

一.整体介绍 1.单变量 vs 多变量时序数据 单变量就是只根据时间预测,多变量还要考虑用户 2.为什么不能用机器学习预测: a.时间不是影响标签的关键因素 b.时间与标签之间的联系过于弱/过于复杂,因此时序模型依赖于时间与时间的相关性来进行预…

尚硅谷redis7 86 redis集群分片之3主3从集群搭建

86 redis集群分片之3主集群搭建 3主3从redis集群配置 找3台真实虚拟机,各自新建 mķdir -p /myredis/cluster 新建6个独立的redis实例服务 IP:192.168.111.175端口6381/端口6382 vim /myredis/cluster/redisCluster6381.conf bind 0.0.0.0 daemonize yes protected-mode no …

Python服务器请求转发服务

前言: 服务器无法连接外网 配置步骤 准备python脚本服务器内下载python 示例 1.下载python创建虚拟环境以及配置 -- 磁盘空间 df -h -- 下载apt sudo yum install apt -y-- 下载python pip sudo apt install python3 python3-pip python3-venv -y-- 测试查看 …

02.K8S核心概念

服务的分类 有状态服务:会对本地环境产生依赖,例如需要把数据存储到本地磁盘,如mysql、redis; 无状态服务:不会对本地环境产生任何依赖,例如不会存储数据到本地磁盘,如nginx、apache&#xff…

Java八股-Java优缺点,跨平台,jdk、jre、jvm关系,解释和编译

java优势劣势? 优势:面向对象,平台无关,垃圾回收,强大的生态系统 劣势:运行速度慢(相比于c和rust这样的原生编译语言会比较慢),语法繁琐(相比于python&…

Attention Is All You Need论文阅读笔记

Attention is All You Need是如今机器学习研究者必读的论文,该文章提出的Transformer架构是如今很多机器学习项目的基础,说该文章极大推动了机器学习领域的研究也不为过。 但这么重要,也是必读的文章对初学者来说其实并不友好,很多…

【MAC】YOLOv8/11/12 转换为 CoreML 格式并实现实时目标检测

在本文中,我们将详细介绍如何将 YOLOv8/11/12 模型转换为 CoreML 格式,并使用该模型在摄像头实时检测中进行目标检测。主要适用于M1、M2、M3、M4芯片的产品。 以下教程在YOLOv8/11/12均适用,此处就以 YOLOv11 举例 目录 前提条件YOLOv8/11/12 转换为 CoreML实时目标检测结论…

Redis--缓存击穿详解及解决方案

缓存击穿 缓存击穿问题也称热点key问题,就是一个高并发访问(该key访问频率高,访问次数多)并且缓存重建业务比较复杂的key突然失效了,大量的请求访问会在瞬间给数据库带来巨大的冲击。 缓存重建业务比较复杂&#xff…

UniApp X:鸿蒙原生开发的机会与DCloud的崛起之路·优雅草卓伊凡

UniApp X:鸿蒙原生开发的机会与DCloud的崛起之路优雅草卓伊凡 有句话至少先说,混开框架中目前uniapp x是率先支持了鸿蒙next的开发的,这点来说 先进了很多,也懂得审时度势。 一、UniApp X如何支持鸿蒙原生应用? UniAp…

域名解析怎么查询?有哪些域名解析查询方式?

在互联网的世界里,域名就像是我们日常生活中的门牌号,帮助我们快速定位到想要访问的网站。而域名解析则是将这个易记的域名转换为计算机能够识别的IP地址的关键过程。当我们想要了解一个网站的域名解析情况,或者排查网络问题时,掌…