第1章 总体介绍
1. 概述
2. 功能描述
3. 应用限流策略
第2章 业务限流配置
1. 说明
2. Context管理
3. 令牌池管理
4. 优先级队列管理
第3章 应用端接入
1. 引入依赖
2. Spring配置
3. 业务限流API
4. 异常处理
第1章 总体介绍
1. 概述
1.1. 名词说明:
名称 |
说明 |
备注 |
服务端 |
独立部署的限流应用服务端,提供优先策略配置,报警快照接收等功能 |
|
客户端 |
以jar包形式提供给业务应用使用接入限流功能 |
|
业务应用 |
对应具体的快钱产品应用 |
|
2. 功能描述
2.1. 限流客户端
- 1. 令牌分配: 按照既定令牌容量,超时时间对令牌的发放,释放,超时释放进行管理。
- 2. 同步令牌优先策略: 客户端从服务端加载策略配置信息变化,并将策略实时运用于对应令牌池。
- 令牌排队队列维护: 按照优先策略维护排队队列,包括按业务优先级插队,超时踢出。
- 限流参数服务:通过http提供限流参数。
- 1. 限流参数配置维护。
2.2. 限流服务端
2.3. 运维Website
3. 应用限流策略
l 分配令牌时,按照请求的优先级查找对应令牌池队列中是否有空闲令牌,若有则返回,否则返回空。
l 业务处理完毕后,令牌释放,归还至令牌所属优先级的令牌池。
第2章 业务限流配置
1. 说明
在运维监控系统中选择限流配置管理
2. Context管理
在限流配置管理界面上可维护新增删除和修改context
context名称为任意字符串
快照发送时间为0时,不发送快照
暂停按钮可禁用该context的限流,此时业务请求都可通过
点击context名称可进入context下的令牌池界面
3. 令牌池管理
一个Context下可以配置多个令牌池
令牌池名称可为任意字符串
暂停按钮可禁用该令牌池的限流,此时业务请求都可通过
点击修改可修改令牌池的数量和超时时间等参数
点击令牌池名称可进入令牌池下的优先级配置界面
4. 优先级队列管理
匹配值:可是是普通字符串和正则表达式,其中正则表达式要用/括起,如/.*/。其他形式视为普通字符串,多个匹配值之间用空格分开.除了/.*/以外,应尽量避免使用正则表达式,以免影响性能。
最大并发请求数:请求token是异步实现的,这个参数指定了异步请求队列的最大任务数量。
第3章 应用端接入
1. 引入依赖
<dependency org="com.99bill" name="if-flowcontrol" rev="1" conf="zip->default"/> <dependency org="com.sun" name="javaee-api" rev="5" conf="compile->default"/> <dependency org="com.ibm" name="wsdl4j" rev="1.6.1" conf="compile->default"/> <dependency org="javax.xml" name="jaxrpc-api" rev="1.1" conf="compile->default"/> <dependency org="org.slf4j" name="slf4j-api" rev="1.5.8" conf="compile->default"/> <dependency org="org.spring" name="spring" rev="2.5.5" conf="zip->default"/> |
2. Spring配置
<bean id="tokenPoolManager" class="com.bill99.fc.service.token.TokenPoolManagerFactoryBean"> <property name="contextName" value="myContext" /> <property name="serverUrl" value="${inf.fc.server.url}" /> <!-- 以下参数可选 --> <!-- 获取token最大超时时间,默认为10000 --> <property name="tokenGettingTaskTimeOut" value="3000" /> <!-- 启动后加载配置的延迟时间,默认为60000 --> <property name="configReloadDelay" value="10000" /> <!-- 刷新配置的间隔时间,默认为30000 --> <property name="configReloadInterval" value="60000" /> </bean> |
其中myContext是你自已配置的context名称
${inf.fc.server.url}是服务端地址,如果接入ACMS的话可以直接引入这个占位符
3. 业务限流API
软件包 com.bill99.fc.service.token
类摘要 |
|
令牌对象 |
|
限流控制主入口 |
|
com.bill99.fc.service.token
类 TokenPoolManager
java.lang.Object
com.bill99.fc.service.token.TokenPoolManager
public class TokenPoolManager
extends java.lang.Object
限流控制主入口
方法摘要 |
|
|
|
|
|
参数: poolName - 令牌池名称,与服务端配置的令牌池名称对应 in - 业务参数,用于确定优先级 返回: 成功时为Token实例,无可用令牌时返回null |
|
|
|
|
|
com.bill99.fc.service.token
类 Token
java.lang.Object
com.bill99.fc.service.token.Token
public class Token
extends java.lang.Object
令牌对象
方法摘要 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
使用示例:
//…..
//获得令牌
Token t = TokenPoolManager.getTokenPoolManager.getToken(“/internal/txn”,
”
999451145110001
&PUR”);
//业务处理
//….
//业务处理完毕,归还令牌
t.releaseToken();
|
4. 异常处理
异常情况 |
处理方式 |
客户端请求服务端同步策略配置失败 |
此种场景为客户端首次启动时发生,此时由于客户端无优先策略配置,对于所有请求都按同一优先级进行限流控制。当达到配置的轮询间隔时期后,客户端再次尝试向服务端请求策略配置信息。 |