集群与设计 - Dubbo 面试题及答案
13.集群容错方式有哪些?
1.Failover Cluster失败自动切换:dubbo的默认容错方案,当调用失败时自动切换到其他可用的节点,具体的重试次数和间隔时间可用通过引用服务的时候配置,默认重试次数为1是只调用一次。
2.Failback Cluster失败自动恢复:在调用失败,记录日志和调用信息,然后返回空结果给consumer,并且通过定时任务每隔5秒对失败的调用进行重试
3.Failfast Cluster快速失败:只会调用一次,失败后立刻抛出异常
4.Failsafe Cluster失败安全:调用出现异常,记录日志不抛出,返回空结果
5.Forking Cluster并行调用多个服务提供者:通过线程池创建多个线程,并发调用多个provider,结果保存到阻塞队列,只要有一个provider成功返回了结果,就会立刻返回结果
6.Broadcast Cluster广播模式:逐个调用每个provider,如果其中一台报错,在循环调用结束后,抛出异常。
点击这里👇🏻:复杂的微服务系统、商城系统、代码生成工具实战、秒杀系统、常用demo系统、AI项目等等,手把手从0~1,带你开发完整的项目,这里能够获取项目源代码、开发教程、部署文档和问题答疑
14.说说Dubbo的分层?
分层图:

从大的范围来说,dubbo分为三层
- business业务逻辑层由我们自己来提供接口和实现还有一些配置信息
- RPC层就是真正的RPC调用的核心层,封装整个RPC的调用过程、负载均衡、集群容错、代理
- remoting则是对网络传输协议和数据转换的封装。
Service和Config两层可以认为是API层,主要提供给API使用者,使用者只需要配置和完成业务代码就可以了。
后面所有的层级是SPI层,主
要提供给扩展者使用主要是用来做Dubbo的二次开发扩展功能。
再划分到更细的层面,就是图中的10层模式。
15.服务提供者能实现失效踢出是什么原理?
服务失效踢出基于Zookeeper的临时节点原理。
Zookeeper中节点是有生命周期的,具体的生命周期取决于节点的类型,节点主要分为持久节点(Persistent)和临时节点(Ephemeral) 。
16.为什么要通过代理对象通信??

其实主要就是为了将调用细节封装起来,将调用远程方法变得和调用本地方法一样简单,还可以做一些其他方面的增强,比如负载均衡,容错机制,过滤操作,调用数据的统计。
17.怎么设计一个RPC框架?
关于这个问题,其实核心考察点就是你对于RPC框架的理解,一个成熟的RPC框架可以完成哪些功能,其实当我们看过一两个RPC框架后,就可以对这个问题回答个七七八八了,我们来举个例子。

1.首先我们得需要一个注册中心,去管理消费者和提供者的节点信息,这样才会有消费者和提供才可以去订阅服务,注册服务。
2.当有了注册中心后,可能会有很多个provider节点,那么我们肯定会有一个负载均衡模块来负责节点的调用,至于用户指定路由规则可以使一个额外的优化点。
3.具体的调用肯定会需要牵扯到通信协议,所以需要一个模块来对通信协议进行封装,网络传输还要考虑序列化。
4.当调用失败后怎么去处理?所以我们还需要一个容错模块,来负责失败情况的处理。
5.其实做完这些一个基础的模型就已经搭建好了,我们还可以有更多的优化点,比如一些请求数据的监控,配置信息的处理,日志信息的处理等等。
这其实就是一个比较基本的RPC框架的大体思路,大家有没有get到?
Java基础常见面试题及答案Java常用集合常见面试题及答案JVM常见面试题及答案线程池常见面试题及答案HashMap常见面试题及答案并发编程常见面试题及答案Synchronized常见面试题及答案Spring常见面试题及答案MyBatis常见面试题及答案
作者:moon聊技术
来源:https://blog.csdn.net/qq_43513205/article/details/116352946?spm=1001.2014.3001.5501
最近建一些几十个工作内推群,各大城市都有,群里目前已经收集了很多内推岗位,大厂、中厂、小厂、外包都有。 欢迎HR、开发、测试、运维和产品加入。

扫描下方微信,备注:网站+所在城市,即可拉你进工作内推群。
