当前位置: 首页 > news >正文

麻涌镇仿做网站南宁网站制作公

麻涌镇仿做网站,南宁网站制作公,广告设计专业术语,4a广告公司前言 其它项目组需要调用接口,添加接口限流,防止项目被狂掉宕机。生产用了openresty,所以在openresty上添加按接口限流,同时,需按照不同接口有不同的限流规则,使用openresty中内置的漏桶算法方式限流。 漏…

前言

其它项目组需要调用接口,添加接口限流,防止项目被狂掉宕机。生产用了openresty,所以在openresty上添加按接口限流,同时,需按照不同接口有不同的限流规则,使用openresty中内置的漏桶算法方式限流。

漏桶算法

漏桶算法思路简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。

通俗解释。

比如设置rate为100,burst为50,即允许1s放进来100个请求,桶大小为50。

那么1s内:

第1-100个请求会访问成功。

第101-150个请求会进入burst。

第150个请求之后的会直接失败返回。

openresty的说明文档:https://github.com/openresty/lua-resty-limit-traffic/blob/master/lib/resty/limit/req.md

限流配置

使用OpenResty的漏桶算法进行限流配置,不同接口配置不同的标准,所以测试了两个接口test1和test2

主要分两步:

  1. 添加限流使用的lua脚本
  2. 在反向代理中配置限流的lua脚本

ps: 因为大多数使用情况还是会反向代理,所以直接在反向代理中配置lua

添加lua脚本01和02的区别,仅限于漏桶的参数配置不同

添加lua脚本01

lualib\utils 路径下创建lua脚本

lua脚本内容:

-- utils/limit_req_leaky_bucket.lua
local limit_req = require "resty.limit.req"-- rate:  5/s即为每秒3个请求,增加桶容量为1/s,超过5/s不到(5+1)/s的delay,排队等候
local lim, err = limit_req.new("my_limit_req_store1", 5, 1)
if not lim thenngx.log(ngx.ERR, "failed to instantiate a resty.limit.req object: ", err)return ngx.exit(500)
endlocal _M = {}function _M.incoming()local key = ngx.var.binary_remote_addrlocal delay, err = lim:incoming(key, true)if not delay thenif err == "rejected" thenreturn ngx.exit(503) -- 超过的请求直接返回503endngx.log(ngx.ERR, "failed to limit req: ", err)return ngx.exit(500)end-- 此方法返回,当前请求需要delay秒后才会被处理,和他前面对请求数-- 所以此处对桶中请求进行延时处理,让其排队等待,就是应用了漏桶算法-- 此处也是与令牌桶的主要区别if delay >= 0.001 thenngx.sleep(delay)end
endreturn _M

添加lua脚本02

lualib\utils 路径下创建lua脚本

lua脚本内容:

-- utils/limit_req_leaky_bucket.lua
local limit_req = require "resty.limit.req"-- rate:  3/s即为每秒3个请求,增加桶容量为1/s,超过3/s不到(3+1)/s的delay,排队等候
local lim, err = limit_req.new("my_limit_req_store2", 3, 1)
if not lim thenngx.log(ngx.ERR, "failed to instantiate a resty.limit.req object: ", err)return ngx.exit(500)
endlocal _M = {}function _M.incoming()local key = ngx.var.binary_remote_addrlocal delay, err = lim:incoming(key, true)if not delay thenif err == "rejected" thenreturn ngx.exit(503) -- 超过的请求直接返回503endngx.log(ngx.ERR, "failed to limit req: ", err)return ngx.exit(500)end-- 此方法返回,当前请求需要delay秒后才会被处理,和他前面对请求数-- 所以此处对桶中请求进行延时处理,让其排队等待,就是应用了漏桶算法-- 此处也是与令牌桶的主要区别if delay >= 0.001 thenngx.sleep(delay)end
endreturn _M

在nginx.conf中添加配置文件

# --- 限流 ---
worker_processes  1;events {worker_connections  1024;
}
# ------------http {# --- 反向代理 ---include       /etc/nginx/conf.d/*.conf;# -----------------------include       mime.types;default_type  application/octet-stream;sendfile        on;#keepalive_timeout  0;keepalive_timeout  65;# --- 限流 ---lua_code_cache on;# 共享内存lua_shared_dict my_limit_req_store1 100M;lua_shared_dict my_limit_req_store2 100M;# -----------# --- 反向代理 ---upstream backend_server {server 127.0.0.1:8080;}# -----------------------server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}location /test1 {# --- 限流 ---access_by_lua_block {local limit_count = require "utils.limit_req_leaky_bucket1"-- 对于内部重定向或子请求,不进行限制。因为这些并不是真正对外的请求。if ngx.req.is_internal() thenreturnendlimit_count.incoming()}# ------------# --- 反向代理 ---# 如果内容源是反向代理proxy_pass http://backend_server;proxy_set_header Host $host;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 60;proxy_read_timeout 600;proxy_send_timeout 600;# -----------------------}location /test2 {# --- 限流 ---access_by_lua_block {local limit_count = require "utils.limit_req_leaky_bucket2"-- 对于内部重定向或子请求,不进行限制。因为这些并不是真正对外的请求。if ngx.req.is_internal() thenreturnendlimit_count.incoming()}# ------------# --- 反向代理 ---# 如果内容源是反向代理proxy_pass http://backend_server;proxy_set_header Host $host;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 60;proxy_read_timeout 600;proxy_send_timeout 600;# -----------------------}}}

参考

http://www.guanshanw.com/post/67951.html

http://www.yayakq.cn/news/338240/

相关文章:

  • 专业积分商城网站制作单个页面的网站
  • 做网站能用思源黑体吗wordpress怎么导入demo文件
  • 河北中太建设集团有限公司网站详情页设计详细教程
  • 服装网站建设目标客户wordpress给图片加特效
  • 一站式网站建设教育类网站源码
  • 手机可以做3d动漫视频网站网优工程师前景和待遇
  • 如何在百度开个网站互联网站建设维护
  • 我做网站价格微信小程序电脑端打开
  • 江门网站快速排名优化营销型网站建设网站手机
  • 群晖做网站服务器 套件某网站突然不能浏览了
  • 校园网站制作方法深圳有做网站公司
  • 网站设计制作从哪crm营销
  • 浙江网站建设优化网站编排页面
  • 做seo推广网站潍坊网站定制公司
  • 双语企业网站wordpress 自定义rss
  • 网站作品集韩国漫画漫免费观看免费
  • 合肥网站网站建设北京正规网站建设有几种
  • 建设无障碍网站背景全屏网站
  • vi设计品牌图片企业网站优化与推广
  • 网站建设丂金手指科杰全免费云游戏网页在线玩
  • 网站 永久关停 请示安卓门户网站开发
  • 南宁市住房和城乡建设局网站html5门户网站模板
  • steam官方网站下载抖音代运营合同模板免费
  • 网站开发 职位描述网站建设和维护实训
  • 外贸网站优化谷歌关键词排名php网站如何导入数据库
  • 建设报考网站查询成绩可以设计房子布局的软件
  • 在线做托福的网站东莞网站建设周期
  • 易语言用电脑做网站服务器海南新闻在线新闻中心
  • 建设网站不要服务器可以吗上海4a广告公司排名
  • 深圳商业网站建设怎么样嘉兴建企业网站