应用限流接入手册

第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. 1.     令牌分配: 按照既定令牌容量,超时时间对令牌的发放,释放,超时释放进行管理。                                                                                                                      
  2. 2.     同步令牌优先策略: 客户端从服务端加载策略配置信息变化,并将策略实时运用于对应令牌池。
  3. 令牌排队队列维护: 按照优先策略维护排队队列,包括按业务优先级插队,超时踢出。
  4. 限流参数服务:通过http提供限流参数。
  5. 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

类摘要

Token

令牌对象

TokenPoolManager

限流控制主入口

TokenPoolManagerFactoryBean

com.bill99.fc.service.token 
类 TokenPoolManager

java.lang.Object
 
 
com.bill99.fc.service.token.TokenPoolManager

public class TokenPoolManager
extends java.lang.Object

限流控制主入口

方法摘要

 void

active() 
          激活限流功能

 void

deactive() 
          暂停令牌功能

 Token

getToken(java.lang.String poolName, java.lang.String in) 
          从令牌池中获取令牌

参数:

poolName - 令牌池名称,与服务端配置的令牌池名称对应

in - 业务参数,用于确定优先级

返回:

成功时为Token实例,无可用令牌时返回null

static TokenPoolManager

getTokenPoolManager() 
          获取 TokenPoolManager唯一入口

 boolean

isActive() 
           判断是否激活

com.bill99.fc.service.token 
类 Token

java.lang.Object
  
 
com.bill99.fc.service.token.Token

public class Token
extends java.lang.Object

令牌对象

方法摘要

 long

getHeldDuration() 
          获得保持时长

 java.lang.String

getId() 
          获得令牌标识 

 long

getIssueTime() 
           获得颁发时间

 java.lang.String

getPoolName() 
           获得所属令牌池名称

 java.lang.Integer

getPriority() 
           获得优先级

 boolean

isExpired() 
           是否过期

 void

release() 
          释放令牌

使用示例:

//…..
//获得令牌
Token t = TokenPoolManager.getTokenPoolManager.getToken(“/internal/txn”,
999451145110001 &PUR”);
//业务处理
//….
//业务处理完毕,归还令牌
t.releaseToken();

4.  异常处理

异常情况

处理方式

客户端请求服务端同步策略配置失败

此种场景为客户端首次启动时发生,此时由于客户端无优先策略配置,对于所有请求都按同一优先级进行限流控制。当达到配置的轮询间隔时期后,客户端再次尝试向服务端请求策略配置信息。

猜你喜欢

转载自blog.csdn.net/wo240/article/details/47266803