这是一篇关于面试,也是现在主流的分布式架构知识点分享,对您有帮助的话,可以帮小张点个关注,分享一下!
说到分布式,大家肯定都会想到,分布式和集群,但是这俩个有什么区别呢,字面意思想必大家都能知道吧,一个是分开,一个集中。下面我就给大家分享一下,关于这方面的知识点,也是小张在面试的时候经常被问得一些问题总结!
分布式和集群的区别:
集群:多台服务器重复完成同一个任务,即同一个任务部署在多台服务器上
分布式:多台服务器协同完成同一个任务,即同一个任务拆分为多个子任务,多个子任务部署在多台服务器上协同完成同一个任务
什么是SOA架构? 它跟分布式架构的区别是什么?
分布式架构:
侠义:javaweb应用的分布式架构就是指将服务层单独出来,并部署在tomcat上对外提供服务,在controller中可以通过远程调用访问服务层中的方法
广义:多台服务器协同完成同一个任务,即同一个任务拆分为多个子任务,多个子任务部署在多台服务器上协同完成同一个任务
SOA架构:
分布式架构的优化版本,提供了一个服务治理中心来进行rpc调用的管理,解决了分布式架构在rpc中调用关系复杂,难维护的问题
Dubbo架构图中的角色, 以及角色的调用关系?
1、 Dubbo框架中的角色:
服务运行容器: 用于启动服务提供者(不熟悉运行容器,回答的时候 不推荐回答这一条,这一条可能使你涨薪也可能使你被pass)
服务提供者: 用于提供服务
服务消费者: 用于消费服务
注册中心: soa架构中的服务治理中心,我们使用的是zookeeper,存储 服务者列表的地方
监控中心: soa架构的的一个可视化工具
2、Dubbo框架中角色之间的调用关系
服务提供方容器启动, 然后运行服务提供者
5.服务消费方从服务方地址列表中,基于负载均衡选择一台服务提供方 进行调用,如果失败,再选一台
6.服务提供者和服务消费者定时发送调用次数和调用时间的相关统计数 据到监控中心
Dubbo架构中哪些地方用的是长连接,哪些地方用的是短连接?
1. 长连接: 消费者,提供者,注册中心之间是基于长连接
2. 短连接: 监控中心,消费者,提供者之间是基于短连接
Dubbo的注册中心如果宕掉了, 会不会影响服务之间的调用?
根据情况而定,一般分为两种情况:
Dubbo的注册中心和服务消费者之间是基于什么模式传递消息的?
推拉相结合的模式
1. 当服务消费者刚刚启动的时候, 会主动连接服务注册中心, 并从注册中心中拉取服务提供者的列表
2. 当服务运行过程中, 一旦注册中心中的服务提供者的信息变化了, 注册中心就会将变化之后的列表主动推送给服务消费者
Dubbo启动时如果依赖的服务不可用会怎样?
dubbo的服务启动依赖检查,指的是当启动服者务时,如果存在不可用的依赖时,直接抛出异常,从而阻断spring初始化完成,以便在上线时发现问题
我们可以通过在服务者的springmvc配置文件中将duboo的comsumer标签中的check属性设置为false解决这一问题,不让dubbo框架中的消费者启动依赖检查
Doubbo注册中心处理zk,还有什么可以选择?
Mysql / redis
Dubbo使用的是什么通信框架? 还有别的选择吗?
消费者和服务者之间的通信框架: netty(基于自定义通信协议的web容器)-dubbo协议
可供使用的通信协议框架-dubbo、rmi、hessian、http、webservice、rest、redis等
Dubbo有哪几种集群容错方案,默认是哪种?
Failover Cluster 失败自动切换,自动重试其它服务器(默认)
Failfast Cluster 快速失败,立即报错,只发起一次调用
Failsafe Cluster 失败安全,出现异常时,直接忽略
Failback Cluster 失败自动恢复,记录失败请求,定时重发
Forking Cluster 并行调用多个服务器,只要一个成功即返回
Broadcast Cluster 广播逐个调用所有提供者,任意一个报错则报错
Dubbo有哪几种负载均衡策略,默认是哪种?
Random LoadBalance-随机模式。按权重设置随机概率。在一个截面上碰撞的概率较高,但调用越大分布越均匀
RoundRobin LoadBalance-轮询模式。按公约后的权重设置轮询比例。但存在响应慢的服务提供者会累积请求
LeastAction LoadBalance-最少活跃调用数。响应快的提供者接受越多请求,响应慢的接受越少请求
ConsistentHash LoadBalance-一致hash。根据服务提供者ip设置hash环,携带相同的参数总是发送的同一个服务提供者,若服务挂了,则会基于虚拟节点平摊到其他提供者
如果使用了dubbo之后,没有切换成阿里@Service注解,会引发什么问题?
无法将服务提供者暴露给注册中心,这样在消费者启动时:
如果配置了检查, 会启动失败
如果配置了不检查, 会启动会成功, 但是在服务调用的时候会保存,抛出一个找不到服务提供者的异常(No Provider)
如果使用了dubbo之后,没有切换成阿里的@Reference注解,会引发什么问题?
在rpc时,无法在控制器进行远程服务对象注入,运行时会报空指针异常,即无法进行远程服务调用