Open onvno opened 5 years ago
文中提到了Nginx+Lua的使用,找了一篇文章
Lua原来这么好用
Lua 教程:菜鸟教程
Lua 有哪些优点,适用于哪些场景?
C\C++的绝好伴侣,C\C++是静态编译型语言,Lua是动态解释型语言.当然,要做到动态也不是不行,C++可以用模板,C可以用宏,但是大量使用这些特性的项目代码是不能看的...所以,C\C++ + Lua = 性能 + 动态性. 一边是性能,一边是灵活.当前可以看到这部分用的最好的例子,ngx_lua,迅雷的blot界面引擎,WOW的脚本引擎,应该还有其他,涉猎不光不知道的更多了
Token Bucket:定时的往每个 bucket 内放入 token,然后每个请求都会减去 token,假如没有 token 的话就采取限流措施,能够限制平均请求频率; Leaky Bucket:做个缓冲队列,所有请求进入 bucket 排队,超过 bucket size 则丢弃,能够应付流量暴涨,请求集中; 拿 TJ 的一个项目来说:RateLimiter 算是一个 Token Bucket 的实现,每过一个 duration,就让 bucket 重新填满,优点是处理简单,快速,缺点还是是无法避免请求的集中效应,比如你限制每个小时 1000 次,那就是说,每个小时的开始的一秒内,爬虫可以用 1000 个并发(实际上,如果上个小时,爬虫没有任何请求,则可以在上个小时结束的一秒以及这个小时开始的时候的 2 秒内请求 2000 次)来搞垮你的服务器。当然了,你可以再加入更小的 duration,比如 10 分钟内 100 次,1 分钟内 10 次,这样的确可以避免这种情况,但是效率比较低下,毕竟要经过三层,而且,每层都要计数,一旦一层超过了,其它两层可能无法计数了,如果反过来,先检查最大的 1 小时,则还是会遇到每小时开始时候重置的问题。 所以,我们需要这个固定 duration 滑动起来,不会有 reset,就可以一定程度上避免了集中效应。
Token Bucket 滑动窗口限流 目前查到的 Node.js 实现的项目中,只有两个实现了滑动窗口限流: redback/RateLimit ratelimit.js
Token Bucket 滑动窗口限流 目前查到的 Node.js 实现的项目中,只有两个实现了滑动窗口限流:
redback/RateLimit ratelimit.js
上边的几种方案都是用了redis,无他,快
redis
Nginx限速模块初探:漏桶算法和令牌桶算法,对上边Node层的几个实现的解释
nginx 启用
$ nginx
停止
kill -HUP 主进程号或进程号文件路径 或者使用 cd /usr/local/nginx/sbin nginx -s reload 关闭 nginx -s stop
nginx启动、重启、关闭
nginx 403 问题查明是默认nginx启动用户为nginx,没哟读取web静态资源文件夹的权限,改为:
user root
还有一种原因是静态目录没有index.html
nginx 403 forbidden 二种原因
如何实现限流,通过Nginx配置。
文中提到了Nginx+Lua的使用,找了一篇文章
Lua原来这么好用
Lua 教程:菜鸟教程
Lua 有哪些优点,适用于哪些场景?
Node接口限流实现
上边的几种方案都是用了
redis
,无他,快Nginx限速模块探讨
Nginx限速模块初探:漏桶算法和令牌桶算法,对上边Node层的几个实现的解释