关键知识点:
高并发系统有三把利器用来保护系统:缓存、降级和限流
限流算法:计数器 、漏桶算法、令牌桶算法
限流算法主要有(令牌桶算法、漏桶算法)
1-1、令牌桶算法

算法思想是:
1-2、漏桶算法

算法思想是:
从作用上来说,漏桶和令牌桶算法最明显的区别就是是否允许突发流量(burst)的处理,漏桶算法能够强行限制数据的实时传输(处理)速率,对突发流量不做额外处理;而令牌桶算法能够在限制数据的平均传输速率的同时允许某种程度的突发传输。
Nginx按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值。
http{
...
limit_req_zone $binary_remote_addr zone=one:30m rate=1r/s;
# limit_req_zone $binary_remote_addr $uri zone=two:30m rate=30r/s;
# limit_req_zone $binary_remote_addr $request_uri zone=three:30m rate=10r/s;
...
server {
...
location /demo
{
index index.php index.html;
limit_req zone=one burst=4 nodelay;
limit_req_status 597; ##指定json格式
limit_req_status 598; ##指定html
}
error_page 598 /598.html; ## html格式
location = /598.html {
root html;
}
error_page 597 /597; ##json格式
location = /597 {
default_type application/json;
add_header Content-Type 'text/html; charset=utf-8';
return 200 '{"code":"200", "data": {111111111},"msg":"访问高峰期..."}';
}
}
}
http{
...
# limit_req_zone $binary_remote_addr zone=one:30m rate=1r/s;
# limit_req_zone $binary_remote_addr $uri zone=two:30m rate=30r/s;
# limit_req_zone $binary_remote_addr $request_uri zone=three:30m rate=10r/s;
limit_req_zone $request_uri zone=demo:30m rate=1r/s;
...
server{
...
location /demo
{
index index.php index.html;
limit_req zone=demo burst=4 nodelay;
limit_req_status 597; ##指定json格式
limit_req_status 598; ##指定html
}
error_page 598 /598.html; ## html格式
location = /598.html {
root html;
}
error_page 597 /597; ##json格式
location = /597 {
default_type application/json;
add_header Content-Type 'text/html; charset=utf-8';
return 200 '{"code":"200", "data": {111111111},"msg":"访问高峰期..."}';
}
}
}