当前位置: 首页 > 科技观察

微服务架构—Nginx限速

时间:2023-03-21 13:38:35 科技观察

1简介Nginx作为微服务架构的流量接入层,主要使用ngx_http_limit_req_module模块对漏桶算法进行请求限速。主要流程如下:Nginx-rate-limiting主流程Nginx-rate-limiting主流程Nginx限速主流程如下:①客户端向Nginx发起请求②Nginxnearburst配置检查③Burst是没有配置,则直接进行速率(rate)校验④如果速率校验超过限制,则返回指定的错误码给客户端⑤如果没有超过速率校验,则将请求转发给后端服务器⑥burst配置好且大于0,则进行burst验证⑦burstmax,则检查是否配置了延迟模式(nodelay)⑨如果是延迟模式配置好了,就会进入队列等待处理⑩如果没有配置延时模式,会直接返回503错误码给客户端2核心配置2.1limit_reqlimit_req主要用于配置限流区域,burstcapacity(默认为0)和是否延迟模式(默认为延迟模式)。使用语法limit_reqzone=[name][burst=number][nodelay];配置部分http,server,location2.2limit_req_zonelimit_req_zone主要用于配置限流key、key对应的信息共享内存区大小、固定请求速率。此功能仅Nginx版本≥1.7.6支持。使用语法limit_req_zone[key]zone=[name]:[size]rate=[rate];配置部分http2.3limit_conn_log_levellimit_conn_log_level主要用于配置限流后的日志级别,默认为错误级别。此功能仅支持Nginx版本≥0.8.18。使用语法limit_conn_log_levelinfo|notice|warn|error;配置部分http、server、location默认值limit_conn_log_levelerror;2.4limit_conn_statuslimit_conn_status主要用于配置被限制后的返回状态,默认返回503状态码。此功能仅Nginx版本≥1.3.15支持。使用语法limit_conn_zone$variablezone=name:size;配置部分http默认值limit_conn_status503;3笔记任何事物都有两个方面。ngx_http_limit_req_module模块虽然可以解决目前的并发问题,但同时也会引入其他问题。比如前端有LVS或者反向代理,后端开启了这个模块功能,那么本机的IP访问会特别频繁,导致频繁503错误,但是这个问题可以通过设置IP白名单过滤。简单的配置方法如:location/{#允许访问某个IPallow10.1.1.16;}4配置示例#根据客户端IP地址进行统计,设置共享内存大小为20MB,设置固定速率大小为10r/slimit_req_zone$binary_remote_addrzone=addr:20mrate=10r/s;#设置并发限流的日志级别为errorlimit_conn_log_levelerror;#触发并发限流时直接设置状态码503limit_conn_status503;#...server{#...location/limit{#设置每个IP的bucket容量为10#nodelay的意思是如果超过了,会立即返回503错误#没有配置nodelay,意思是超过之后请求会排队等候limit_reqzone=addrburst=10nodelay;}}}