dubbo+zookeeper面试高频问题

本文整理了关于Dubbo和Zookeeper在面试中常见的问题,涵盖了Dubbo支持的协议及其优缺点、超时时间设置、重试机制、注册中心、负载均衡策略、序列化方式以及Zookeeper的基本概念、作用、文件系统、通知机制、应用场景等。此外,还对比了Dubbo与Spring Cloud的关系以及Zookeeper与Eureka作为注册中心的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【面试题】- Dubbo支持的协议

dubbo(默认): 单一长连接和 NIO 异步通讯,适合大并发小数据量的服务调用,以及消费者远大于提供者。传输协议 TCP,异步,Hessian 序列化;

rmi: 采用 JDK 标准的 rmi 协议实现,传输参数和返回参数对象需要实现 Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数据包大小混合,消费者和提供者个数差不多,可传文件,传输协议 TCP。 多个短连接,TCP 协议传输,同步传输,适用常规的远程服务调用和 rmi 互操作。在依赖低版本的 Common-Collections包,java 序列化存在安全漏洞;

webservice: 基于 WebService 的远程调用协议,集成 CXF 实现,提供和原生 WebService 的互操作。多个短连接,基于 HTTP 传输,同步传输,适用系统集成和跨语言调用;

http: 基于 Http 表单提交的远程调用协议,使用 Spring 的HttpInvoke 实现。多个短连接,传输协议 HTTP,传入参数大小混
合,提供者个数多于消费者,需要给应用程序和浏览器 JS 调用;

hessian: 集成 Hessian 服务,基于 HTTP 通讯,采用 Servlet 暴露服务,Dubbo 内嵌 Jetty 作为服务器时默认实现,提供与 Hession 服务互操作。多个短连接,同步 HTTP 传输,Hessian 序列化,传入参数较大,提供者大于消费者,提供者压力较大,可传文件;

memcache: 基于 memcached 实现的 RPC 协议

redis: 基于 redis 实现的 RPC 协议

【面试题】- dubbo 推荐用什么协议?使用该协议有哪些优缺点

传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。

【面试题】- dubbo超时时间的设置

通过timeout属性配置超时时间,  服务的提供者和消费者都可以配置, 尽量在服务提供者中配置,因为服务的提供者会对自己提供的服务情况更清楚超时时间不要设置太大(1~5S),会影响并发性能问题

【面试题】- dubbo自动重试机制

dubbo在调用服务不成功时,默认会重试2次。Dubbo的路由机制,会把超时的请求路由到其他机器上,而不是本机尝试,所以 dubbo的重试机制也能一定程度的保证服务的质量

【面试题】- dubbo支持的注册中心

Multicast 注册中心
Multicast 注册中心不需要任何中心节点,只要广播地址,就能进行服务注册和发现。基于网络中组播传输实现

Zookeeper 注册中心
基于分布式协调系统 Zookeeper 实现,采用Zookeeper 的 watch 机制实现数据变更

redis 注册中心
基于 redis 实现,采用 key/Map 存储,住 key 存储
服务名和类型,Map 中 key 存储服务 URL,value 服务过期时间。基
于 redis 的发布/订阅模式通知数据变更;

【面试题】- dubbo集群的负载均衡策略

随机
按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。(权重可以在dubbo管控台配置)

轮循
按公约后的权重设置轮循比率。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

最少活跃调用数
相同活跃数的随机,活跃数指调用前后计数差。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

一致性Hash
相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

【面试题】- dubbo支持哪些序列化方式?

dubbo序列化:阿里尚未开发成熟的高效java序列化实现,阿里不建议在生产环

