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

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.lryc.cn/news/2392490.html

相关文章:

  • Allegro X PCB设计小诀窍--05.如何在Allegro X中实现隐藏电源飞线效果
  • 一篇文章教会你ESP8266串口WIFI无线模块实现物联网无线收发,附STM32代码示例
  • 算法-基础算法
  • 特种设备作业人员-G3锅炉水处理如何备考学习?
  • Reactor模式详解:高并发场景下的事件驱动架构
  • UniApp 生产批次管理模块技术文档
  • 项目日记 -Qt音乐播放器 -设置任务栏图标与托盘图标
  • 国产 BIM 软件万翼斗拱的技术突破与现实差距 —— 在创新与迭代中寻找破局之路
  • 记录算法笔记(2025.5.29)最小栈
  • Android SurfaceFlinger核心工作机制
  • Golang|etcd服务注册与发现 策略模式
  • 深度解析UniApp盲盒系统开发:从源码架构到多端部署全流程
  • STM32的OLED显示程序亲测可用:适用于多种场景的稳定显示解决方案
  • 【AI News | 20250529】每日AI进展
  • Day12 - 计算机网络 - HTTP
  • Linux驱动学习笔记(十)
  • 如何优化Elasticsearch的搜索性能?
  • TI dsp FSI (快速串行接口)
  • 责任链模式:构建灵活可扩展的请求处理体系(Java 实现详解)
  • nlp中的频率就是权重吗
  • 融智学“新五常”框架:五维方式的重构与协同
  • wechat-003-学习笔记
  • 【大模型微调】魔搭社区GPU进行LLaMA-Factory微调大模型自我认知
  • 基于MATLAB编程针对NCV检测数据去漂移任务的完整解决方案
  • 【数据结构】哈希表的实现
  • 永磁同步电机控制算法--基于电磁转矩反馈补偿的新型IP调节器
  • RabbitMQ 应用 - SpringBoot
  • 基于递归思想的系统架构图自动化生成实践
  • OpenGL Chan视频学习-9 Index Buffers inOpenGL
  • 《基于AIGC的智能化多栈开发新模式》研究报告重磅发布! ——AI重塑软件工程,多栈开发引领未来