Dubbo面试必问面试题

初级
1.什么是RPC?RPC框架相对EJB调用的好处?
a.支持注册中心,使得消费者和提供者位置彼此透明,不必显式的区分本地调用和远程调用。
b.支持多接口、多服务、多依赖。
c.支持集群,能够处理集群容错、负载均衡、节点动态扩展(CAP里面的P)等。
D.EJB只能运行在weblogic ,websphere这些web服务器
E.redis实现的是AP, zookeeper实现的是CP
2.什么是SOA?你知道哪些SOA解决方案?
SOA是一种开发思想,是一个标准,你可以对比AOP去理解,产品有Dubbo,springcloud。
ORM,对象关系映射,具体的产品有hibernate,spring data jpa。
3. 什么是分布式部署?
分开做事,分布式是个工作方式。
4. 什么是集群部署?
多台机器,共同做事,集群是个物理形态,
5. 描述一下基于注册中心的分布式架构?
Dubbo的工作原理 那个图
6. 上述架构中注册中心的作用是什么?
用一句话概括,注册中心的主要作用是协调各个服务。所谓协调,包括接收provider的注册、接收consumer的请求、将consumer请求的目标服务的地址和令牌下发给consumer,还包括provider和consumer集群节点的动态管理,即宕机剔除、宕机恢复等。
7. provider在启动时都做了些什么?
初始化各个容器,包括spring,jetty,log4j.另外,还要把自己在spring.xml中配置的服务转换成URL提交给注册中心。可以通过dubb-admin查看这些URL.
8. consumer在请求时都做了些什么?
根据要请求的服务名称到注册中心发起请求,得到注册中心回复给的服务地址和令牌等信息,然后去连接该服务地址。网络传输的本质就是IO,所以provider要将结果序列化,即把对象转换成流。
9.完整描述基于dubbo+zookeeper的请求应答过程?
10.描述分布式开发中的子工程之间的依赖关系?
11.什么是长连接?长连接如何维持节点之间的通信?
是通过心跳包维持长连接的。好处:适合频繁但是每次请求数据量比较小的操作。
12. 什么是短连接?和长连接有什么区别?谈谈各自的好处?
https://www.cnblogs.com/xujiming/p/5448721.html?tdsourcetag=s_pcqq_aiomsg)
短连接不需要心跳,任务完成后断开连接。好处:适合不频繁但是能处理每次大数据量请求。
13.长连接适合什么场景?短连接呢?
14.dubbo和zookeeper默认的端口号分别是多少?
Dubbo 20880
Zookeeper 2181
15. dubbo支持哪些类型的注册中心?
Zookeeper(推荐) redis simple multicast
16. dubbo支持哪些通信协议?
Dubbo(推荐) rmi hessian http webservice reids memcached thrift rest
17. dubbo协议是基于什么协议的?
Tcp
18. dubbo协议适合传递体积较大的文件吗?
不适合, dubbo 默认采用长连接,长连接不适合传输大数据文件
19. 如何启动zk?如何查看zk的状态?
启动:./zkServer.sh start
查看状态: ./zkServer.sh status
20. dubbo提供了哪些可视化管理工具?
Dubbo-admin zkui
21. dubbo使用哪一个标签来暴露一个服务?(dubbo-provider.xml)
<dubbo:service interface=“com.xxx.basic.manage.service.OrganizationService” ref=“organizationService” timeout=“10000”/>
22. dubbo使用哪一个标签来连接注册中心?
<dubbo:registry protocol=“zookeeper” address="${dubbo.registry.address}"/>
23. dubbo使用哪一个标签来引用一个服务?
<dubbo:reference interface=“com.xxx.basic.manage.service.SysRoleService” id=“sysRoleService” check=“false” url=“dubbo://localhost:20880”/>
24. 描述dubbo:provider标签的作用?
服务提供者缺省值配置。对应的配置类: com.alibaba.dubbo.config.ProviderConfig。同时该标签为 dubbo:service 和 dubbo:protocol 标签的缺省值设置。
25. 描述dubbo:protocol的作用?
配置协议信息
26.描述timeout的作用?
需要注意一般timeout建议声明在provider中。
27. 描述retries的作用?
retries声明调服务接口的方法时重试的次数,默认值是2,不包括第一次请求。如果担心出现重复写入可以将retries设置成0.
28. 描述dubbo:application标签name属性的作用?
配置当前服务的应用名
29.dubbo.properties文件可以取代spring.xml配置吗?
可以取代spring.xml,也可以同时存在。如果同时存在,第一个仍然先读dubbo.properties,然后再读spring.xml,如果发现配置有冲突的话以spring.xml为准。
30. 描述一下属性配置的优先级?
1)xml>properties
2)接口配置>全局配置
3)方法配置>接口配置
4)Consumer>provider
中级

  1. pojo中的类为什么必须实现序列化接口?
    因为结果从网络传输的过程是IO化的过程,需要将对象转成流传输。在consumer收到结果后要对流进行反序列化。序列化是对象的持久化技术。
  2. 提供者是无状态的,描述一下什么是无状态?
    无状态,即下次再通信的时候,不需要知道是不是跟上次通信的是同一个对象。
    http是无状态的,为了解决无状态问题发明了session,cookie,token.
    无状态的是组件特别适合容错。
  3. 如果不用注册中心或者注册中心宕机服务还有没有办法继续?
    注册中心缓存技术。
  4. dubbo连接注册中心和直连的区别 ?(http://www.wityx.com/post/265_1_1.html)
    最大的区别是请求有没有经过注册中心。在使用令牌的情况下,不支持直连。
  5. dubbo在安全方面可以用哪些方式解决?
    Token, 白名单(程序级别,服务器级别),依赖zookeeper,令牌机制
    6.consumer的spring.xml中只配置了zookeeper,它并不知道provider在哪里,哪个provider为它服务。对吗?对,因为有注册中心做协调。
    7.一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。 对吗?对。
    8.当一个provider恢复服务的时候,会被自动注册注册到注册中心,并且consumer端也会自动连接上该provider的dubbo服务,对吗? 对
    9.consumer不去检查提供者提供的服务是否可用,应如何设置?(以下方式配置)

Check=”false”当provider端的spring.xml配置的服务是懒加载的时候需要设置check=false. 另外,出现循环依赖的时候。
9. 描述RPC同步调用和异步调用的区别?(以下方式配置)

同步调用:默认情况,同步调用过程A>B>C,按照代码顺序,当A执行完毕返回结果后B才能被执行,以此类推。
异步调用:async=true来设置异步调用。A,B,C3个方法,代码顺序也是A,B,C
如果是异步调用则A/B/C可同时执行。即在A没有返回结果执行(或者说在A还没有运行完之前B就可以执行),以此类推。
假如A需要5秒完成,B需要3秒,C需要8秒,如果是同步调用则总消耗16秒,如果是异步则需要8秒。异步永远不会等待返回结果下面的程序就可以往下执行。
10. 多注册中心情况下,如何指定某一个服务使用特定的注册中心?
dubbo:registry
11. 描述结果缓存,如何实现?(以下方式配置)

结果缓存,缓存的内容是远程方法调用的结果。Spring.xml配置。
12. 描述注册中心缓存,如何实现?

注册中心缓存,缓存的内容是注册中心中服务的地址等。Spring.xml配置。
13. 如何传递隐式参数?注意事项?
Rpccontext.getContext().setAttachment(“token”,”aaa”);
注意不要使用保留字作为自定义的key值。如果使用了保留字,则系统配置会覆盖自定义内容。
14. 如何控制服务端的线程并发处理量?

服务端的 Executes 属性和actives属性
15. 如何控制消费端的线程并发请求量?

客户端的loadbalance属性和 actives属性
17.描述dubbo的令牌机制?
令牌的产生者:provider
令牌的保存者:zookeeper
18. 假定知道令牌值,直连模式下如何突破令牌限制?
Rpccontext.getContext().setAttachment(“token”,”aaa”);
19. 什么是优雅停机?
提供方:得到关闭命令后,停止接收新的请求,完成现有的请求后再关机,如果超过了规定的时间,不管有没有完成剩下的请求,都执行关机命令。
消费方:得到关闭命令后,停止发送新的请求,,,,,。
20. 如何实现优雅停机?
使用dubbo的启动容器来启动provider才可以实现优雅关机。自己写的启动类或者发布到tomcat启动都不可以实现优雅停机。见com.alibba.dubbo.rpc.Main。
21. dubbo服务容器有哪些?各个的作用?
服务容器分为内置的,还可以自定义扩展。spring容器,默认必须有并且会自动启动。jetty容器,它用来启动jetty。Log4j容器,它用来初始化log4j.
22. 如何在dubbo的provider中使用log4j?

  1. 借助log4j容器实现,在dubbo.properties中配置级别、日志路径即可。
    
  2. classpath下配置一个log4j.properties文件也可以。
    23.描述dubbo-monitor的作用?
    dubbo-monitor和dubbo-admin都是dubbo提供的可视化管理工具,但是最大的区别:monitor是一个provider,而admin只是一个web工程。我们业务的provider和consumer每个一分钟给monitor发送一次信息,这些信息包括了这1分钟内的调用和情况,然后由monitor生产各种报表。
  1. 以provider为例,描述dubbo集群的容错策略?
    容错策略:failover,failfast,failsafe。注意failover跟reties连用的时候,如果是写操作容易出现重复写。
  2. 以provider为例,集群的负载均衡策略?
    负载均衡:random,robin,.
    注意:跟nginx中的负载均衡最大的区别,dubbo的均衡侧率中跟权重有关。
    每一个产品,都有各自特有的策略,并不是全天下的负载均衡都一样。
  3. 描述启动时检查的作用?
    Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check=“true”。
    27.除了properties和xml配置dubbo外,你还知道哪些配置方式?
    注解、写程序(API).
    subject.isPermsion(“sutdent:list”)====>用spring.xml配置表示:
    /studentlist.jsp=perms[“student:list”]
  4. zookeeper集群的运行条件?
    最少在zoo.cfg中配置3个节点构成并且至少有一半以上节点是运行状态。例如:3台机器,集群要运行,至少启动2台。
  5. zookeeper集群容错策略?
    leader的选举,leader处理写操作,并且一个集群只有一个leader,因为只有一个leader从而保证了一致性。
  6. 如何使用dubbo中的自定义过滤器?
    1)实现filter接口
    2)com.alibaba.dubbo.rpc.Filter声明过滤器
    3)使用过滤器——spring.xml中通过filter属性配置,filter的值必须跟声明的key值一致。

