irpas技术客

开源框架面试之Dubbo面试题_无薪法师

网络投稿 5301

文章目录 1、Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布 者和订阅者之间还能通信么?2、dubbo服务负载均衡策略?3、Dubbo在安全机制方面是如何解决的4、dubbo连接注册中心和直连的区别 1、Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布 者和订阅者之间还能通信么?

可以通信的,启动dubbo时,消费者会从zk拉取注册的生产者的地址接 口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用;注 册中心对等集群,任意一台宕机后,将会切换到另一台;注册中心全部宕机 后,服务的提供者和消费者仍能通过本地缓存通讯。服务提供者无状态, 任一台宕机后,不影响使用;服务提供者全部宕机,服务消费者会无法使 用,并无限次重连等待服务者恢复;挂掉是不要紧的,但前提是你没有增 加新的服务,如果你要调用新的服务,则是不能办到的。

2、dubbo服务负载均衡策略? Random LoadBalance

随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大 分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者 权重。(权重可以在dubbo管控台配置)

RoundRobin LoadBalance

轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求问题,比 如:第二台机器很慢,但没挂,当请求调 到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

LeastActive LoadBalance

最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。使慢的 提供者收到更少请求,因为越慢的提供者的 调用前后计数差会越大。

ConsistentHash LoadBalance

一致性Hash,相同参数的请求总是发到同一提供者。当某一台提供者挂 时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会 引起剧烈变动。缺省只对第一个参数Hash,如果要修改,请配置 <dubbo:parameter key="hash.arguments" value=H0,1H /> 缺省用160份虚拟节点,如果要修改,请配置 <dubbo:parameter key=Hhash.nodesH value="320" />

3、Dubbo在安全机制方面是如何解决的

Dubbo通过Token令牌防止用户绕过注册中心直连,然后在注册中心上管 理授权。Dubbo还提供服务黑白名单,来控制服务所允许的调用方。

4、dubbo连接注册中心和直连的区别

在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者, 这时候可能需要点对点直连,点对点直联方式,将以服务接口为单位,忽 略注册中心的提供者列表,

Failsafe Cluster

失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

服务注册中心,动态的注册和发现服务,使服务的位置透明,并通过在消 费方获取服务提供方地址列表,实现软负载均衡和Failover,注册中心返 回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推 送变更数据给消费者。服务消费者,从提供者地址列表中,基于软负载均 衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。注册 中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者 只在启动时与注册中心交互,注册中心不转发请求,服务消费者向注册中 心获取服务提供者地址列表,并根据负载算法直接调用提供者,注册中 心,服务提供者,服务消费者三者之间均为长连接,监控中心除外,注册 中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立 即推送事件通知消费者注册中心和监控中心全部宕机,不影响已运行的提 供者和消费者,消费者在本地缓存了提供者列表注册中心和监控中心都是 可选的,服务消费者可以直连服务提供者。

dubbo服务集群配置(集群容错模式) 在集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重试。 可以自行扩展集群容错策略l Failover Cluster (默认) 失败自动切换,当出现失败,重试其它服务器。(缺省)通常用于读操作, 但重试会带来更长延迟。可通过retries="2"来设置重试次数(不含第一次)。 <dubbo:service retries="2" cluster=HfailoverH/> 或: <dubbo:reference retries="2" cluster="failover"/> cluster="failover"可以不用写,因为默认就是failover

Failfast Cluster 快速失败,只发起一次调用,失败立即报错。通常用于非冨等性的写操 作, 比如新增记录。 dubbo:service cluster="failfast" /> 或: <dubbo:reference cluster="failfast" />

cluster="failfast"和把 cluster=“failover”、retries="0"是一样的效 果,retries="0"就是不重试

Failsafe Cluster 失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。 <dubbo:service cluster="failsafe" /> 或: <dubbo:reference cluster="failsafe" />

Failback Cluster

失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。 <dubbo:service cluster="failback" /> 或: <dubbo:reference cluster="failback" />

