2023年IT企业攻略,Java分布式架构面试题

106 阅读4分钟

1.Dubbo 有哪些特性?

答:Dubbo 特性如下:

面向接口代理的高性能 RPC 调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节;

智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量;

服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知;

高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如 Protocol、Transport、Serialization 被设计为扩展点,平等对待内置实现和第三方实现;

运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能;

可视化的服务治理与运维:提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。

2.Dubbo 有哪些核心组件?

答:Dubbo 核心组件如下:

Provider:服务提供方

Consumer:服务消费方

Registry:服务注册与发现的注册中心

Monitor:主要用来统计服务的调用次数和调用时间

Container:服务的运行容器

3.Dubbo 有哪些负载均衡策略?

答:Dubbo 负责均衡策略如下:

随机负载均衡(Random LoadBalance):按权重设置随机概率,在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重;

轮询负载均衡(RoundRobin LoadBalance):按公约后的权重设置轮询比率,存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上;

最少活跃调用数负载均衡(LeastActive LoadBalance):使用最少活跃调用数,活跃数指调用前后计数差;

哈希负载均衡(ConsistentHash LoadBalance):使用哈希值转发,相同参数的请求总是发到同一提供者。

负载均衡配置如下 :

服务端服务级别

<dubbo:service interface="xxx" loadbalance="roundrobin" /> 客户端服务级别

<dubbo:reference interface="xxx" loadbalance="roundrobin" /> 服务端方法级别

<dubbo:service interface="xxx"> <dubbo:method name="xxx" loadbalance="roundrobin"/> </dubbo:service> 客户端方法级别

<dubbo:reference interface="xxx"> <dubbo:method name="xxx" loadbalance="roundrobin"/> </dubbo:reference> 4.Dubbo 不支持以下哪种协议?

A:dubbo://

B:rmi://

C:redis://

D:restful://

答:D

题目解析:restful 一直编程规范,并不是一种传输协议,也不被 Dubbo 支持。

5.Dubbo 默认使用什么注册中心,还有别的选择吗?

答:推荐使用 ZooKeeper 作为注册中心,还有 Nacos、Redis、Simple 注册中心(普通的 Dubbo 服务)。

6.Dubbo 支持多注册中心吗?

答:Dubbo 支持同一服务向多注册中心同时注册,或者不同服务分别注册到不同的注册中心上去,甚至可以同时引用注册在不同注册中心上的同名服务。

多注册中心注册:

<dubbo:application name="world" /> <dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" /> <dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" default="false" /> <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" registry="hangzhouRegistry,qingdaoRegistry" /> 7.Dubbo 支持的连接方式有哪些?

答:Dubbo 支持的主要连接方式有:组播、直连和 ZooKeeper 等注册中心。

① 组播方式 ,不需要启动任何中心节点,只要广播地址一样,就可以互相发现。

java分布式架构面试题

file

提供方启动时广播自己的地址 消费方启动时广播订阅请求 提供方收到订阅请求时,单播自己的地址给订阅者,如果设置了 unicast=false,则广播给订阅者 消费方收到提供方地址时,连接该地址进行 RPC 调用 组播受网络结构限制,只适合小规模应用或开发阶段使用。组播地址段:224.0.0.0 ~ 239.255.255.255

配置

<dubbo:registry address="multicast://224.5.6.7:1234" /> 或

<dubbo:registry protocol="multicast" address="224.5.6.7:1234" /> 为了减少广播量,Dubbo 缺省使用单播发送提供者地址信息给消费者,如果一个机器上同时启了多个消费者进程,消费者需声明 unicast=false,否则只会有一个消费者能收到消息;当服务者和消费者运行在同一台机器上,消费者同样需要声明 unicast=false,否则消费者无法收到消息,导致 No provider available for the service 异常:

<dubbo:registry address="multicast://224.5.6.7:1234?unicast=false" /> 或

<dubbo:registry protocol="multicast" address="224.5.6.7:1234"> <dubbo:parameter key="unicast" value="false" /> </dubbo:registry> ② 直连方式 ,注册中心本身就是一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。

<dubbo:registry protocol="zookeeper" address="N/A" file="./.dubbo-platform"/> 将 Simple 注册中心暴露成 Dubbo 服务:

<dubbo:application name="simple-registry" /> <dubbo:protocol port="9090" /> <dubbo:service interface="org.apache.dubbo.registry.RegistryService" ref="registryService" registry="N/A" ondisconnect="disconnect" callbacks="1000"> <dubbo:method name="subscribe"><dubbo:argument index="1" callback="true" /></dubbo:method> <dubbo:method name="unsubscribe"><dubbo:argument index="1" callback="false" /></dubbo:method> </dubbo:service> 引用 Simple Registry 服务:

<dubbo:registry address="127.0.0.1:9090" /> 或者:

<dubbo:service interface="org.apache.dubbo.registry.RegistryService" group="simple" version="1.0.0" ... > 或者:

<dubbo:registry address="127.0.0.1:9090" group="simple" version="1.0.0" /> 适用性说明:此 SimpleRegistryService 只是简单实现,不支持集群,可作为自定义注册中心的参考,但不适合直接用于生产环境。

③ ZooKeeper 注册中心 ,Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。

以上就是“2023年IT企业攻略,Java分布式架构面试题”,你能回答上来吗?如果想要了解更多的Java面试题相关内容,可以关注动力节点Java官网。