当前位置: 首页 > 图灵资讯 > 技术篇> 【图灵干货】java高级教程第十八节:dubbo+zk面试高频问题

【图灵干货】java高级教程第十八节:dubbo+zk面试高频问题

来源:图灵教育
时间:2021-11-26 13:24:27

dubbo+zk面试高频问题

【面题】-Dubbo支持的协议**

  dubbo(缺省):单长连接和NIO异步通信,适合大并发小数据量的服务调用,并且用户远远大于提供商。TCP,异步,Hessian序列化,rmi:rmi:使用JDK标准的rmi协议实现,传输参数和返回参数对象需要实现Serializable接口;采用java标准的序列化机制,使用阻塞式短连接,传输不同大小的分组,用户与提供商的数量相同,可传递文件,TCP传输协议。多种短连接,TCP协议传输,同步传输,适合远程服务调用和rmi互操作。对于低版本的Common-Collections包,Java序列化有一个安全漏洞;

  webservice:基于WebService的远程调用协议,集成CXF实现,提供与本地WebService交互。基于HTTP传输、同步传输、系统集成、跨语言调用等多种短连;http:基于Http表单提交的远程调用协议通过Spring的HttpInvoke实现。多种短连接,HTTP传输协议,传入的参数大小混合,提供商数目超过用户,并且需要为应用程序和浏览器JS调用;

  hessian:集成的Hessian服务,基于HTTP通信,使用Servlet公开服务,当Dubbo将Jetty嵌入服务器时默认的实现,提供与Hession服务互操作。多种短接,HTTP同步传输,Hessian序列化,传入参数大,提供者大于使用者,提供者压力大,可传送文件;

  memcache:基于memcached实现的RPC协议。

  redis:基于redis实现的RPC协议。

  【面题】-dubbo建议使用哪些协议?采用此协议的优点和缺点**

  入出参数的数据包较小(建议小于100K),用户数量大于提供商的数量,单个用户不能将提供商压缩,尽量不要使用dubbo协议传输大文件或超大字符串。

  【面题】-设置dubbo超时值**

  使用timeout属性配置超时,可以将服务提供者和使用者进行配置,以便尽可能地将其配置到服务提供者中,因为服务提供者将更清楚地了解他们所提供的服务状况的超时不要设置过大,这将影响并发性能问题。

  【面题】-dubbo自动重试机制**

  调用服务失败时,dubbo将默认重试2次。Dubbo的路由机制,可以将超时的请求发送给其他计算机,而非本地尝试,因此dubbo的重试机制也在某种程度上保证了服务质量。

  【Feature】-dubbo支持的注册表**

  Multicast注册中心。

  Multicast注册中心无需中心节点,只需广播地址,即可进行服务注册和发现。实现基于网络的多播传输。

  Zookeeper注册中心。

  以Zookeeper的分布式协调系统实现为基础,利用Zookeeper的watch机制来完成数据的更改。

  redis注册表。

  在redis实现的基础上,用key/Map存储,用住key存储服务,Map存储服务URL,value服务过期。根据redis的发布/订阅模式通知数据更改;

  【Getty】-dubbo集群的负载平衡策略**

  随机

  根据权值设定随机概率。某一截面的碰撞概率较高,但分布越均匀,且按概率重后也更均匀,有利于动态平衡。(可在dubbo控制台配置重量)

  轮循

  按照约定后的权重设置轮循比率。提供程序累积请求速度较慢的问题,例如:第二个计算机速度慢,但是没有挂起,当请求转到第二台时就卡住了,过长时间之后,所有请求都卡在第二台。

  最低活动调用的数目。

  活动数相等的随机数,活动数前后计数差异。缓慢的提供程序接收到较少的请求,因为越慢的提供程序所产生的调用之前和之后的计数差异越大。

  稳定的Hash。

  将始终向同一个提供程序发送相同参数的请求。将某个提供程序挂起后,原来发送给那个提供程序的请求基于虚拟节点,平摊给其他提供商,而不会造成剧烈的变化。

  【面题】-dubbo支持何种序列化方法?**

  dubbo序列化:阿里还没有为高效的java序列化实现进行开发,阿里不推荐在产品中使用。

  hessian2序列化(缺省建议):hessian是一种有效的跨语言二进制序列化方法。但是实际上并非在这里进行原始的hessian2序列化,而是阿里修改的hessianlite,这是dubboRPC默认支持的顺序。

  json序列化:目前有两种实现方法,一种是通过阿里的fastjson库,另一种是在dubbo中实现了简单的json库,但是它的实现方法都不太成熟,并且json这种文本序列化的性能通常不如上面两个二进制序列。

  java序列化:主要是使用JDK自带的Java序列化实现,性能非常差。

  【面题】-注册表发生故障,服务间能否继续通信**

  能够进行通信,在启动dubbo时,用户将从zk中提取诸如已注册生产者的地址接口等数据,缓存在本地。在每一次调用中,都会根据本地存储的地址调用;但是,只有在你没有添加新服务或者在您调用新服务时才会被调用。另若服务提供商全部停机,服务消费者将无法使用,且无限次连等待服务恢复;

  【面题】-dubbo和spring的关系**

  Dubbo采用了完全Spring的方式,通过透明的访问应用程序,不需要API的干扰,只需要使用Spring来装载Dubbo。

  【面题】-Dubbo使用了哪些沟通框架?**

  NIONetty框架。

  【面题】-Dubbo容错架构**

  失败分类(默认):

  在发生故障时自动切换失败,重试其他服务器。一般用于读取操作,但是重试将导致较长的延迟。

  FailfastCluster

  迅速失败,只启动一次呼叫,立即错误报错。经常被用来执行非幂等写操作,例如添加记录。

  FailsafeCluster。

  故障安全,发生异常时,直接忽略。它经常被用来写审计日志。

  FailbackCluster。

  故障自动恢复,后台记录故障请求,重新发送时间。常用于消息通知操作。

  ForkingCluster。

  同时调用多个服务器,一次成功就返回。对于实时性要求较高,但是对数据进行处理却会产生浪费。可以用forks="2"设置最大并行数。

  BroadcastCluster。

  转播呼叫所有提供程序,并一个接一个地呼叫,任何一个错误报错。一般用来通知所有提供商,例如本地资源信息,如缓存或日志。

  【面题】-Dubbo与SpringCloud的关系?**

  Dubbo是SOA时代的产物,其重点集中在服务调用、流量分配、流量监测和终止交易。SpringCloud诞生于微服务体系结构时代,考虑到微服务管理的所有方面,另外由于Spirng的支持,SpirngBoot的优势在于两个框架在开始时并不一致,Dubbo定位服务管理,而SpirngCloud是一个生态系统。

  主要差异:Dubbo底层是NIO框架,使用Netty等,基于TCP协议传输,可以在Hession中实现RPC通信。

       图灵学院成立于2017年7月15日,现阶段提供 计算机基础原理、JavaSE核心、Java后端、 面试必备算法、python核心编程、数据分析、web 开发题、人工智能等专题课程,为想学习Python的学员提供优质的培训服务,帮助学员掌握更加全面的技能,是计算机人员职场中提职加薪的首选。
       免费java架构师视频学习地址:免费视频