微服务架构—Nginx并发限流
Posted 微技术栈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务架构—Nginx并发限流相关的知识,希望对你有一定的参考价值。
1 简介
nginx作为微服务架构的流量接入层,主要使用 ngx_http_limit_conn_module
模块实现请求连接数的限制。主要流程如下:
Nginx并发限流的主要流程如下:
① 客户端向Nginx发起请求
② Nginx对当前的并发数进行校验
③ 若超额,则打印日志并返回指定错误码
④ 若未超额,则放通请求并计数
2 核心配置
2.1 limit_conn_zone
limit_conn_zone
主要用于配置限流key及其存放key对应信息的共享内存区域大小。在Nginx version<1.1.8时使用 limit_zone
来实现并发数的限制。
使用语法
limit_conn_zone $variable zone=[key name]:[size];
配置段
http
2.2 limit_conn
limit_conn
主要用于配置存放key和其计数器的共享内存区域和指定key的最大连接数。
使用语法
limit_conn [zone_name] [number];
配置段
http,server,location
案例
http {
# 根据远程的客户端IP地址进行统计
limit_conn_zone $binary_remote_addr zone=addr:20m;
location /test {
# 即表示Nginx最多同时并发处理10个连接
limit_conn addr 10;
}
}
2.3 limit_conn_log_level
limit_conn_log_level
主要用于配置被限流后的日志级别,默认为error级别。该功能只有Nginx version≥0.8.18的版本才被支持。
使用语法
limit_conn_log_level info|notice|warn|error;
配置段
http,server,location
默认值
limit_conn_log_level error;
2.4 limit_conn_status
limit_conn_status
主要用于配置被限流后的返回的状态,默认会返回503状态码。该功能只有Nginx version≥1.3.15的版本才被支持。
使用语法
limit_conn_zone $variable zone=name:size;
配置段
http
默认值
limit_conn_status 503;
3 注意事项
凡事都具有两面性,ngx_http_limit_conn_module
模块虽可以解决当前面临的并发问题,但也会引入另外一些问题。如前端如果有做LVS或反向代理,而后端启用了该模块功能,那该机器的IP访问会特别频繁,从而导致经常出现503错误,但可以通过设置IP白名单来进行过滤解决该问题,简单配置方式如:
location / {
# 允许一个IP的访问
allow 10.1.1.16;
}
4 配置案例
http{
# 根据客户端IP地址进行统计,设置共享内存大小为20MB
limit_conn_zone $binary_remote_addr zone=addr:20m;
# 设置并发限流的日志级别为error
limit_conn_log_level error;
# 设置触发并发限制时直接返回503状态码
limit_conn_status 503;
# ...
server{
# ...
location /limit{
# 设置每个IP最多允许10个并发
limit_conn_addr 10;
}
}
}
以上是关于微服务架构—Nginx并发限流的主要内容,如果未能解决你的问题,请参考以下文章