<think>嗯,用户想了解Zookeeper的结构和高频面试题。首先,我需要回忆一下Zookeeper的基本知识。Zookeeper是一个分布式的协调服务,常用于管理配置信息、命名服务、分布式锁等。它的数据结构类似于文件系统的树形结构,每个节点叫做Znode。那结构方面,可能包括数据模型、节点类型、监听机制这些内容。 接下来是高频面试题,常见的可能有Zookeeper的用途,ZAB协议,选举机制,节点类型,Watch机制,如何实现分布式锁,和CAP中的关系等等。需要把这些整理清楚,确保准确无误。 用户可能正在准备面试,所以需要简明扼要的结构化回答,重点突出关键点。同时要注意使用中文,并且按照之前的系统指令,数学表达式要用$...$格式,比如在提到版本号的时候可能需要用$version$这样的表示。不过Zookeeper相关内容可能涉及数学不多,但如果有的话要注意格式。 需要检查是否有遗漏的重要知识点,比如持久节点和临时节点的区别,顺序节点的特性,会话机制,集群角色(Leader/Follower/Observer),数据同步过程,Zookeeper在分布式系统中的应用场景,比如Kafka中使用Zookeeper做什么。 还要注意常见的误区,比如Zookeeper是否强一致性,它保证的是顺序一致性,属于CP系统。这部分在CAP理论中的位置可能会被问到。 现在组织回答的结构:先介绍Zookeeper的总体结构,包括数据模型、节点类型、Watch机制等,然后分点列出高频面试题,每个问题给出简要答案。需要确保信息准确,比如ZAB协议的正确描述,选举过程的细节,比如myid和ZXID的作用。 可能还需要对比其他协调服务,比如etcd,但用户没有问这个,所以可能不需要展开。但面试题中可能会涉及为什么选择Zookeeper,所以可以提及其稳定性和成熟度。 最后检查是否有错误,比如节点类型是否包括持久、临时、顺序,以及它们的组合。监听机制是一次性的还是可持续的,需要明确说明是一次触发后需重新注册。 总结,回答需要结构清晰,知识点全面,符合面试准备的需求,同时遵循格式要求,正确使用LaTeX标注变量或术语。</think>### Zookeeper核心结构 Zookeeper采用**树形层级命名空间**(类似文件系统),核心组件包括: 1. **Znode** - 数据存储单元,路径唯一(如`/app/config`) - 存储数据上限:**1MB** - 关键属性: ```math version(版本号), cZxid(创建事务ID), mtime(修改时间) ``` 2. **节点类型** | 类型 | 特性 | 示例用途 | |---|---|---| | 持久节点(Persistent) | 客户端断开后保留 | 配置存储 | | 临时节点(Ephemeral) | 客户端会话结束自动删除 | 服务注册 | | 顺序节点(Sequential) | 路径末尾追加全局单调递增序号 | 分布式锁 | 3. **Watch机制** - 一次性触发(数据变化后需重新注册) - 监听事件类型:`NodeCreated`、`NodeDeleted`、`NodeDataChanged` --- ### 高频面试题(附答案要点) #### 1. Zookeeper如何保证数据一致性? - **ZAB协议**(Zookeeper Atomic Broadcast) - **Leader选举**:基于`myid`(服务器ID)和`ZXID`(事务ID)的过半机制 - **消息广播**:Leader将事务请求转化为`Proposal`广播,Follower返回`ACK`后提交 #### 2. 临时节点的典型应用场景? - **服务注册发现**:服务上线创建临时节点,宕机后节点自动清除 - **分布式锁**:通过竞争创建临时节点实现互斥 #### 3. Zookeeper的Watch机制是否可靠? - **弱可靠性**:客户端断开期间的事件无法捕获(需结合心跳检测重连后主动拉取数据) #### 4. 如何用Zookeeper实现分布式锁? ```plaintext 1. 尝试创建临时顺序节点:/lock/resource_00000001 2. 检查自己是否是最小序号节点 3. 是则获取锁;否则监听前一个节点的删除事件 4. 释放锁时删除自身节点 ``` #### 5. Zookeeper属于CAP中的哪一类? - **CP系统**:保证强一致性(Consistency)和分区容错性(Partition Tolerance),牺牲可用性(如选举期间服务不可用) --- ### 扩展考点 - **集群角色**:Leader处理写请求,Follower/Observer处理读请求 - **会话(Session)**:心跳超时(默认2倍tickTime)后会话失效 - **典型应用**:Hadoop(HA切换)、Kafka(Broker元数据管理) > 💡 提示:面试中常要求结合场景设计Znode结构(如配置中心、选主逻辑),建议通过开源框架(如Dubbo)源码加深理解。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值