Dubbo面试题

1. 那为什么要有 RPC,HTTP 不好么?

RPC 对比的是本地过程调用,是用来作为分布式系统之间的通信,它可以用 HTTP 来传输,也可以基于 TCP 自定义协议传输。

Dubbo 的注册中心集群挂掉,发布者和订阅者之间还能通信么? 可以通讯。启动 Dubbo 时,消费者会从 Zookeeper 拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用。

2. Dubbo集群提供了哪些负载均衡策略?

Random LoadBalance: 随机选取提供者策略,有利于动态调整提供者权重。截面碰撞率高,调用次数越多,分布越均匀。 RoundRobin LoadBalance: 轮循选取提供者策略,平均分布,但是存在请求累积的问题。 LeastActive LoadBalance: 最少活跃调用策略,解决慢提供者接收更少的请求。 ConstantHash LoadBalance: 一致性 Hash 策略,使相同参数请求总是发到同一提供者,一台机器宕机,可以基于虚拟节点,分摊至其他提供者,避免引起提供者的剧烈变动。

3. Dubbo的集群容错方案有哪些?

Failover Cluster:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。 Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。 Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。 Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。 Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2″ 来设置最大并行数。 Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错 。通常用于通知所有提供者更新缓存或日志等本地资源信息。

默认的容错方案是 Failover Cluster。

相关推荐
金銀銅鐵2 分钟前
[Java] 如何理解 class 文件中字段的 access flags?
java·后端
不懒不懒23 分钟前
基于 Flask —— 异步任务处理接口服务
后端·python·flask
Xidaoapi1 小时前
Python FastAPI性能优化实战:8个让你的API快3倍的技巧
后端·程序员
William Dawson1 小时前
【通俗易懂!Spring四大核心注解源码解读:@Configuration、@ComponentScan、@Import、@EnableXXX实战】
java·后端·spring
倚栏听风雨1 小时前
Mac 本地开发:用 Nginx 配置自定义域名代理到本地服务
后端
fliter1 小时前
在 Rust 异步接口的丛林中生存:从同步 I/O 到手写异步状态机
后端
菜菜小狗的学习笔记2 小时前
八股(九)杂七杂八
java·后端·spring
逍遥德2 小时前
Java编程高频的“技术点”-01:自定义全局异常处理器
java·开发语言·spring boot·后端
小旭95272 小时前
商品详情实现与缓存问题(穿透、击穿、雪崩)解决方案
java·数据库·spring boot·后端·缓存
迷渡3 小时前
用 Rust 重写的 Bun 有 13365 个 unsafe!
开发语言·后端·rust