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 支持同一服务向多注册中心同时注册,或者不同服务分别注册到不同的注册中心上去,甚至可以同时引用注册在不同注册中心上的同名服务。
多注册中心注册:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<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" />
</beans>
7.Dubbo 支持的连接方式有哪些?
答:Dubbo 支持的主要连接方式有:组播、直连和 ZooKeeper 等注册中心。
① 组播方式 ,不需要启动任何中心节点,只要广播地址一样,就可以互相发现。
组播受网络结构限制,只适合小规模应用或开发阶段使用。组播地址段: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 服务:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 当前应用信息配置 -->
<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>
<!-- 简单注册中心实现,可自行扩展实现集群和状态同步 -->
<bean id="registryService" class="org.apache.dubbo.registry.simple.SimpleRegistryService" />
</beans>
引用 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官网。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习