应用场景
当DSF节点发布服务后,如果不限制访问流量,在实际生产中可能出现对某个服务或方法有过多的连接,消耗过多系统资源,影响服务正常功能。通过流量控制,可以保障服务的访问数,从而保证服务的正常运行。
说明:
超过了流控阈值的访问请求会被拒绝,并返回异常。
- 流控类型
DSF提供以下流控方式:
并发流控:用于控制接入服务的线程数,其中的阈值代表线程数量。
TPS流控:控制的是单位时间内被调用的次数。
简介
并发流控
一个服务中可以有多个方法,DSF服务端可根据实际需要选择对服务设置并发流控,或对服务中的方法设置并发流控。
服务级流控:服务端流控数通过服务端Spring配置中指定exporter属性“executes”设置,代表并发处理总量。若不设置,则默认为“0”,表示不流控。
- 服务端流控配置样例如下:
<!-- 表示名为“demoService1”的服务并发访问线程数为100 -->
<!-- -->
<bean id="demoServiceImplBean1" class="com.huawei.openas.dsf.demo.provider.DemoServiceImpl" />
<dsf:exporter name="demoService1" interface="com.huawei.openas.dsf.demo.api.DemoService"
ref="demoServiceImplBean1" executes="100" actives="5" />
- 方法级流控
除了可以给服务设置并发访问量,还可以为服务中具体的方法设置并发访问量。
配置方法如下:
通过exporter下的子标签<service:method />指定方法级参数配置(可选操作)。<dsf:method name="sayHello" executes="1" />
其中name为方法名(必填);executes为服务端流控,流控值只能在服务端指定有效。
服务端配置代码样例如下:
<bean id="demoServiceImplBean1" class="com.huawei.openas.dsf.demo.provider.DemoServiceImpl" />
<dsf:exporter name="demoService2"
interface="com.huawei.openas.dsf.demo. DemoService" ref="demoServiceImplBean1">
<dsf:method name="sayHello" executes="1"/>
</dsf:exporter>
说明: 如果服务级和方法级同时配置流控值,以方法级流控值为准。
- 流控参数化
流控配置的“executes”参数支持参数化。
说明: 参数的结构为 [服务名].execute , 例如:“demo.service.execute”。
流控可以配置成以下方式:
<dsf:exporter name="manage" interface="com.huawei.usf.manage.Management" ref="managementBean" executes="${demo.service.execute}"> </dsf:exporter>
然后在“dsf.dynamic.properties”中配置“demo.service.execute”的值。
==============================================================
TPS流控
背景信息
一个服务中可以有多个方法,DSF服务端可根据实际需要选择对服务设置并发流控,或对服务中的方法设置并发流控。
全局设置
在“dsf.properties”文件中,配置
服务级流控
服务端流控数通过服务端Spring配置中指定exporter属性“executes”设置,代表并发处理总量。若不设置,则默认为“0”,表示不流控。
服务端流控配置样例如下:
<!-- 表示名为“demoService1”的服务并发访问线程数为100 -->
<!-- -->
<bean id="demoServiceImplBean1" class="com.huawei.openas.dsf.demo.provider.DemoServiceImpl" />
<dsf:exporter name="demoService1" interface="com.huawei.openas.dsf.demo.api.DemoService"
ref="demoServiceImplBean1" executes="100" actives="5" />
方法级流控
除了可以给服务设置并发访问量,还可以为服务中具体的方法设置并发访问量。
配置方法如下:
通过exporter下的子标签<service:method />指定方法级参数配置(可选操作)。
<dsf:method name=“sayHello” executes=“1” />其中name为方法名(必填);executes为服务端流控,流控值只能在服务端指定有效。
服务端配置代码样例如下:
<bean id="demoServiceImplBean1" class="com.huawei.openas.dsf.demo.provider.DemoServiceImpl" />
<dsf:exporter name="demoService2"
interface="com.huawei.openas.dsf.demo. DemoService" ref="demoServiceImplBean1">
<dsf:method name="sayHello" executes="1"/>
</dsf:exporter>
说明:
如果服务级和方法级同时配置流控值,以方法级流控值为准。