nginx 如何实现读写限流的方法

nginx 读写限流

前段时间,开发了一个供外部调用的api,领导说要限流,请求单个IP,每秒50读次,写10次

万能的nginx,几行配置搞定

# 先定义好规则,需要写在server外面
limit_req_zone $binary_remote_addr $uri zone=api_write:20m rate=10r/s; # 写
limit_req_zone $binary_remote_addr $uri zone=api_read:20m rate=50r/s;  # 读

# 把需要限速的接口应用上上面的规则

# 写10/秒
location = /api/v1/trade {
  limit_req zone=api_write burst=10;
  proxy_pass http://api_server;
}
# 查询50/秒
location /api/v1/query {
  limit_req zone=api_read burst=50;
  proxy_pass http://api_server;
}

nginx -s reload

还是那句话,应用程序不需要关心,一句代码都不用动

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • RateLimiter 源码分析

    俗话说得好,缓存,限流和降级是系统的三把利剑.刚好项目中每天早上导出数据时因调订单接口频率过高,订单系统担心会对用户侧的使用造成影响,让我们对调用限速一下,所以就正好用上了. 常用的限流算法有2种:漏桶算法和令牌桶算法. 漏桶算法 漏桶算法:请求先进入"桶"中,然后桶以一定的速率处理请求.如果请求的速率过快会导致桶溢出.根据描述可以知道,漏桶算法会强制限制请求处理的速度.任你请求的再快还是再慢,我都是以这种速率来处理. 但是对于很多情况下,除了要求能够限制平均处理速度外,还要求能允许一

  • 来自CSDN的"无限流"分页程序

    以下是代码片段:  '******************************************************************   '** 本程序名:"无限流"分页程序   '** 作者:Arbiter(AAsx)   '** 版本:Million Level   '**   '** QQ:22222xx   '** Email:Arbiter@21cn.com   '** http://www.imagecity.org/   '*************

  • asp中"无限流"分页程序代码

    <% '****************************************************************** '** 本程序名:"无限流"分页程序 '** 作者:Arbiter(AAsx) '** 版本:Million Level '** '** QQ:22222xx '** Email:Arbiter@21cn.com '** http://www.imagecity.org/ '*********************************

  • nginx 如何实现读写限流的方法

    nginx 读写限流 前段时间,开发了一个供外部调用的api,领导说要限流,请求单个IP,每秒50读次,写10次 万能的nginx,几行配置搞定 # 先定义好规则,需要写在server外面 limit_req_zone $binary_remote_addr $uri zone=api_write:20m rate=10r/s; # 写 limit_req_zone $binary_remote_addr $uri zone=api_read:20m rate=50r/s; # 读 # 把需要限

  • Nginx使用limit_req_zone对同一IP访问进行限流的方法

    nginx可以使用ngx_http_limit_req_module模块的limit_req_zone指令进行限流访问,防止用户恶意攻击刷爆服务器.ngx_http_limit_req_module模块是nginx默认安装的,所以直接配置即可. 首先,在nginx.conf文件中的http模块下配置 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 说明:区域名称为one(自定义),占用空间大小为10m,平均处理的请求频率不能超

  • nginx使用内置模块配置限速限流的方法实例

    有时候 NGINX 面对一些特殊的场景时,需要进行一定的限速限流的配置,比如一个官网,可能前端静态文件是非常小的,但是同时配置的还有一些 apk 包,这些包如果不做任何限制,可能会形成比较大的负载或者带宽的压力,我这边碰到了,今天就来针对这个问题处理一下. 没有限制之前,对应的包下载速度如下: 添加如下配置,进行一定的限制: http { ...#省略 limit_conn_zone $binary_remote_addr zone=addr:10m; ...#省略 } server { lis

  • SpringBoot服务上实现接口限流的方法

    Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面. 在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数:或者按照某种规则进行限流,如限制ip的单位时间访问次数等. 之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显sentinel的功能更为全面和完善.来看一下sentinel的简介: https://github.com/spring-cloud-incubator/spring-cloud-alibab

  • 使用nginx实现分布式限流的方法

    1.前言 一般对外暴露的系统,在促销或者黑客攻击时会涌来大量的请求,为了保护系统不被瞬间到来的高并发流量给打垮, 就需要限流 . 本文主要阐述如何用nginx 来实现限流. 听说 Hystrix 也可以, 各位有兴趣可以去研究哈 . 2.首先部署一个对外暴露接口的程序 我这里部署的是一个spring boot 项目 里面暴露了如下接口, 很简单 暴露了一个 get 请求返回 hello world 的restful 接口. 将此程序部署到 linux 服务器上. 部署步奏不再赘述, 自行百度 s

  • 基于Redis实现分布式应用限流的方法

    限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务. 前几天在DD的公众号,看了一篇关于使用 瓜娃 实现单应用限流的方案 -->原文,参考<redis in action> 实现了一个jedis版本的,都属于业务层次限制. 实际场景中常用的限流策略: Nginx接入层限流 按照一定的规则如帐号.IP.系统调用逻辑等在Nginx层面做限流 业务应用系统限流 通过业务代码控制流量这个流量可以被称为信号量,可以理解成是一种锁,它

  • Go实现各类限流的方法

    前 言 在开发高并发系统时,我们可能会遇到接口访问频次过高,为了保证系统的高可用和稳定性,这时候就需要做流量限制,你可能是用的 Nginx 这种来控制请求,也可能是用了一些流行的类库实现.限流是高并发系统的一大杀器,在设计限流算法之前我们先来了解一下它们是什么. 限 流 限流的目的是通过对并发访问请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务.排队或等待.降级等处理.通过对并发(或者一定时间窗口内)请求进行限速来保护系统,一旦达到限制速率则拒绝服务(定

  • 使用Java实现Redis限流的方法

    1.概述   限流的含义是在单位时间内确保发往某个模块的请求数量小于某个数值,比如在实现秒杀功能时,需要确保在10秒内发往支付模块的请求数量小于500个.限流的作用是防止某个段时间段内的请求数过多,造成模块因高并发而不可用. 2.zset有序集合相关命令与限流   zset也叫有序集合,是Redis的一种数据类型,在其中每个值(value)都会有一个对应的score参数,以此来描述该值的权重分值.可以通过如下形式的命令向zset有序集合里添加元素: zadd key score value   

  • 基于redis+lua进行限流的方法

    1,首先我们redis有很多限流的算法(比如:令牌桶,计数器,时间窗口)等,但是都有一定的缺点,令牌桶在单项目中相对来说比较稳定,但是在分布式集群里面缺显的不那么友好,这时候,在分布式里面进行限流的话,我们则可以使用redis+lua脚本进行限流,能抗住亿级并发 2,下面说说lua+redis进行限流的做法开发环境:idea+redis+lua第一:打开idea的插件市场,然后搜索lua,点击右边的安装,然后安装好了,重启即可 第二:写一个自定义限流注解 package com.sport.sp

  • 利用Redis实现访问次数限流的方法详解

    假设我们要做一个业务需求,这个需求就是限制用户的访问频次.比如1分钟内只能访问20次,10分钟内只能访问200次.因为是用户维度的场景,性能肯定是要首先考虑,那么适合这个场景的非Redis莫属. 最简单的实现,莫过于只是用incr进行计数操作,于是有了下面的代码: long count = redisTemplate.opsForValue().increment("user:1:60"); if (count > maxLimitCount) { throw new Limit

随机推荐