分布式技術之限流

2021-10-19 18:38:14 字數 1327 閱讀 7599

ip限流

參看大神部落格

limit_req_zone 用來限制單位時間內的請求數,即速率限制,採用的漏桶演算法 "leaky bucket"。

limit_req 配合 limit_req_zone 使用

示例:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
第3引數:rate=1r/s表示允許相同標識的客戶端的訪問頻次,這裡限制的是每秒1次,還可以有比如100r/m,意思是每分鐘100次。

limit_req zone=mylimit burst=1 nodelay;
使用示例:

}限流狀態碼

設定了limit_req的流量限制,預設請求返回503錯誤**,為提高使用者體驗,可以轉換返回正常狀態碼200

}如果nginx經過多層**,特別是經過cdn伺服器,$binary_remote_addr 不再是真實的使用者ip,而是最新一次**伺服器的ip,可以通過$http_x_forwarded_for 獲取真實的使用者ip,$http_x_forwarded_for中包含多個ip,**ip追加在真實使用者ip後面,形式如下:

使用者ip,**ip1,**ip2,.....

}伺服器級別限流

limit_req_zone $server_name zone=serverlimit:10m rate=100r/s;
location /test
連線數限流

limit_conn_zone $binary_remote_addr zone=perip:10m;

limit_conn_zone $server_name zone=perserver:10m;

server

}

redis lua分布式限流

註解反思 我們專案有好幾個介面,呼叫公司中颱的介面,包括定時器的分片執行還有本人的多執行緒強行壓榨,哈哈。最後加上使用者的瘋狂請求,導致中颱的介面偶爾出現問題,主要是資料庫cpu達到100 昨晚專門做了個限流,那麼技術定型使用什麼呢?ratelimiter?這好像是單機才能玩,sentinel?這個...

分布式限流實戰

由於api介面無法控制呼叫方的行為,因此當遇到瞬時請求量激增時,會導致介面占用過多伺服器資源,使得其他請求響應速度降低或是超時,更有甚者可能導致伺服器宕機。限流 rate limiting 指對應用服務的請求進行限制,例如某一介面的請求限制為100個每秒,對超過限制的請求則進行快速失敗或丟棄。限流可...

分布式限流演算法

一 限流的作用 有高併發的系統中,由於api介面無法控制呼叫發的行為,因此如果遇到瞬時請求數量遞增,就會導致介面占用過多的伺服器子u,導致響應速度降低或者超時,甚至可能英雌導致伺服器宕機,尤其是資料庫伺服器。所以就有限流的思想,限制客戶端對伺服器端端的請求限制,如果在單位時間內超過該請求限制,就會執...