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

哈尔滨线下教学最新情况/通州优化公司

哈尔滨线下教学最新情况,通州优化公司,web网站开发pythonPPT,网站布局结构分类流量层限流: Nginx之 IP 限流(限制同一ip单位时间访问数) # $binary_remote_addr 关键字 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址 # zoneiplimit:20m 名叫…

流量层限流:

Nginx之 IP 限流(限制同一ip单位时间访问数)

# $binary_remote_addr  关键字 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址
# zone=iplimit:20m 名叫iplimit的内存区域,大小为20兆 (用来记录访问频率信息)
# rate=1r/s 每秒放行一个请求 rate=100r/m 每分钟放行100个 
limit_req_zone $binary_remote_addr zone=iplimit:20m rate=1r/s;# 服务级别限制
limit_req_zone $server_name zone=serverlimit:10m rate=10r/s;server {server_name www.test.com;location /app {proxy_pass	http://127.0.0.1:8080;# 基于IP地址限制# zone=iplimit 引用 limit_req_zone # burst=2 设置大小为2的缓冲区 假设当前突然涌入三个请求 丢弃一个# nodelay 缓冲区满了直接返回503异常 如果没有设置,则所有请求会依次等待排队limit_req zone=iplimit burst=2 nodelay;limit_req zone=serverlimit burst=1 nodelay;}
}

在这里插入图片描述

这里的burst参数主要采用了令牌桶算法。令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据数目,并允许突发数据的发送。

Nginx之 连接数 限流

# 连接数限制
limit_conn_zone $binary_remote_addr zone=conniplimit:10m;
limit_conn_zone $server_name zone=connserverlimit:10m;server {server_name www.test.com;location /app {proxy_pass	http://127.0.0.1:8080;# 每个ip最多10个连接limit_conn conniplimit 10;# 每个server最多保持500个连接limit_conn connserverlimit 500;# 异常指定返回状态 504(默认503)limit_req_status 504;limit_conn_status 504;}
}

两种方式可以组合使用

server {server_name www.test.com;location /app {limit_req zone=iplimit burst=2 nodelay;limit_req zone=serverlimit burst=1 nodelay;limit_conn conniplimit 10;limit_conn connserverlimit 500;limit_req_status 504;limit_conn_status 504;}
}

接口层限流

使用Nginx+Lua实现的Lua脚本:

local locks = require "resty.lock"
local function acquire()local lock =locks:new("locks")local elapsed, err =lock:lock("limit_key") --互斥锁local limit_counter =ngx.shared.limit_counter --计数器local key = "ip:" ..os.time()local limit = 5 --限流大小local current =limit_counter:get(key)if current ~= nil and current + 1> limit then --如果超出限流大小lock:unlock()return 0endif current == nil thenlimit_counter:set(key, 1, 1) --第一次需要设置过期时间,设置key的值为1,过期时间为1秒elselimit_counter:incr(key, 1) --第二次开始加1即可endlock:unlock()return 1
end
ngx.print(acquire())

实现中我们需要使用lua-resty-lock互斥锁模块来解决原子性问题(在实际工程中使用时请考虑获取锁的超时问题),并使用ngx.shared.DICT共享字典来实现计数器。如果需要限流则返回0,否则返回1。使用时需要先定义两个共享字典(分别用来存放锁和计数器数据):

Java代码 收藏代码

http {  ……  lua_shared_dict locks 10m;  lua_shared_dict limit_counter 10m;  
}  

有人会纠结如果应用并发量非常大那么redis或者nginx是不是能抗得住;不过这个问题要从多方面考虑:你的流量是不是真的有这么大,是不是可以通过一致性哈希将分布式限流进行分片,是不是可以当并发量太大降级为应用级限流;对策非常多,可以根据实际情况调节;像在京东使用Redis+Lua来限流抢购流量,一般流量是没有问题的。

对于分布式限流目前遇到的场景是业务上的限流,而不是流量入口的限流;流量入口限流应该在接入层完成,而接入层笔者一般使用Nginx。

http://www.lbrq.cn/news/1080541.html

相关文章:

  • 深圳做门户网站/网络营销推广
  • 专业旅游网站开发系统/电商推广和网络推广的区别
  • 新手建什么网站赚钱吗/百度seo在线优化
  • 重庆建网站哪家售后服务比较好/网站seo的内容是什么
  • 网站建设公司业务培训/巢湖网站制作
  • 汕头h5建站模板/小程序商城制作一个需要多少钱
  • 做图赚钱的网站有哪些/百度指数查询移民
  • 深圳网站建设专家/谷歌官网登录入口
  • 上海市网站建设电话号码/网站建设策划方案
  • 做网站 php和java/360优化大师官方版
  • 网站开发中的paml/网页seo是什么意思
  • wordpress固定链接设置文章连续性/山东seo网络推广
  • 做网上商城网站哪家好/推广计划怎么做
  • jsp网站地图生成器/江阴网站制作公司
  • 深圳it外包服务公司/百度seo运营工作内容
  • 网站优化北京/哪些网站可以seo
  • 有没有教做化学药品的网站/平台推广
  • wienj wordpress/seo网络营销外包公司
  • 南阳网站建设价格/镇江网站制作公司
  • py和php做网站哪个好/八大营销方式有哪几种
  • 乐清高端网站建设/外贸营销型网站制作
  • wordpress 糗百/seo优化分析
  • 网页设计和网站开发/网站seo方案模板
  • 百度一直不收录网站/wifi优化大师下载
  • 武汉推广系统/四川旅游seo整站优化站优化
  • 做简单的html网站/郑州网站推广哪家专业
  • 怎么让自己做的网站让别人看到/什么是搜索推广
  • 个人域名可以做KTV网站吗/做直销去哪里找客户
  • 济宁建设局网站招聘会/如何购买域名
  • 磁贴式网站模板/seo是什么岗位
  • 如何在 Mac OS 上安装 Cursor
  • Linux选择
  • springcloud04——网关gateway、熔断器 sentinel
  • USRP捕获手机/路由器数据传输信号波形(下)
  • ORACLE的表维护
  • 深入剖析 RocketMQ 分布式事务:原理、流程与实践