java面试题_Dubbo

1.谈一下分布式和集群的概念的区别.

集群:多台服务器重复完成同一个任务,即同一个任务部署在多态服务器上。
分布式:多态服务器协作完成同一个任务,即将一个任务分成多个子任务,将多个子任务部署到多台服务器
上协同完成同一个任务。

2.什么是SOA架构?它跟分布式架构的区别是什么?

先说一下什么是分布式框架:
	狭义:javaweb的分布式架构是指将服务层单独出来,并部署在tomcat上对外提供服务,
	在controller中可以通过远程调用的方式来访问服务层中的方法。
	广义:多台服务器协同来完成同一个任务,即将一个任务拆分成多个子任务,将多个子
	任务部署到多台服务器协同来完成同一个任务
SOA架构:
	SOA架构是分布式架构的优化版本,提供了一个服务治理中心来进行rpc调用的管理,解决了
	分布式架构中rpc调用关系复杂,难维护的问题。

3. 画一下dubbo的架构图,说一下dubbo架构图中的角色,以及角色中的调用关系

3.1Dubbo架构图

java jedispool集群 java集群和分布式是什么_服务提供者

3.2duubo架构中的角色:

服务运行容器: 用于启动服务提供者
服务提供者: 用于提服务
服务消费者: 用于消费服务
注册中心: soa架构中的服务治理中心,我们使用的是zookeeper,存储服务者列表的地方
监控中心: soa架构的的一个可视化工具

3.3dubbo框架中角色之间的调用关系

0) 服务提供方容器启动, 然后运行服务提供者
1) 服务提供方启动时会向服务注册中心注册服务地址
2) 服务消费方启动时会向服务注册中心订阅服务地址
3) 服务注册中心返回服务地址给服务消费方,当服务地址有变更时主动推送给服务消费方
4) 服务消费方从服务方地址列表中,基于负载均衡选择一台服务提供方进行调用,如果失败,再选一台
5) 服务提供者和服务消费者定时发送调用次数和调用时间的相关统计数据到监控中心

4. dubbo架构中哪些地方用的是长连接,哪些地方用的是短连接

1. 长连接: 消费者,提供者,注册中心之间是基于长连接
2. 短连接: 监控中心,消费者,提供者之间是基于短连接

5. dubbo的注册中心如果宕掉了, 会不会影响服务之间的调用?

这得根据情况而定,一般分为两种情况:
一种是服务消费者已经向服务注册中心拉取了服务地址,这种情况即使注册中心宕掉了,也不会影响服务之间的调用
另一种情况是服务中心并没有拿到服务地址就宕掉了,服务消费者没有拉取到服务地址,就会影响服务之间的调用

6.dubbo的注册中心和服务消费者之间是基于什么模式传递消息的? 推拉相结合的模式

1. 当服务消费者刚刚启动的时候, 会主动连接服务注册中心, 并从注册中心中拉取服务提供者的列表
2. 当服务运行过程中, 一旦注册中心中的服务提供者的信息变化了, 注册中心就会将变化之后的列表主动推送
3. 给服务消费者

7.你们的系统为什么用dubbo?

因为我们的项目设计还蛮复杂的,得有二三十个模块,包括货运模块,公司模块,基于系统的基础模块,统计分析等.
这些模块之间的调用非常复杂,而且我们后期还得进行升级与维护,单体架构远远满足不了我们的需要,因而我们
采取了目前主流的分布式架构,
同时为了方便这些调用的统一管理,又采用了SOA的设计思想.因为现在dubbo还是比较主流嘛,实现框架还
是选择的dubbo,用zookeeper作为注册中心.

8. Dubbo启动时如果依赖的服务不可用会怎样?

dubbo的服务启动依赖检查,指的是当启动服者务时,如果存在不可用的依赖时,直接抛出异常,从而
阻断spring初始化完成,以便在上线时发现问题
我们可以通过在服务者的springmvc配置文件中将duboo的comsumer标签中的check属性设置为false解决
这一问题,不让dubbo框架中的消费者启动依赖检查

9.你们公司的Dubbo使用的什么做注册中心? 还有别的选择吗?

我们公司使用的:zookeeper(文件系统+监听机制)
可供选择:mysql / redis

10.你们公司的Dubbo使用的是什么通信框架? 还有别的选择吗?

消费者和服务者之间的通信框架: netty(基于自定义通信协议的web容器)-dubbo协议
可供使用的通信协议框架-dubbo、rmi、hessian、http、webservice、rest、redis等

11.Dubbo有哪几种集群容错方案,默认是哪种?

Failover Cluster 失败自动切换,自动重试其它服务器(默认)
Failfast Cluster 快速失败,立即报错,只发起一次调用
Failsafe Cluster 失败安全,出现异常时,直接忽略
Failback Cluster 失败自动恢复,记录失败请求,定时重发
Forking Cluster 并行调用多个服务器,只要一个成功即返回
Broadcast Cluster 广播逐个调用所有提供者,任意一个报错则报错

12.Dubbo有哪几种负载均衡策略,默认是哪种?

Random LoadBalance-随机模式。按权重设置随机概率。在一个截面上碰撞的概率较高,但调用越大
分布越均匀
RoundRobin LoadBalance-轮询模式。按公约后的权重设置轮询比例。但存在响应慢的服务提供者会累积请求
LeastAction LoadBalance-最少活跃调用数。响应快的提供者接受越多请求,响应慢的接受越少请求
ConsistentHash LoadBalance-一致hash。根据服务提供者ip设置hash环,携带相同的参数总是发送的
同一个服务提供者,若服务挂了,则会基于虚拟节点平摊到其他提供者

13.如果使用了dubbo之后,没有切换成阿里的@Service注解,会引发什么问题?

无法将服务提供者暴露给注册中心,这样在消费者启动时:
	如果配置了检查, 会启动失败
	如果配置了不检查, 会启动会成功, 但是在服务调用的时候会保存,抛出一个找不到
	服务提供者的异常(No Provider)

14.如果使用了dubbo之后,没有切换成阿里的@Reference注解,会引发什么问题?

在rpc时,无法在控制器进行远程服务对象注入,运行时会报空指针异常,即无法进行远程服务调用