原创

Java面试高级篇—Dubbo与Zookeeper面试题16期

Dubbo缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。反之,Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。


dubbo是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题。注意这里的dubbo只是一个框架,至于你架子上放什么是完全取决于你的,就像一个汽车骨架,你需要配你的轮子引擎。这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,你可以用zk,也可以用别的,只是大家都用zk。


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)在使用过程中都遇到了些什么问题?  

读操作建议使用Failover失败自动切换,默认重试两次其他服务器。写操作建议使用Failfast快速失败,发一次调用失败就立即报错。


12)dubbo和dubbox之间的区别?  

dubbox是当当网基于dubbo上做了一些扩展,如加了服务可restful调用,更新了开源组件等。


13)你还了解别的分布式框架吗?

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



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等。


Zookeeper的作用

zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。当然也可以 通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉的机器提供服务。 zookeeper通过心跳机制可以检测挂掉的机器并将挂掉机器的ip和服务对应关系从列表中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码 的情况通过添加机器来提高运算能力。通过添加新的机器向zookeeper注册服务,服务的提供者多了能服务的客户就多了。


zookeeper和dubbo的关系

Dubbo的将注册中心进行抽象,是得它可以外接不同的存储媒介给注册中心提供服务,有ZooKeeper,Memcached,Redis等。

引入了ZooKeeper作为存储媒介,也就把ZooKeeper的特性引进来。首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时 候就需要分流,负载均衡就是为了分流而存在的,一个ZooKeeper群配合相应的Web应用就可以很容易达到负载均衡;资源同步,单单有负载均衡还不 够,节点之间的数据和资源需要同步,ZooKeeper集群就天然具备有这样的功能;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动 的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。 其他特性还有Mast选举,分布式锁等。


参考资料:

https://blog.csdn.net/chizizhixin/article/details/81867106

https://www.cnblogs.com/xiaofei1208/p/7077733.html

关注下方微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

分享:

支付宝

微信