高级

  1. RPC 异常处理跟本地调用的异常处理有什么不同吗?
    本地调用:并不是在同一台机器上就是本地调用。 本地调用的返回值不需要序列化。
    a.本地调用一定会执行,而远程调用则不一定,调用消息可能因为网络原因并未发送到服务方。
    b.本地调用只会抛出接口声明的异常,而远程调用还会跑出 RPC 框架运行时的其他异常。
    c.业务异常表明服务方已经执行了调用,可能因为某些原因导致未能正常执行,而 RPC 运行时异常则有可能服务方根本没有执行.
    D.rpc调用一般情况下,消费者和提供者没有在同一台虚拟机。
    2.RPC调用和本地调用的性能比较?哪些场景更适合RPC调用?
    单纯比较的话,本地调用的效率肯定比RPC高。那么,为什么还要用RPC呢?
    第一,分模块,团队里面的人有了分工,提高开发效率。
    第二,方便部署,RPC将工程细分,出问题的时候比较容易确定那个模块。
    第三,增加可用性,因为现有的技术有瓶颈。
    RPC存在非业务之外的消耗,例如网络传输需要时间跟业务计算的时间比例比较小则PRC调用比较划算。
  2. 谈谈在实际应用中,接口的设计原则和spring.xml的配置原则?
    1)尽力避免相互依赖
    2)参数传递的内容简单一些,不要传大数据;返回值更切合需求一些。
    3)同步异步
    4)读写分离,即将读和写的方法声明到不同的接口,然后针对不同的接口实行不同的容错策略。
    5)接口粒度要设计的粗一些,尽力一个事务不要拆分多个方法。例如:如果操作主子表,最好在一个方法完成,不要分2个方法完成。另外,当在集群条件下不同的方法可能会调用不同的provider,从而导致一个连接请求了多个provider来执行,可能造成业务数据混乱。最后,dubbo不支持分布式事务,换句话说,dubbo无法保证在分布式事务的情况下,结果的最终一致性。
    6)迭代(升级)的时候,如果一些接口不再需要,也不要删除,即只增不减。pojo里面的字段也遵循只增不删。
  3. 如果工程服务和客户端情况较复杂,如何升级dubbo的应用系统比较稳妥?
    客户端情况较复杂:例如pc,app, app又分安卓,苹果,又分不同版本,需要兼容各种情况。在这种情况下,要做集群,先升级一半,再升级另外一半。
  4. 如果你是项目经理,预算一定的情况,如何安排有限的资源发挥最高的可用性?
    有限的资源:例如有限制的带宽,有限的ECS,有限的CPU资源,有限的内存。
    最好的情况,3台做zookeeper集群,每一个ZK节点都分布到不同的物理机,provider集群节点也在不同的物理机。购买ECS的时候,在预算一定的情况下,要多买几台普通的ECS不要购买1台高配置的ECS.
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Angzush

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

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

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

打赏作者

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

抵扣说明:

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

余额充值