限速限流¶
动态配置
限速器支持通过Web API进行动态配置。
限制器¶
在每个服务上可以通过设置限制器来对请求进行限制,目前的限制器支持对上下行流量速率,请求速率和并发连接数的限制。
流量速率限制¶
流量速率限制包括服务,连接和IP三个级别的限速,三个级别可以组合使用。
命令行中通过limiter.in
和limiter.out
来设置服务级别的限速,通过limiter.conn.in
和limiter.conn.out
来设置连接级别的限速。
配置文件中使用limiter
参数通过引用限速器名称(limiters.name
)来使用指定的限速器。
通过limits
选项指定配置列表,每一个配置项包含空格分割的三个部分:
-
作用域(Scope):限速作用范围,IP地址或CIDR,例如192.168.1.1,192.168.0.0/16。其中两个特殊的值:
$
代表服务级别,$$
代表连接级别。 -
入站速率(Input):服务接收数据的速率(每秒流量),支持的单位有: B,KB,MB,GB,TB,例如 128KB,1MB,10GB。
-
出站速率(Output):服务发送数据的速率(每秒流量),单位同入站速率。出站速率可选,不设置代表无限制。
请求速率限制¶
请求速率限制包括服务,IP两个级别的限速,两个级别可以组合使用。
命令行中通过rlimiter
来设置服务级别的请求速率限制(每秒请求数)。
配置文件中使用rlimiter
参数通过引用限制器名称(rlimiters.name
)来使用指定的限制器。
通过limits
选项指定配置列表,每一个配置项包含空格分割的两个部分:
-
作用域(Scope):作用范围,IP地址或CIDR,例如192.168.1.1,192.168.0.0/16。其中两个特殊的值:
$
代表服务级别,$$
代表IP级别默认限制,当给特定IP或CIDR设置了限制数,则$$
会被忽略。 -
请求速率(Rate):请求速率值(每秒请求数)。
并发连接数限制¶
并发连接数限制包括服务,IP两个级别的限速,两个级别可以组合使用。
命令行中通过climiter
来设置服务级别的最大并发连接数。
配置文件中使用climiter
参数通过引用限制器名称(climiters.name
)来使用指定的限制器。
通过limits
选项指定配置列表,每一个配置项包含空格分割的两个部分:
-
作用域(Scope):作用范围,IP地址或CIDR,例如192.168.1.1,192.168.0.0/16。其中两个特殊的值:
$
代表服务级别,$$
代表IP级别默认限制,当给特定IP或CIDR设置了限制数,则$$
会被忽略。 -
最大连接数(Limit):最大并发连接数值。
数据源¶
限制器可以配置多个数据源,目前支持的数据源有:内联,文件,redis。
内联¶
内联数据源是指直接在配置文件中通过limits
参数设置数据。
文件¶
指定外部文件作为数据源。通过file.path
参数指定文件路径。
文件格式为按行分割的限速配置列表,以#
开始的部分为注释信息,每项配置格式同内联配置。
Redis¶
指定redis服务作为数据源,redis数据类型必须为集合(Set)或列表(List)类型,每项配置格式同内联配置。
addr
(string, required)- redis服务地址
db
(int, default=0)- 数据库名
password
(string)- 密码
key
(string, default=gost)- redis key
type
(string, default=set)- 数据类型,支持的类型有:集合(
set
),列表(list
)。
数据的每一项与文件数据源的格式类似:
HTTP¶
指定HTTP服务作为数据源。对于所请求的URL,HTTP返回200状态码则认为有效,返回的数据格式与文件数据源相同。
url
(string, required)- 请求的URL
timeout
(duration, default=0)- 请求超时时长
优先级¶
当同时配置多个数据源时,优先级从高到低为: HTTP,redis,文件,内联。如果在不同数据源中存在相同的作用域,则优先级高的会覆盖优先级低的配置。
热加载¶
文件,redis,HTTP数据源支持热加载。通过设置reload
参数开启热加载,reload
参数指定同步数据源数据的周期。