Dubbo面试题

1.Dubbo 是什么?

简历:

XX项目

技术栈:Spring + Dubbo +Mybatis

Dubbo是阿里巴巴开源的分布式,高性能的透明化的RPC服务框架,提供服务自动注册,自动发现等高效服务治理方案,可以和Spring框架可以无缝衔接。

2.Dubbo的由来

你们的项目为什么会使用Dubbo做为你们的分布式框架的技术选型。开场方式 背景。

标准回答:

早期我们的项目是单体架构,后续随着我们的用户量的增长,项目功能的增加,老的项目耦合严重,故障级联的问题,我们考虑使用分布式架构对于我们的项目进行重构,我们的Dubbo做为一款分布式,高性能的透明化的RPC服务框架,提供服务自动注册,自动发现等高效服务治理方案,可以和Spring框架可以无缝衔接。

而且我们当时对比了市面上的新浪的Motan,以及alibaba的Dubbo,还有谷歌的GRPC,当当的Dubbox,就开源度以及生态而言,我们最终选择了Dubbo做为我们的分布式解决方案。

3.Dubbo的主要特性:

Dubbo的新版本当中有非常多的支持分布式特性的一些功能:

  • 面向接口代理的高性能的RPC调用:提供了高性能的基于代理的远程调用能力,服务以接口为粒度,屏蔽了底层远程调用的细节. @Reference @DubboReference <dubbo:Reference....
  • 智能的负载均衡的能力:内置了多种负载均衡策略,智能的感知下游节点的健康状况,显著的减少调用延迟,提高系统吞吐。
  • 服务的自动注册与发现:支持我们多种注册中心,实现服务实例的上下线感知

  • 高度可拓展能力:遵循微内核+插件的设计原则,所有的核心能力,都会被设计为拓展点,平等的对待内置实现还是第三方的实现
  • 运行期流量调度:内置条件,脚本等路由策略,通过配置不同的路由规则,实现灰度发布,同机房优先等功能。
  • 可视化的服务治理以及运维:提供了丰富的服务治理工具,运维工具,随时可以查询服务的元数据,服务健康状态,调用统计,实时的下发路由策略,调整配置参数。

4.Dubbo默认使用什么协议

Dubbo缺省协议是dubbo协议,采用的是单一长连接和NIO异步通信的方式,适用于小数据量以及大并发的服务调用,消费者远大于提供者,Dubbo的传输层协议TCP,异步的,使用Hessian序列化

5.Dubbo 支持哪些协议,每种协议的应用场景,优缺点?

  • dubbo:Dubbo缺省协议是dubbo协议,采用的是单一长连接和NIO异步通信的方式,适用于小数据量以及大并发的服务调用,消费者远大于提供者,Dubbo的传输层协议TCP,异步的,使用Hessian序列化
  • rmi(remote Method invocation):采用的是我们的JDK标准的rmi的实现,传输以及返回参数的时候都需要实现Serializable接口,使用java的标准的序列化机制,使用的是阻塞式的短连接,传输数据包可以大小混合,并且我们的消费者与提供者可以差不多数量,可以传文件。传输协议TCP,同步传输,适用于常规的远程服务调用以及rmi的相互操作。序列化安全漏洞。
  • webservice:基于 WebService 的远程调用协议,集成 CXF 实现,提供和原生 WebService 的互操作。多个短连接,基于 HTTP 传输,同步传输,适用系统集成和跨语言调用;
  • http:基于 Http 表单提交的远程调用协议,使用 Spring 的 HttpInvoke 实现。多个短连接,传输协议 HTTP,传入参数大小混合,提供者个数多于消费者,需要给应用程序和浏览器 JS 调用;
  • hessian:集成 Hessian 服务,基于 HTTP 通讯,采用 Servlet 暴露服务,Dubbo 内嵌 Jetty 作为服务器时默认实现,提供与 Hession 服务互操作。多个短连接,同步 HTTP 传输,Hessian 序列化,传入参数较大,提供者大于消费者,提供者压力较大,可传文件;

RPC与HTTP的区别

RPC(remote proedure call):Dubbo,Grpc,Thrift

RPC与HTTP的级别,定位的区别

6.如何选择RPC与Rest风格的HTTP

RPC:远程方法调用,远程直接调用你的方法,可以选择Http做为我们的最终协议。Http2.0,

Rest风格的HTTP:Rest风格,可读性好,跨语言,得到防火墙的支持。异构设计,开发快。

缺陷:效率低,带来大量的无用信息。

如果你的项目不是那么大,并且希望快速开发,那么你使用Rest风格的HTTP,但是如果你的公司牛人很多,建议你使用RPC,你的项目比较大,对于网络传输的速率要求比较严格,那么你也可以使用RPC。

7.Dubbo与Spring Cloud的区别

Spring Cloud Netfilx Spring Cloud Alibaba

开发效率快 网络传输速度慢 拓展性不强

Spring Cloud Alibaba

Dubbo是二进制传输 ,占用的带宽会更小

Spring Cloud Rest风格的HTTP 消耗很多

dubbo的开发难度大

Spring Cloud

Dubbo : Reids ZK .......

Spring Cloud :遵循Spring Cloud 规范的注册中心

8.Dubbo一般使用什么注册中心?还有别的选择吗?

Dubbo默认的注册中心是哪个,还有没有什么更好的选择

Zookeeper CP

consul go语言写的,跟docker完美兼容

Eureka AP Peer to Peer

Redis 不推荐

ectd 不推荐

nacos AP CP 最好的

9.为什么需要服务治理?

1.过多的服务 ,Url配置困难

2.负载均衡分配节点 ,在压力过大的情况下,我们是需要部署集群的

3.服务依赖混乱,启动顺序不清晰

4.过多的服务导致性能指标分析难度大,需要监控。

10.服务治理手段

服务注册:服务提供者注册到注册中心服务端

服务续约:服务提供者需要给到注册中心服务端一个信号,告诉他,我自身的状态(心跳)。

服务获取:消费者去注册中心服务端获取服务提供者列表,并且缓存到本地

服务调用:我通过我们从注册中心服务端获取到的服务提供者信息,调用服务提供者

服务下线:服务提供者从注册中心服务端取消注册自己,从而使消费者拉取不到他

失效剔除:服务续约是发送心跳,但是心跳异常之后,我们需要根据规则对服务提供者进行剔除

自我保护:我网不好,那么这个时候我会制定规则,防止失效剔除的异常剔除情况出现,保护注册中心的服务提供者列表

服务同步:注册中心是集群,那么这个时候就有可能出现,服务提供者注册到A上,而消费者消费的是B,那么这个时候A跟B需要同步注册信息。

动态感知:一般情况下都是通过观察者模式,服务启动,会有很多的事件(EVENT)进行发布,那么这个时候我们的注册中心会去监听其中的一些启动事件,那么我们就能够感知我们的服务启动。同时进行自动注册流程。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务