• Dubbo之负载均衡、并发控制、延迟暴露、连接控制


    1、并发控制

    dubbo服务端和消费端都做了并发控制,分别在配置中有相应的对应配置:

    服务端:executes服务提供者每服务每方法最大可并行执行请求数,控制并发数量;actives每服务消费者每服务每方法最大并发调用数,控制占用链接的请求数量;Provider处理请求时,统计方法维度的调用情况,如果并发数超过设置的最大值,则阻直接抛出异常。
    消费端:actives每服务消费者每服务每方法最大并发调用数;Consumer 调用时,统计服务和方法维度的调用情况,如果并发数超过设置的最大值,则阻塞当前线程,直到前面有请求处理完成。
    如果服务端和消费端同时都配置了actives,消费端优先。

    配置样例
    样例 1
    限制 com.foo.BarService 的每个方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个:

    <dubbo:service interface="com.foo.BarService" executes="10" />
    样例 2
    限制 com.foo.BarService 的 sayHello 方法,服务器端并发执行(或占用线程池线程数)不能超过 10 个:

    <dubbo:service interface="com.foo.BarService">
    <dubbo:method name="sayHello" executes="10" />
    </dubbo:service>
    样例 3
    限制 com.foo.BarService 的每个方法,每客户端并发执行(或占用连接的请求数)不能超过 10 个:

    <dubbo:service interface="com.foo.BarService" actives="10" />

    <dubbo:reference interface="com.foo.BarService" actives="10" />
    样例 4
    限制 com.foo.BarService 的 sayHello 方法,每客户端并发执行(或占用连接的请求数)不能超过 10 个:

    <dubbo:service interface="com.foo.BarService">
    <dubbo:method name="sayHello" actives="10" />
    </dubbo:service>

    <dubbo:reference interface="com.foo.BarService">
    <dubbo:method name="sayHello" actives="10" />
    </dubbo:service>
    如果 <dubbo:service> 和 <dubbo:reference> 都配了actives,<dubbo:reference> 优先,参见:配置的覆盖策略。

    2、延迟暴露
    Dubbo在解析到<dubbo:service />时就会打开端口对外提供服务,有些服务需要一定的预热时间,比如初始化缓存,等待相关资源就位等,如果此时请求进来,则会报错。

    Dubbo-2.6.5 之前版本
    <dubbo:service delay="-1" />
    延迟到spring完成初始化之后。

    <dubbo:service delay="5000" />
    Spring初始化之后再延长5S。

    Dubbo-2.6.5 及以后版本
    这个版本之后,所有的服务都在Spring完成初始之后对外暴露,这是默认的。

    3、连接控制
    来自Provider端限制

    <dubbo:provider protocol="dubbo" accepts="10" />
    或者:

    <dubbo:protocol name="dubbo" accepts="10" />
    从文档上看,不知道这个配置是针对整个Provider,还是针对Provider中的每一个服务。也不知道是单个Consumer不超过10还是所有Consumer不超过10。

    来自客户端的限制:

    <dubbo:reference interface="com.foo.BarService" connections="10" />
    或者:

    <dubbo:service interface="com.foo.BarService" connections="10" />
    如果 <dubbo:service> 和 <dubbo:reference> 都配了 connections,<dubbo:reference> 优先,参见:配置的覆盖策略。

    官网这句话真让人搞不懂。dubbo:service是Provider端自己的限制,dubbo:reference是Consumer端自己的限制。双方各自限制自己可以使用的连接数。现在这两个不相干的东西可以覆盖,真搞不明白这个连接限制到底在限制谁。看文档越看越糊涂。5、

    4、延迟连接
    延迟连接用于减少长连接数。当有调用发起时,再创建长连接,只对长连接类型有效:

    <dubbo:protocol name="dubbo" lazy="true" />


    5、粘滞连接
    粘滞连接用于有状态服务,尽可能让Consumer连接相同的Provider,除非Provider挂掉。

    很明显在这种情况下,负载均衡策略将失效,并且粘滞连接将自动开启延迟连接,以减少长连接的个数。配置如下:

    <dubbo:reference id="xxxService" interface="com.xxx.XxxService" sticky="true" />
    沾滞连接可以精确到方法级别:

    <dubbo:reference id="xxxService" interface="com.xxx.XxxService">
    <dubbo:mothod name="sayHello" sticky="true" />
    </dubbo:reference>

    6、负载均衡(Load Balance)
    配置服务的客户端的 loadbalance 属性为 leastactive,此 Loadbalance 会调用并发数最小的 Provider(Consumer端并发数)。

    <dubbo:reference interface="com.foo.BarService" loadbalance="leastactive" />

    <dubbo:service interface="com.foo.BarService" loadbalance="leastactive" />

    作者:鲁班快跑

    出处:https://www.cnblogs.com/zhusf/p/15476008.html

    版权:本文版权归作者和博客园共有

    转载:您可以随意转载、摘录,但请在文章内注明作者和原文链接。

  • 相关阅读:
    PAT甲级1107. Social Clusters
    PAT甲级1103. Integer Factorization
    PAT甲级1098. Insertion or Heap Sort
    hihocoder 162周 1323 : 回文字符串
    PAT甲级1095. Cars on Campus
    PAT甲级1089. Insert or Merge
    PAT甲级1087. All Roads Lead to Rome
    PAT甲级1076. Forwards on Weibo
    PAT甲级1066. Root of AVL Tree
    PAT甲级1057. Stack
  • 原文地址:https://www.cnblogs.com/zhusf/p/15476008.html
Copyright © 2020-2023  润新知