• Nginx限流


    对于Nginx接入层限流可以使用Nginx自带了两个模块:

    连接数限流模块ngx_http_limit_conn_module和漏桶算法实现的请求限流模块ngx_http_limit_req_module。
    1. ngx_http_limit_conn_module
    我们经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,并发数进行限制。ngx_http_limit_conn_module 模块来实现该需求。该模块可以根据定义的键来限制每个键值的连接数,如同一个IP来源的连接数。并不是所有的连接都会被该模块计数,只有那些正在被处理的请求(这些请求的头信息已被完全读入)所在的连接才会被计数。
    我们可以在nginx_conf的http{}中加上如下配置实现限制:

    #限制每个用户的并发连接数,取名one
    limit_conn_zone $binary_remote_addr zone=one:10m;
    #配置记录被限流后的日志级别,默认error级别
    limit_conn_log_level error;
    #配置被限流后返回的状态码,默认返回503
    limit_conn_status 503;

    然后在server{}里加上如下代码:

    #限制用户并发连接数为1
    limit_conn one 1;
    然后我们是使用ab测试来模拟并发请求:
    ab -n 5 -c 5 http://10.23.22.239/index.html
    得到下面的结果,很明显并发被限制住了,超过阈值的都显示503:

    另外刚才是配置针对单个IP的并发限制,还是可以针对域名进行并发限制,配置和客户端IP类似。

    #http{}段配置
    limit_conn_zone $ server_name zone=perserver:10m;
    #server{}段配置
    limit_conn perserver 1;
    2. ngx_http_limit_req_module
    上面我们使用到了ngx_http_limit_conn_module 模块,来限制连接数。那么请求数的限制该怎么做呢?这就需要通过ngx_http_limit_req_module 模块来实现,该模块可以通过定义的键值来限制请求处理的频率。特别的,可以限制来自单个IP地址的请求处理频率。 限制的方法是使用了漏斗算法,每秒固定处理请求数,推迟过多请求。如果请求的频率超过了限制域配置的值,请求处理会被延迟或被丢弃,所以所有的请求都是以定义的频率被处理的。
    在http{}中配置
    #区域名称为one,大小为10m,平均处理的请求频率不能超过每秒一次。

    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    在server{}中配置

    #设置每个IP桶的数量为5
    limit_req zone=one burst=5;
    上面设置定义了每个IP的请求处理只能限制在每秒1个。并且服务端可以为每个IP缓存5个请求,如果操作了5个请求,请求就会被丢弃。
    使用ab测试模拟客户端连续访问10次:ab -n 10 -c 10 http://10.23.22.239/index.html
    如下图,设置了通的个数为5个。一共10个请求,第一个请求马上被处理。第2-6个被存放在桶中。由于桶满了,没有设置nodelay因此,余下的4个请求被丢弃。

    总结
    以上就是本文关于高并发系统的限流详解及实现的全部内容,希望对大家有所帮助。

    **************************************************************************************
    当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想 要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
    **************************************************************************************
  • 相关阅读:
    找的好网站(macdow语法,扫描二维码,)
    c语言中static的作用以及(递归,八大算法原理)
    WKWebView加载Html文件,如何自适应网页内容呢?就是不要让它左右滑动
    iOS 8.0模拟器键盘弹出以及中文输入
    sizeof与strlen的理解
    各种效果原理(抽屉,多个tableView复用)
    激励自己的话
    IT培训出来的人为什么难找工作,各种纠结
    如何在跟新xcode后跟新插件
    Objective-C中的Block
  • 原文地址:https://www.cnblogs.com/macoffee/p/13375003.html
Copyright © 2020-2023  润新知