微服务架构—Nginx速率限流

服务器
Nginx作为微服务架构的流量接入层,主要使用 ngx_http_limit_req_module 模块实现漏桶算法的请求速率的限制。

 1 简介

 Nginx作为微服务架构的流量接入层,主要使用 ngx_http_limit_req_module 模块实现漏桶算法的请求速率的限制。主要流程如下:

Nginx-速率限流主要流程

Nginx-速率限流主要流程

Nginx速率限流的主要流程如下:

① 客户端向Nginx发起请求

② Nginx近burst配置校验

③ burst未配置,则直接进行速率(rate)校验

④ 速率校验超额,则返回指定错误码给客户端

⑤ 速率校验未超额,则将请求转发至后端服务器

⑥ burst配置了且大于0,则进行burst校验

⑦ burst<max,则进行速率(rate)校验

⑧ burst>max,则校验延迟模式(nodelay)是否配置

⑨ 延迟模式已配置,则进入队列进行等待被处理

⑩ 若未配置延迟模式,则直接返回503错误码给客户端

2 核心配置

2.1 limit_req

limit_req 主要用于配置限流区域、突发容量(默认为0)和是否延迟模式(默认为延迟模式)。

  • 使用语法
limit_req zone=[name] [burst=number] [nodelay]; 
  • 1.
  • 配置段
http,server,location 
  • 1.

2.2 limit_req_zone

limit_req_zone 主要用于配置限流key、存放key对应信息的共享内存区域大小和固定请求速率。该功能只有Nginx version≥1.7.6的版本才被支持。

  • 使用语法
limit_req_zone [key] zone=[name]:[size] rate=[rate]; 
  • 1.
  • 配置段
http 
  • 1.

2.3 limit_conn_log_level

limit_conn_log_level 主要用于配置被限流后的日志级别,默认为error级别。该功能只有Nginx version≥0.8.18的版本才被支持。

  • 使用语法
limit_conn_log_level info|notice|warn|error; 
  • 1.
  • 配置段
http,server,location 
  • 1.
  • 默认值
limit_conn_log_level error; 
  • 1.

2.4 limit_conn_status

limit_conn_status 主要用于配置被限流后的返回的状态,默认会返回503状态码。该功能只有Nginx version≥1.3.15的版本才被支持。

  • 使用语法
limit_conn_zone $variable zone=name:size;  
  • 1.
  • 配置段
http 
  • 1.
  • 默认值
limit_conn_status 503; 
  • 1.

3 注意事项

凡事都具有两面性,ngx_http_limit_req_module 模块虽可以解决当前面临的并发问题,但也会引入另外一些问题。如前端如果有做LVS或反向代理,而后端启用了该模块功能,那该机器的IP访问会特别频繁,从而导致经常出现503错误,但可以通过设置IP白名单来进行过滤解决该问题,简单配置方式如:

location / { 
    # 允许一个IP的访问 
    allow 10.1.1.16; 

  • 1.
  • 2.
  • 3.
  • 4.

4 配置案例

 # 根据客户端IP地址进行统计,设置共享内存大小为20MB,设置固定速率大小为10r/s 
    limit_req_zone $binary_remote_addr zone=addr:20m rate=10r/s; 
    # 设置并发限流的日志级别为error 
    limit_conn_log_level error; 
    # 设置触发并发限制时直接返回503状态码 
    limit_conn_status 503; 
 
    # ... 
 
    server{ 
        # ... 
        location /limit{ 
            # 设置每个IP的桶容量为10 
            # nodelay表示超额则立即返回503错误 
            # 没有配置nodelay表示超过后请求就会排队等待 
            limit_req zone=addr burst=10 nodelay; 
        } 
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

 

责任编辑:武晓燕 来源: 微技术栈
相关推荐

2020-06-09 22:05:44

NGINX微服务架构

2019-10-16 08:41:46

微服务架构Nginx

2018-02-08 08:52:37

2023-07-28 09:23:24

微服务架构

2021-03-16 08:31:59

微服务Sentinel雪崩效应

2020-09-08 06:48:07

微服务算法限流

2021-06-08 07:04:45

Service Mes微服务熔断

2018-12-12 09:59:47

微服务架构分布式系统

2023-08-31 17:13:01

架构软件开发

2022-09-07 15:41:01

微服务开发容器

2023-07-27 14:03:51

微服务

2022-01-17 10:55:50

微服务API网关

2020-07-28 08:32:57

微服务API网关熔断

2018-08-01 14:20:11

微服务架构人工智能

2017-07-04 14:57:40

微服务paasdocker

2021-07-07 07:44:20

微服务Nacos缓存

2024-01-19 11:57:42

2024-06-05 12:03:43

微服务架构场景

2019-07-11 15:25:02

架构运维技术

2020-12-08 09:01:05

微服务网络化Kubernetes
点赞
收藏

51CTO技术栈公众号