dubbo限流

Dubbo服务限流

为了防止某个消费者的QPS或是所有消费者的QPS总和突然飙升而导致的重要服务的失效,系统可以对访问流量进行控制,这种对集群的保护措施称为服务限流。

Dubbo中能够实现服务限流的方式较多,可以划分为两类:

直接限流
通过对连接数量直接进行限制来达到限流的目的。

间接限流
通过一些非连接数量设置来达到限制流量的目的

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

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

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

<dubbo:service interface="com.demo.dubbo.api.UserService" executes="10" />

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

<dubbo:service interface="com.demo.dubbo.api.UserService">
    <dubbo:method name="SayHello" executes="10" />
</dubbo:service>

二、accepts限流 – 仅提供者端

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

<dubbo:provider protocol=“dubbo” accepts=“10”/>


<dubbo:protocol name=“dubbo” port=“20880” accepts=“10”/>

三、actives限流 – 两端

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

A、提供者端限流

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

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

<dubbo:service interface=“com.demo.dubbo.api.UserService” actives=“10” />

方法级别

<dubbo:reference interface=“com.foo.BarService”>
<dubbo:method name=“SayHello” actives=“10” />
</dubbo:service>

B、消费者端限流

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

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

<dubbo:reference interface="com.demo.dubbo.api.UserService" actives="10" />

方法级别

<dubbo:reference interface="com.demo.dubbo.api.UserService">
    <dubbo:method name="SayHello" actives="10" />
</dubbo:reference>

四、 connections限流

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

A、提供者端限流

类级别

<dubbo:service interface=“com.demo.dubbo.api.UserService” ref=“userService” connections=“10”/>

方法级别

<dubbo:service interface=“com.demo.dubbo.api.UserService”>
<dubbo:method name=“SayHello” connections=“10” />
</dubbo:service>

B、消费者端限流

类级别

<dubbo:reference interface=“com.demo.dubbo.api.UserService” connections=“10” />

方法级别

<dubbo:reference interface=“com.demo.dubbo.api.UserService”>
<dubbo:method name=“SayHello” connections=“10” />
</dubbo:reference>

五、间接限流

延迟连接 – 仅消费者端

仅可设置在消费者端,且不能设置为方法级别。仅作用于Dubbo服务暴露协议。
将长连接的建立推迟到消费者真正调用提供者时。
可以减少长连接的数量

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

六、粘连连接 – 仅消费者

仅能设置在消费者端,其可以设置为接口级别,也可以设置为方法级别。仅作用于Dubbo服务暴露协议
其会使客户端尽量向同一个提供者发起调用,除非该提供者挂了,其会连接另一台。只要启用了粘连连接,其就会自动启用延迟连接
其限制的是流向,而非流量

类级别

<dubbo:reference interface=“com.demo.dubbo.api.UserService” sticky=“true” />

方法级别

<dubbo:service interface=“com.demo.dubbo.api.UserService”>
<dubbo:method name=“SayHello” sticky=“true” />
</dubbo:service>

七、负载均衡

可以设置在消费者端,亦可设置在提供者端;可以设置在接口级别,亦可设置在方法级别。其限制的是流向,而非流量

<dubbo:reference interface="...">
    <dubbo:method name="..."loadbalance="roundrobin"/>
</dubbo:reference>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值