在上一篇文章Nginx負載均衡配置中,我們已經介紹了關於nginx的安裝與nginx負載均衡配置相關的知識,今天主要講講nginx是如何限流的。
隨着業務的擴散,系統並發越來越高時,有三樣利器用來保護系統,分別是緩存、降級和限流。
緩存:緩存是現在系統中必不可少的模塊,並且已經成為了高並發高性能架構的一個關鍵組件,緩存的目的是提升系統訪問速度和增大系統處理容量。
降級:這個在天貓雙11的時候非常常見,降級是當服務出現問題或者影響到核心流程時,需要暫時屏蔽掉,待高峰或者問題解決后再打開。
限流:限流的目的是通過對並發訪問/請求進行限速,或者對一個時間窗口內的請求進行限速來保護系統,一旦達到限制速率則可以拒絕服務、排隊或等待、降級等處理
vlimit_req_zone
1.1 定義:用於限制單一的IP地址的請求的處理速率,即速率限制。
1.2 使用方法
在http中添加: limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
第一個參數:$binary_remote_addr 表示通過remote_addr這個標識來做限制,“binary_”的目的是縮寫內存占用量,是限制同一客戶端ip地址。
第二個參數:zone=one:10m表示生成一個大小為10M,名字為one的內存區域,用來存儲訪問的頻次信息。
第三個參數:rate=1r/s表示允許相同標識的客戶端的訪問頻次,這里限制的是每秒1次,還可以有比如30r/m的。
在server中添加: limit_req zone=one burst=5 nodelay;
第一個參數:zone=one 設置使用哪個配置區域來做限制,與上面limit_req_zone 里的name對應。
第二個參數:burst=5,重點說明一下這個配置,burst爆發的意思,這個配置的意思是設置一個大小為5的緩沖區當有大量請求(爆發)過來時,超過了訪問頻次限制的請求可以先放到這個緩沖區內。
第三個參數:nodelay,如果設置,超過訪問頻次而且緩沖區也滿了的時候就會直接返回503,如果沒有設置,則所有請求會等待排隊。
1.3 測試效果
我們先來個未配置nginx限流的ab壓測結果:
注意:若ab test不太熟悉的朋友可以看看這篇文章:ab test壓力測試
在來看看配置nginx限流之后ab測試的壓測結果:
vlimit_conn_zone
2.1 定義:限制連接數,特別是來自單個IP地址的連接數。
2.2 使用方法
在http中添加: limit_conn_zone $binary_remote_addr zone=addr:10m;
釋義:$binary_remote_addr :表示通過remote_addr這個標識來做限制,“binary_”的目的是縮寫內存占用量,是限制同一客戶端ip地址。zone指定一個共享內存區域名稱,大小為10m。當超過此限制時,服務器將返回錯誤
在server中添加: limit_conn addr 1;
釋義:每個ip只允許1個連接,使用的是addr共享區域
2.3 測試效果
v源碼地址
https://github.com/toutouge/javademosecond/tree/master/hellospringboot
作 者:請叫我頭頭哥
出 處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!