Zookeeper、Dubbo面试题总结

zookeeper面试】

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

1、zookeeper是一个开源的分布式协调服务框架。

2、应用场景:分布式通知/协调、负载均衡、配置中心、分布式锁、分布式队列等。

3、使用ZAB协议。

4、Paxos算法。

5、选举算法及流程。

6、节点类型:持久节点、持久顺序节点、临时节点、临时顺序节点。

7、不是永久的,一次性的,需要借助第三方工具实现重复注册。

8、部署模式:单机模式、伪集群模式、集群模式。

9、集群角色:leader、foller、observer。

10、集群规则为2N+1台,N>0,即3台。

11、集群需要一半以上的机器可用,所以,3台挂掉1台还能工作,2台不能。

12、3.5版本开始支持动态扩容。

13、java客户端:zk自带的zkclient及Apache开源的Curator。

14、chubby是google的,完全实现paxos算法,不开源。zookeeper是chubby的开源实现,使用zab协议,paxos算法的变种。

15、常用命令:ls get set create delete等。

 

【Dubbo面试题】

Spring Eureka 从开源转变为闭源,Consul 正在崛起,而Dubbo又开始重新更新。目前市场上仍有不少公司使用dubbo我们也需要继续学习。

1、默认使用的是什么通信框架,还有别的选择吗?  

     默认也推荐使用netty框架,还有mina。
  
2、服务调用是阻塞的吗?  

     默认是阻塞的,可以异步调用,没有返回值的可以这么做。
  
3、一般使用什么注册中心?还有别的选择吗?  

    推荐使用zookeeper注册中心,还有redis等不推荐。
  
4、默认使用什么序列化框架,你知道的还有哪些?  

     默认使用Hessian序列化,还有Duddo、FastJson、Java自带序列化。
  
5、服务提供者能实现失效踢出是什么原理? 

      服务失效踢出基于zookeeper的临时节点原理。
  
6、服务上线怎么不影响旧版本?  

     采用多版本开发,不影响旧版本。
  
7、如何解决服务调用链过长的问题? 

      可以结合zipkin实现分布式服务追踪。
  
8、说说核心的配置有哪些?  

    dubbo:service/ dubbo:reference/ dubbo:protocol/ dubbo:registry/ dubbo:application/ dubbo:provider/ dubbo:consumer/ dubbo:method/
  
9、dubbo推荐用什么协议?  

    默认使用dubbo协议。
  
10、同一个服务多个注册的情况下可以直连某一个服务吗?  

   可以直连,修改配置即可,也可以通过telnet直接某个服务。
  
11、画一画服务注册与发现的流程图  
  
12、集群容错怎么做?  

   

Failover Cluster:失败重试

当服务消费方调用服务提供者失败后自动切换到其他服务提供者服务器进行重试。这通常用于读操作或者具有幂等的写操作,需要注意的是重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。

接口级别配置重试次数方法 <dubbo:reference retries="2" /> ,如上配置当服务消费方调用服务失败后,会再重试两次,也就是说最多会做三次调用,这里的配置对该接口的所有方法生效。当然你也可以针对某个方法配置重试次数如下:

<dubbo:reference>
    <dubbo:method name="sayHello" retries="2" />
</dubbo:reference>

Failfast Cluster:快速失败

当服务消费方调用服务提供者失败后,立即报错,也就是只调用一次。通常这种模式用于非幂等性的写操作。

Failsafe Cluster:失败安全

当服务消费者调用服务出现异常时,直接忽略异常。这种模式通常用于写入审计日志等操作。

Failback Cluster:失败自动恢复

当服务消费端用服务出现异常后,在后台记录失败的请求,并按照一定的策略后期再进行重试。这种模式通常用于消息通知操作。

Forking Cluster:并行调用

当消费方调用一个接口方法后,Dubbo Client会并行调用多个服务提供者的服务,只要一个成功即返回。这种模式通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

Broadcast Cluster:广播调用

当消费者调用一个接口方法后,Dubbo Client会逐个调用所有服务提供者,任意一台调用异常则这次调用就标志失败。这种模式通常用于通知所有提供者更新缓存或日志等本地资源信息。

如上,Dubbo本身提供了丰富的集群容错模式,但是如果您有定制化需求,可以根据Dubbo提供的扩展接口Cluster进行定制。在后面的消费方启动流程章节会讲解何时/如何使用的集群容错。

  
13、在使用过程中都遇到了些什么问题?  

      a.dubbo对外提供的服务没有try catch导致调用方失败,服务方没有收到异常邮件
  
14、dubbo和dubbox之间的区别?  

    dubbox是当当网基于dubbo上做了一些扩展,如加了服务可restful调用,更新了开源组件等。
  
15、你还了解别的分布式框架吗?

     别的还有spring的spring cloud,facebook的thrift,twitter的finagle等。

16.什么是本地暴露和远程暴露,他们的区别

本地暴露:一个服务可能既是provider,又是consumer,自己调用自己的服务,暴露在jvm中,不需要网络通信。url是以injvm开头

远程暴露:将ip,端口等信息暴露给远程客户端,调用时需要网络通信。

dubbo处理服务暴露的关键在于Invoker转换到Exporter的过程。

17.如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?

可以通信,启动dubbo时,消费者会从zk拉去注册的生产者的地址接口作为数据,缓存在本地,每次调用安装本地的缓存地址进行调用。dubbo会默认会在本地缓存注册中心的信息文件,默认路径在//home/[user]/.dubbo/dubbo-registry-192.168.1.109.cache

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值