nginx的限流和閘道器gatway限流

2021-10-08 09:27:22 字數 2658 閱讀 7538

1.場景描述

例如**首頁採取二級快取操作,減少對資料庫和redis的壓力,但是遇到惡意請求還是不能有效的緩解壓力,限流就能起到保護措施的作用了

nginx提供了兩種限流方案:

3.控制速率

nginx常用控制速率的方式之一就是採用漏桶演算法

3.1漏桶演算法實現控制速率限流

概述: 漏桶演算法思想就是水(請求)滴入漏桶漏桶裡,漏桶以一定速率出水(響應速率),當水滴入的速率過大時會溢位漏桶(訪問速率大於響應速率),然後就拒絕請求,漏桶演算法能強轉限制資料的傳輸速率

配置示例

在nginx的nginx.conf配置檔案

}具體配置示例修改/usr/local/openresty/nginx/conf/nginx.conf:

}}需要關注以下配置

limit_req_zone $binary_remote_addr zone=myratelimit:

10m rate=

2r/s;

server

}}

說明:

1.binary_remote_addr 是一種key,表示基於 remote_addr(客戶端ip) 來做限流

2.zone=myratelimit:10m :表示能儲存的訪問ip的位址,1m能儲存16000ip位址的訪問資訊,10m可以儲存16w ip位址訪問資訊

3.rate用於設定最大訪問速率,rate=2r/s 表示每秒能處理2個請求,也就是每500毫秒處理一次請求,若1s內再有請求就會被拒絕

4.location /:攔截的請求,表示location下所有的請求

3.2突發性限流

場景:當正常流量突然增大,超出的請求將被拒絕,無法處理突發流量,可以結合burst引數

server 

}

burst:會將超出的5個請求放入佇列中,按照處理速率處理,會乙個個進行處理.

但是會造成請求的等待時間過長,為了解決這個問題,可以加關鍵字nodelay,就會一次性的處理這些請求如

server 

}

nginx實現限流的總結

nginx限流採用的演算法是漏桶演算法,水滴入到漏桶中,再按一定速率流出,當滴入的速率大於流出的速率,就會水溢位,也就是請求速率大於處理速率的時候就會拒絕請求。

具體的做法是 在nginx.conf檔案中 配置rate 處理速率,配置漏桶能儲存的最大儲存量,1m能儲存16000個ip位址的訪問資訊

burst:nodelay能處理突發性請求

使用場景:限制客戶端訪問服務端微服務的流量

gatway是採用令牌桶演算法實現限流的,配置加入令牌的速率,和令牌桶能放入的最大令牌數量,只有請求獲得了令牌才能訪問,沒有獲得令牌就會拒絕訪問,令牌桶演算法是基於redis實現的,預設使用redis的ratelimter限流演算法實現的

具體步驟:

1.新增依賴

2.在啟動類中定義方法返回物件 keyresolver

@enableeurekaclient

public

class

/** * 通過keyresolver來指定限流的key

* @return

*/@bean

public keyresolver ipkeyresolver()

};}}

3.在配置中宣告令牌產生的速率,令牌桶的大小

filters:

- stripprefix=

1- name: requestratelimiter #請求數限流 名字不能隨便寫

args:

key-resolver:

"#" redis-rate-limiter.replenishrate:

1 #令牌桶每秒填充平均速率

redis-rate-limiter.burstcapacity:

1 #令牌桶總容量

步驟總結:首先引入依賴,在springboot啟動類中,指定限流的限流指標,通過@bean交由ioc管理,例如宣告乙個ipkeyresolver,以ip作為限流的指標。在配置檔案中,配置令牌桶每秒填充的速率和令牌桶總容量,限流的指

nginx 實現閘道器限流之一 漏桶演算法

漏桶演算法 leaky bucket 是網路世界中流量整形 traffic shaping 或速率限制 rate limiting 時經常使用的一種演算法,它的主要目的是控制資料注入到網路的速率,平滑網路上的突發流量。漏桶演算法提供了一種機制,通過它,突發流量可以被整形以便為網路提供乙個穩定的流量。...

nginx的限流問題

limit req zone binary remote addr zone req one 10m rate 100r s server 解釋 rate 100r s 意思是每個位址每秒只能請求100次。burst 10 表示 一共有10塊令牌,並且每秒鐘只新增1塊令牌。nginx利用limit模...

nginx 如何實現讀寫限流的方法

這篇文章主要介紹了nginx 如何實現讀寫限流的方法的相關資料,這裡提供例項 及如何配置,需要的朋友可以參考下 nginx 讀寫限流 前段時間,開發了乙個供外部呼叫的api,領導說要限流,請求單個ip,每秒50讀次,寫10次 萬能的nginx,幾行配置搞定?1 2 3 4 5 6 7 8 9 10 ...