为了防止某个消费者的QPS或是所有消费者的QPS总和突然飙升而导致的重要服务的失效,系统可以对访问流量进行控制,这种对集群的保护措施称为服务限流。
Dubbo中能够实现服务限流的方式较多,可以划分为两类:直接限流间接限流

  • 直接限流:通过对连接数量直接进行限制来达到限流的目的。
  • 间接限流:通过一些非连接数量设置来达到限制流量的目的。

直接限流

1、executes直接限流– 仅提供者端

该属性仅能设置在提供者端可以设置为接口级别,也可以设置为方法级别限制的是服务(方法)并发执行数量

类级别

服务器端并发执行(或占用线程池线程数)不能超过 10 个

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

方法级别

服务器端并发执行(或占用线程池线程数)不能超过 10 个

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

2、accepts限流 – 仅提供者端

        该属性仅可设置在提供者端的<dubbo:provider/><dubbo:protocol/>。用于对指定协议的连接数量进行限制

 

 或

3、actives限流 – 两端

        该限流方式与前两种不同的是,其可以设置在提供者端,也可以设置在消费者端。可以设置为接口级别,也可以设置为方法级别

A、提供者端限流

根据消费者与提供者间建立的连接类型的不同,其意义也不同

  • 长连接:表示当前长连接最多可以处理的请求个数。与长连接的数量没有关系
  • 短连接:表示当前服务可以同时处理的短连接数量

类级别

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

方法级别

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

B、消费者端限流

根据消费者与提供者间建立的连接类型的不同,其意义也不同:

  • 长连接:表示当前消费者所发出的长连接中最多可以提交的请求个数。与长连接的数量没有关系。
  • 短连接:表示当前消费者可以提交的短连接数量

类级别

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

方法级别

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

4、 connections限流

        可以设置在提供者端,也可以设置在消费者端。限定连接的个数。对于短连接,该属性效果与actives相同。但对于长连接,其限制的是长连接的个数。
           一般情况下,会使connectons与actives联用,让connections限制长连接个数,让actives限制一个长连接中可以处理的请求个数。联用前提使用默认的Dubbo服务暴露协议

A、提供者端限流

类级别

 方法级别

B、消费者端限流

类级别

方法级别

 

间接限流

延迟连接 – 仅消费者端

仅可设置在消费者端,且不能设置为方法级别仅作用于Dubbo服务暴露协议

将长连接的建立推迟到消费者真正调用提供者时。
可以减少长连接的数量

<!--设置当前消费者对接口中的每个方法发出链接采用延迟加载-->

 <dubbo:reference id="userService"  lazy="true"
    interface="com.dubbo.service.UserService"/>

<!--设置当前消费者对所有接口中的所有方法发出链接采用延迟加载-->

 <dubbo:consumer lazy="true"></dubbo:consumer>

粘连连接 – 仅消费者

仅能设置消费者端,其可以设置为接口级别,也可以设置为方法级别仅作用于Dubbo服务暴露协议

          其会使客户端尽量向同一个提供者发起调用,除非该提供者挂了,其会连接另一台。只要启用了粘连连接,其就会自动启用延迟连接

        其限制的是流向而非流量

类级别

方法级别 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