Dubbo 面试题(二)

1. 简述Dubbo默认使用什么注册中心 ?

Dubbo默认使用的注册中心是Zookeeper。Zookeeper是Apache Hadoop的子项目,是一个树型的目录服务,支持变更服务,具有较高的工业强度,适用于生产环境。在Dubbo中,服务提供者在启动时,会将自己的URL地址注册到Zookeeper的指定目录下;服务消费者在启动时,会订阅这些目录以获取服务提供者的地址列表;而监控中心也会通过Zookeeper来获取服务的调用数据。因此,Zookeeper在Dubbo中扮演着非常重要的角色,实现了服务的注册、发现和监控功能。

需要注意的是,虽然Dubbo推荐使用Zookeeper作为注册中心,但它也支持其他注册中心,如Redis、Multicast和Simple等。这些注册中心各有特点,可以根据具体需求和场景进行选择。例如,Redis注册中心具有高性能和易扩展的优点,适合大型分布式系统;Multicast注册中心则通过组播的方式实现服务的发现和注册,适用于小型系统或局域网环境。在选择注册中心时,需要综合考虑系统的规模、性能需求、网络环境等因素。

2. 阐述Dubbo有哪几种配置方式?

Dubbo提供了多种配置方式,以满足不同场景和需求。以下是Dubbo的四种主要配置方式:

  1. XML配置文件方式

    • 这是Dubbo的传统配置方式,通过XML文件来定义服务提供者和服务消费者的配置信息。
    • XML文件可以包含各种配置元素,如服务接口、版本、协议、注册中心等,用于描述服务的属性和行为。
    • 使用XML配置方式,开发者可以直观地看到服务的配置信息,方便进行管理和维护。
  2. properties配置文件方式

    • 通过properties文件来配置Dubbo的服务参数。
    • 这种方式通常用于将一些常用的配置信息提取到properties文件中,使得配置更加灵活和可维护。
    • 开发者可以在properties文件中定义各种属性,然后在XML配置文件中引用这些属性,实现配置的复用和统一管理。
  3. 注解配置方式

    • Dubbo支持使用注解来配置服务,这种方式更加简洁和直观。
    • 开发者可以在服务提供者和服务消费者的接口或实现类上使用Dubbo提供的注解,如@Service(提供者)和@Reference(消费者),来定义服务的属性和行为。
    • 注解配置方式可以减少XML文件的数量,使代码更加清晰和易于阅读。
  4. API配置方式

    • 通过编程的方式,使用Dubbo提供的API进行配置。
    • 这种方式更加灵活,可以根据具体需求动态地创建和配置服务。
    • API配置方式通常用于一些复杂的场景,需要动态地调整服务参数或进行一些特殊的配置。

这四种配置方式各有特点,开发者可以根据具体的需求和场景选择适合的配置方式。在实际应用中,通常会结合使用多种配置方式,以达到最佳的配置效果。

3. 简述Dubbo推荐使用什么序列化框架 ?

Dubbo推荐使用Hessian序列化框架。Hessian是一个轻量级的、采用二进制格式传输的远程服务框架,它相对于传统的SOAP Web服务更为轻量和快速。Dubbo默认也使用Hessian作为序列化框架,这主要得益于Hessian的高效性和易用性。

然而,Dubbo也支持多种其他的序列化框架,如Java默认序列化、Kryo、FST、Protobuf、Thrift等。这些序列化框架各有特点,可以根据具体的应用场景和需求进行选择。例如,Java默认序列化简单易用,但效率相对较低;Kryo和FST则是针对性能优化过的序列化框架;而Protobuf和Thrift则是第三方开源的序列化框架,具有更广泛的社区支持和丰富的功能。

在选择序列化框架时,需要综合考虑序列化性能、兼容性、易用性等因素。对于性能敏感的应用,推荐使用Kryo或FST等高效序列化框架;对于跨语言调用的场景,可以考虑使用Protobuf或Thrift等支持多种语言的序列化框架。

总之,Dubbo的序列化框架选择非常灵活,可以根据实际需求进行配置和调整。

4. 简述Dubbo默认使用的是什么通信框架 ?

Dubbo默认使用的通信框架是Netty。Netty是一个高性能、异步的NIO框架,用于快速开发可维护的高性能协议服务器和客户端。Dubbo选择Netty作为其默认通信框架,主要是因为Netty具有出色的性能、稳定性和可扩展性,能够满足分布式系统中服务之间高效、可靠的通信需求。

在Dubbo中,Netty框架被用于实现服务提供者和服务消费者之间的远程调用。通过Netty,Dubbo可以实现基于TCP的长连接通信,支持请求/响应模式,并且具有优秀的并发处理能力。此外,Netty还提供了灵活的编解码机制,使得Dubbo可以轻松地实现自定义协议和扩展功能。

除了Netty外,Dubbo还支持其他通信框架,如Mina和Grizzly。这些框架各有特点,但在性能和稳定性方面可能略逊于Netty。因此,在大多数情况下,推荐使用Netty作为Dubbo的通信框架。

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

