Dubbo面试常见问题

1、dubbo是什么?html

dubbo是⼀个分布式服务框架,提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理方案。说白了其实dubbo就是一个远程调用的分布式框架。web

2、dubbo的核心服务是什么?redis

Dubbo的做用以及介绍数据库

特性 描述
透明远程调用 就像调用本地方法同样调用远程方法;只需简单配置,没有任何API侵入;
负载均衡机制 Client端LB,可在内网替代F5等硬件负载均衡器;
容错重试机制 服务Mock数据,重试次数、超时机制等;
自动注册发现 注册中心基于接口名查询服务提 供者的IP地址,而且可以平滑添加或删除服务提供者;
性能日志监控 Monitor统计服务的调用次调和调用时间的监控中心;
服务治理中心 路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等手动配置。
自动治理中心 无,好比:熔断限流机制、自动权重调整等;apache

3、看一下dubbo架构图api

 

 

4、服务提供者暴露一个服务的详细过程:缓存

若是你仔细观察dubbo的启动日志你会发现,dubbo的provider启动主要是如下几个过程安全

 

1.首先provider启动时,先把想要提供的服务暴露在本地。服务器

2.而后再把服务暴露到远程。网络

3.启动netty服务,创建长链接。

4.链接到注册中心zk上。

5.而后监控zk上的消费服务。

 

5、服务消费者消费一个服务的详细过程

 

 

首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例。接下来把Invoker转为客户端须要的接口。

 

6、下面来看本地暴露于远程暴露的区别:

本地暴露是暴露在本机JVM中,调用本地服务不须要网络通讯.

远程暴露是将ip,端口等信息暴露给远程客户端,调用远程服务时须要网络通讯.

 

7、什么状况下适用dubbo协议,何时适用rmi协议?

Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,可是dubbo协议是官网推荐使用的,dubbo 缺省协议是dubbo协议,采用单一长链接和 NIO 异步通信,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的状况。反之,Dubbo 缺省协议不适合传送大数据量的服务,好比传文件,传视频等,除非请求量很低。RMI协议采用阻塞式(同步)短链接和 JDK 标准序列化方式。适用范围:传入传出参数数据包大小混合,消费者与提供者个数差很少,可传文件。后面会对其余几种协议详细介绍,这里就不赘述了。

 

8、Dubbo主要的配置项有哪些,做用是什么?

provider配置

<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="hello-world-app" />

<!-- 使用multicast广播注册中心暴露服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />

<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />

<!-- 声明须要暴露的服务接口 -->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />

<!-- 和本地bean同样实现服务 -->
<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />

consumer配置

<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方同样 -->
<dubbo:application name="consumer-of-helloworld-app" />

<!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />

<!-- 生成远程服务代理,能够和本地bean同样使用demoService -->
<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />

9、Dubbo有几种容错机制

什么是容错机制?容错机制指的是某中系统控制在必定范围的一种容许或包容犯错状况的发生,举个简单的例子,咱们在电脑上运行一个程序,有时候会出现无响应的状况,而后系统回弹出一个提示框让咱们选择,是当即结束仍是继续等待,而后根据咱们的选择执行对应的操做,这就是“容错”。

   在分布式架构下,网络,硬件,应用均可以发生故障,因为各个服务之间可能存在依赖关系,若是一条链路中的某一个节点出现故障,将会致使雪崩效应。为了减小某一个节点故障的影响范围,因此咱们才须要去构建容错服务,来优雅的处理这种中断的响应结果

1.failsafe 失败安全,能够认为是把错误吞掉(记录日志)

2.failover(默认)  重试其余服务器;retries(2)重试的次数,默认为2次

3.failback   失败后自动恢复

4.forking forks. 设置并行数

5.Broadcast 广播,任意一台报错,则执行的方法报错,经过cluster方式,配置制定的容错方案

 

10、dubbo的服务降级

降级的目的是为了保证核心服务可用

降级能够有几个层面的分类:自动降级,人工降级;按照功能能够分为:读服务降级和写服务降级;

1.对一些非核心服务进行人工降级,在大促以前经过降级开关关闭那些推荐内容,评价等对主流程序没有影响的功能

2.故障降级,好比调用的远程服务挂了,网络故障,或者RPC服务返回异常。那么能够直接降级,降级的方案好比设置默认值,采用兜底数据(系统推荐的行为广告挂了,能够提早准备静态页面作返回)等等

3.限流降级,在秒杀这种流量比较集中而且流量特别大的状况下,由于突发访问量特别大可能致使系统支撑不了。这个时候能够采用限流来限制访问量。当达到阈值时,后续的请求被降级,好比进入排队页面,好比跳转到错误页面(活动火爆,请稍后重试)

 

Dubbo的降级方式:Mock

实现步骤

1.在client端建立一个testmock类,实现对应的IGphello的接口(须要对哪一个接口进行mock,就实现哪一个)名称必须以mock结尾

2.在client端的xml配置文件中,添加以下配置,增长一个mock属性指向建立的testmock

3.模拟错误(设置timeout)模拟超时异常,运行测试代码便可访问到testmock这个类,当服务端故障解除之后,调用过程将恢复正常

 

11、dubbo的优先级配置

配置优先级别

1.以timeout为例,显示了配置的查找顺序,其余retries,loadbalance等相似。

(1)方法级优先,接口级次之,全局配置在次之

(2)若是级别同样,则消费方优先,提供方次之

(3)其中,服务提供方配置,经过URL经由注册中心传递给消费方

2.建议由服务提供方设置超时,由于一个方法须要执行多长时间,服务提供方更清楚,若是一个消费方同时引用多个服务,就不须要关心每一个服务的超时设置。

dubbo高可用之zookeeper宕机、Dubbo直连、负载均衡、服务降级、集群容错

相关文章
相关标签/搜索