Java 面试复习_9

2019-6-1
作者:水不要鱼

(注:能力有限,如有说错,请指正!)

今天儿童节,先祝大家儿童节快乐!!

  • Dubbo 启动时检查

dubbo 在启动时会进行服务的可用性检查,就是对依赖的服务进行判断是否可用,只有可用才会拿到代理对象,否则返回 null。
但是,有时候不想要这个启动检查,就可以通过配置进行设置:

# 消费者:关闭具体一个服务提供者的检查
dubbo.reference.cn.com.fishin.service.check=false

# 消费者:关闭所有服务引用的检查
dubbo.reference.check=false
# 或
dubbo.consumer.check=false

# 关闭注册中心的检查
dubbo.registry.check=false
  • Dubbo 集群容错机制

dubbo 对集群有一套容错机制,就是当调用失败之后该怎么做。对 dubbo 内部来说,它把这个集群调用者封装成一个
调用者,也就是说一切集群选择,包括路由、负载均衡都是在这个封装之后的调用者里面处理的,这样在最终调用时是透明的。
dubbo 默认的集群容错机制是 failover。一共有如下几种机制:

  1. failover ———— 如果调用失败,由于是集群,所以可以在其他服务器上重试,这就是重试机制,但是也会带来更高的延迟。
    当然,既然有重试,那就肯定有重试次数限制,不然可能一直重试。。。我们可以通过配置:
<beans>
    <!-- 重试次数配置如下: -->
    <!-- 这是服务提供者在暴露服务的时候配置的 -->
    <!--
    需要注意的是,retries 不包括第一次失败的那次,也就是说,
    第一次调用失败,开始重试,这时候才开始计数
    -->
    <dubbo:service retries="3" />

    <!-- 这是服务消费者在引用服务的时候配置的 -->
    <dubbo:reference retries="3" />
    <!-- 或 -->
    <dubbo:reference>
        <dubbo:method name="say" retries="3" />
    </dubbo:reference>
</beans>
  1. failsafe ———— 如果调用失败,直接忽略异常,也就是不会发生任何的事。这个机制适合于调用不太敏感的业务。
  2. failfast ———— 如果调用失败,直接报错,不会进行重试。
  3. failback ———— 如果调用失败,将这次请求记录下来,然后后台进行定时重发。
  4. forking ———— 如果调用失败,由于是集群,所以它将会在所有服务器上执行一次,任意一个成功即可。这也可以看出,
    这个请求有可能被重复调用,如果是商品下单,就会造成重复下单的问题。
  5. broadcast ———— 如果调用失败,通知所有提供者,一个一个执行,如果有一个出错就直接报错。

如果你想切换集群容错机制,就是用以下的配置:

<beans>
    <!-- 服务提供者 -->
    <dubbo:service cluster="failsafe" />
    
    <!-- 服务消费者 -->
    <dubbo:reference cluster="failsafe" />
</beans>
  • Dubbo 集群负载均衡机制

dubbo 中对于集群,除了容错机制外,还提供了负载均衡机制,默认的是 random 随机调用。在 dubbo 中有如下几种
负载均衡机制:

  1. random ———— 随机选择调用方,由于是随机数,有可能存在其中一些服务器的调用次数比其他的多的情况。
  2. roundrobin ———— 轮询机制,有可能存在堆积请求的问题。
  3. leastactive ———— 最少调用的调用机制,也就是说内部会记录服务的调用次数,或者说负载情况,
    然后选择负载比较少的服务器来进行调用。
  4. consistenthash ———— 一致性 hash 选择调用机制。一致性 hash 可以做到一台服务器崩掉之后,其他机器来弥补
    这台服务器的 hash 范围。这个机制下,默认会选择服务方法的第一个参数作为 hash 的对象,也正是这样,参数相同的请求
    就会发送到同一台机器上。这个参数是可以进行设置的,包括一致性 hash 的槽数和 hash 的对象。
<beans>
    <!-- 这个配置可以设定要对哪些参数进行 hash,默认是 0,也就是第一个参数 -->
    <dubbo:parameter key="hash.arguments" value="0,1" />
    
    <!-- 这个配置可以设定一致性 hash 的槽数 -->
    <dubbo:parameter key="hash.nodes" value="320" />
</beans>

如果你要切换负载均衡机制,可以使用下面的配置:

<beans>
    <!-- 服务提供者:服务级别 -->
    <dubbo:service interface="YourInterface" loadbalance="leastactive" />
    
    <!-- 消费者:服务级别 -->
    <dubbo:reference interface="YourInterface" loadbalance="leastactive" />
    
    <!-- 服务提供者:方法级别 -->
    <dubbo:service interface="YourInterface">
        <dubbo:method name="YourMethod" loadbalance="leastactive"/>
    </dubbo:service>
    
    <!-- 消费者:方法级别 -->
    <dubbo:reference interface="YourInterface">
        <dubbo:method name="YourMethod" loadbalance="leastactive"/>
    </dubbo:reference>
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值