Dubbo提供了多种集群容错方案,每种方案都有其特定的使用场景和优势。以下是Dubbo的集群容错方案及其简述:

  1. Failover Cluster(失败自动切换):这是Dubbo的默认集群容错方案。当调用失败时,Dubbo会自动切换到其他可用的服务提供者进行重试。这种方案适用于读操作,因为读操作通常对一致性要求不那么严格。但需要注意的是,如果重试的操作是写入操作,可能会存在重复处理的风险。
  2. Failfast Cluster(快速失败):这种方案在调用失败后会立即报错,不会进行重试。它通常用于非幂等性的写操作,比如新增记录。快速失败可以避免在某个提供者实例出现故障时花费过多时间等待。
  3. Failsafe Cluster(失败安全):当调用失败时,这种方案会直接忽略错误,并返回一个默认值或空结果。它通常用于写入审计日志等操作,这些操作即使失败也不会对整体业务流程产生太大影响。
  4. Failback Cluster(失败自动恢复):这种方案会在后台记录失败的请求,并在提供者恢复正常时,自动将之前失败的请求重新发送。它适用于服务提供者故障不稳定,可能出现断断续续的情况。
  5. Broadcast Cluster(广播调用):这种方案会广播调用所有提供者,并逐个调用。它通常用于查询等要求性能高的操作,但不适用于非幂等的插入、删除等操作,因为这样会导致数据的不一致性。

默认情况下,Dubbo使用Failover Cluster作为集群容错方案。这是因为Failover Cluster在提供高可用性的同时,也能在一定程度上保证数据的一致性,尤其适用于读操作和某些对一致性要求不那么严格的写操作。然而,根据具体的业务需求和应用场景,也可以选择合适的其他集群容错方案。

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

Dubbo支持多种负载均衡策略,以满足不同场景和需求。以下是Dubbo的主要负载均衡策略及其特点:

  1. 随机(Random):这是Dubbo的默认负载均衡策略。它随机选择一个可用的服务提供者来处理请求。这种策略简单且易于实现,适用于服务提供者性能相近的情况。然而,在服务提供者性能差异较大的场景下,可能会导致性能较差的服务提供者被频繁调用。
  2. 轮询(RoundRobin):按照顺序依次调用每个服务提供者。这种策略保证了每个服务提供者都能被均匀调用,但在服务提供者性能不均的情况下,可能导致整体性能下降。
  3. 最少活跃数(LeastActive):选择当前活跃调用数最少的服务提供者。活跃调用数指的是正在处理中的请求数。这种策略能够动态地将请求分配给负载较低的服务提供者,从而提高整体性能。
  4. 一致性哈希(ConsistentHash):根据请求参数的哈希值来选择服务提供者。这种策略能够确保相同的请求总是被发送到同一服务提供者,有助于缓存数据和提高系统稳定性。但是,当某个服务提供者出现故障时,原本发往该提供者的请求可能会被转发到其他负载较重的提供者,导致性能下降。

除了以上四种主要的负载均衡策略外,Dubbo还支持加权轮询(WeightedRoundRobin)和加权随机(WeightedRandom)等扩展策略。这些策略可以根据服务提供者的权重进行负载均衡,适用于服务提供者性能差异较大的场景。

在选择负载均衡策略时,需要根据具体的业务场景和需求进行权衡。例如,在高性能场景下,可以选择轮询或随机策略;在需要保证服务稳定性的场景下,可以选择一致性哈希策略;而在服务提供者性能差异较大的场景下,可以选择最少活跃数策略或加权策略。

7. 简述Dubbo支持服务多协议吗,请详细阐述 ?

是的,Dubbo支持服务多协议。Dubbo允许配置多协议,可以在不同服务上支持不同协议或者同一服务上同时支持多种协议。

Dubbo默认使用dubbo协议,该协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。然而,除了dubbo协议外,Dubbo还支持另外8种服务暴露协议,如rmi协议、hessian协议、http协议等。这些协议各有特点,适用于不同的场景。

例如,RMI(Remote Method Invocation)协议是Java特有的远程调用协议,用于在Java虚拟机之间执行远程方法调用。Hessian协议则是一种基于HTTP的轻量级remoting on http工具,使用简单的方法提供了RMI的功能。HTTP协议则是一种常用的互联网通信协议,适用于跨语言、跨平台的远程服务调用。

在实际应用中,可以根据项目需求灵活配置协议。例如,如果需要提供跨语言的服务接口,那么可以选择HTTP或Thrift协议;如果服务调用主要发生在Java虚拟机之间,那么RMI或Hessian协议可能更合适。

此外,Dubbo还允许对传输的数据使用相应的技术进行缓存,以提高服务调用的性能。这使得Dubbo在构建高性能、可扩展的分布式服务系统时具有更大的灵活性。

总的来说,Dubbo的多协议支持功能使得开发者能够根据不同的需求和场景选择最合适的协议,从而优化服务的性能和可维护性。

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依邻依伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值