Forking Cluster 并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的 读操作,但需要浪费更多服务资源。可通过forks="2"来设置最大并行数。 <dubbo:service cluster="forking" forks="2"/>或: <dubbo:reference cluster="forking" forks="2"/>

配置

服务端服务级别

<dubbo:service interface="..." loadbalance=HroundrobinH />

客户端服务级别

<dubbo:reference interface="..." loadbalance="roundrobin" />

服务端方法级别 <dubbo:service interface="..."> <dubbo:method name="..." loadbalance />

客户端方法级别 <dubbo:reference interf ace="..."> <dubbo:method name="..." loadbalance="/>

dubbo通信协议dubbo协议为什么要消费者比提供者个数多:

因dubbo 协议采用单一长连接,假设网络为千兆网卡(1024Mbit=128MByte),根 据测试经验数据每条连接最多只能压满7MByte(不同的环境可能不一 样,供参考),理论上1个服务提供者需要20个服务消费者才能压满网 卡。

dubbo通信协议dubbo协议为什么不能传大包:因dubbo协议采用单 一长连接,如果每次请求的数据包大小为500KByte,假设网络为千兆 网卡(1024Mbit=128MByte),每条连接最大7MByte(不同的环境可能不 一样,供参考),单个服务提供者的TPS(每秒处理事务数)最大 为:128MByte/ 500KByte = 262。单个消费者调用单个服务提供者的 TPS(每秒处理事务数)最大为:7MByte/ 500KByte = 14。如果能接受, 可以考虑使用,否则网络将成为瓶颈。

dubbo通信协议dubbo协议为什么采用异步单一长连接:因为服务的现 状大都是服务提供者少,通常只有几台机器,而服务的消费者多,可能 整个网站都在访问该服务,比如Morgan的提供者只有6台提供者,却 有上百台消费者,每天有1.5亿次调用,如果采用常规的hessian服 务,服务提供者很容易就被压跨,通过单一连接,保证单一消费者不会 压死提供者,长连接,减少连接握手验证等,并使用异步IO,复用线 程池,防止C10K问题。

dubbo通信协议dubbo协议适用范围和适用场景适用范围:传入传出参 数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无 法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。适 用场景:常规远程服务方法调用dubbo协议补充:连接个数:单连接连接 方式:长连接传输协议:TCP传输方式:NI0异步传输序列化:Hessian二进 制序列化

RMI协议RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短连接 和JDK标准序列化方式,Java标准的远程调用协议。连接个数:多连 接连接方式:短连接传输协议:TCP传输方式:同步传输序列化:Java标准 二进制序列化适用范围:传入传出参数数据包大小混合,消费者与提供 者个数差不多,可传文件。适用场景:常规远程服务方法调用,与原生 RMI服务互操作

Hessian协议Hessian协议用于集成Hessian的服务,Hessian底层采 用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务 器实现基于Hessian的远程调用协议。连接个数:多连接连接方式:短 连接传输协议:HTTP传输方式:同步传输序列化:Hessian二进制序列化 适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者 压力较大,可传文件。适用场景:页面传输,文件传输,或与原生 hessian服务互操作

http采用Spring的HttpInvoker实现基于http表单的远程调用协议。 连接个数:多连接连接方式:短连接传输协议:HTTP传输方式:同步传输 序列化:表单序列化(JSON)适用范围:传入传出参数数据包大小混合,提 供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数, 暂不支持传文件。适用场景:需同时给应用程序和浏览器JS使用的服 务。

Webservice 基于 CXF 的 frontend-simple 和 transports-http 实现基于 WebService的远程调用协议。连接个数:多连接连接方式:短连接传输 协议:HTTP传输方式:同步传输序列化:SOAP文本序列化适用场景:系统 集成,跨语言调用。

Thrif Thrift 是 Facebook 捐给 Apache 的一个 RPC 框架,当前 dubbo 支 持的thrift协议是对thrift原生协议的扩展,在原生协议的基础上添加了 —些额外的头信息,比如service name, magic number等


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #开源框架面试之Dubbo面试题 #注册