目录
- 1.限流算法
- 2.nginx基础知识
- 4.实战
- 总结
限流的目的是通过对并发访问/请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页)、排队等待(秒杀)、降级(返回兜底数据或默认数据);
高并发系统常见的限流有:限制总并发数(数据库连接池)、限制瞬时并发数(如nginx的limit_conn模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(nginx的limit_req模块,用来限制每秒的平均速率);
另外还可以根据网络连接数、网络流量、CPU或内存负载等来限流 。
1.限流算法最简单粗暴的限流算法就是计数器法了,而比较常用的有漏桶算法和令牌桶算法;
1.1计数器
计数器法是限流算法里最简单也是最容易实现的一种算法 。比如我们规定,对于A接口来说,我们1分钟的访问次数不能超过100个 。
那么我们我们可以设置一个计数器counter,其有效时间为1分钟(即每分钟计数器会被重置为0),每当一个请求过来的时候,counter就加1,如果counter的值大于100,就说明请求数过多;
这个算法虽然简单,但是有一个十分致命的问题,那就是临界问题 。
如下图所示,在1:00前一刻到达100个请求,1:00计数器被重置,1:00后一刻又到达100个请求,显然计数器不会超过100,所有请求都不会被拦截;
然而这一时间段内请求数已经达到200,远超100 。
1.2 漏桶算法
如下图所示,有一个固定容量的漏桶,按照常量固定速率流出水滴;如果桶是空的,则不会流出水滴;流入到漏桶的水流速度是随意的;如果流入的水超出了桶的容量,则流入的水会溢出(被丢弃);
可以看到漏桶算法天生就限制了请求的速度,可以用于流量整形和限流控制;
1.3 令牌桶算法
令牌桶是一个存放固定容量令牌的桶,按照固定速率r往桶里添加令牌;桶中最多存放b个令牌,当桶满时,新添加的令牌被丢弃;
当一个请求达到时,会尝试从桶中获取令牌;如果有,则继续处理请求;如果没有则排队等待或者直接丢弃;
可以发现,漏桶算法的流出速率恒定或者为0,而令牌桶算法的流出速率却有可能大于r;
2.nginx基础知识Nginx主要有两种限流方式:按连接数限流(ngx_http_limit_conn_module)、按请求速率限流(ngx_http_limit_req_module);
【Nginx源码研究之nginx限流模块详解说明】学习限流模块之前还需要了解nginx对HTTP请求的处理过程,nginx事件处理流程等;
推荐阅读
- 在centos7中安装nginx的详细教程方法
- linux系统shell脚本定时统计Nginx下access.log的PV并发送给API保存到数据库
- nginx下配置openssl实现https的方法
- 浅谈nginx反向代理中神奇的斜线
- Nginx配置Https安全认证的解决方法
- 道家文化,武汉大学传统文化研究中心
- 移动直播软件源码开发,直播APP源码开发,直播平台源码开发
- 成都电子科技大学,电子科技大学研究生院
- 研究生简历自我评价 做自我评价如下
- 项目可行性研究报告范本 可行性研究报告范文