摘要:大部分人都知道應(yīng)該增加,做請求頻率限制。假如超過服務(wù)能力,一般會造成整個接口服務(wù)停頓,或者應(yīng)用,或者帶來連鎖反應(yīng),將延遲傳遞給服務(wù)調(diào)用方造成整個系統(tǒng)的服務(wù)能力喪失。有必要在服務(wù)能力超限的情況下。這就要求在應(yīng)用層實現(xiàn)限制。
Rate limiting
RateLimiter 從概念上來講,速率限制器會在可配置的速率下分配許可證。
從最終用戶訪問安全的角度看,設(shè)想有人想暴力碰撞網(wǎng)站的用戶密碼;或者有人攻擊某個很耗費資源的接口;或者有人想從某個接口大量抓取數(shù)據(jù)。大部分 人都知道應(yīng)該增加 Rate limiting,做請求頻率限制。從安全角度,這個可能也是大部分能想到,但不一定去做的薄弱環(huán)節(jié)。
從整個架構(gòu)的穩(wěn)定性角度看,一般 SOA 架構(gòu)的每個接口的有限資源的情況下,所能提供的單位時間服務(wù)能力是有限的。假如超過服務(wù)能力,一般會造成整個接口服務(wù)停頓,或者應(yīng)用 Crash,或者帶來連鎖反應(yīng),將延遲傳遞給服務(wù)調(diào)用方造成整個系統(tǒng)的服務(wù)能力喪失。有必要在服務(wù)能力超限的情況下 Fail Fast。
另外,根據(jù)排隊論,由于 API 接口服務(wù)具有延遲隨著請求量提升迅速提升的特點,為了保證 SLA 的低延遲,需要控制單位時間的請求量。這也是 Little’s law 所說的。
所以,提供資源能夠支撐的服務(wù),將過載請求快速拋棄對整個系統(tǒng)架構(gòu)的穩(wěn)定性非常重要。這就要求在應(yīng)用層實現(xiàn) Rate limiting 限制。
Proxy 層的實現(xiàn),針對部分 URL 或者 API 接口進行訪問頻率限制Nginx 模塊
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location /search/ { limit_req zone=one burst=5; }
配置解釋
Java應(yīng)用層實現(xiàn)Google Guava 提供了一個 RateLimiter 實現(xiàn)
/** * Created by haoting.wang on 2017/3/13. */ public class RateLimiterDemo { //每秒處理一個 static RateLimiter rateLimiter = RateLimiter.create(1); private static int count = 10; static class Work implements Runnable{ int name; Work(int name){ this.name = name; } public void run() { rateLimiter.acquire(); System.out.println(name+"正在工作"); } } public static void main(String[] args){ for(int i = 0; i但是更好的限制方式是池, 線程池、數(shù)據(jù)庫連接池來限制訪問數(shù)量,將過載的請求放在隊列中,等待線程資源
這坑比啊 segmentfault,連個限流的標簽都沒,建個標簽還要聲望。mdzz
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39472.html
摘要:為安裝過濾器的偵聽器上的每個新請求調(diào)用服務(wù),路由表指定應(yīng)調(diào)用服務(wù)。使用了令牌桶算法來限流。 本博客是深入研究Envoy Proxy和Istio.io 以及它如何實現(xiàn)更優(yōu)雅的方式來連接和管理微服務(wù)系列文章的一部分。 這是接下來幾個部分的想法(將在發(fā)布時更新鏈接): 斷路器(第一部分) 重試/超時(第二部分) 分布式跟蹤(第三部分) Prometheus的指標收集(第四部分) rate ...
摘要:歡迎訪問我的歡迎訪問我的內(nèi)容所有原創(chuàng)文章分類匯總及配套源碼,涉及等本篇概覽本篇概覽本文是實戰(zhàn)系列的第八篇,經(jīng)過前面的學習,咱們對過濾器已了解得差不多,今天來補全過濾器的最后一個版塊限流默認的限流器是基于實現(xiàn)的,限流算法是大家熟悉的令牌桶關(guān)于歡迎訪問我的GitHubhttps://github.com/zq2599/blog_demos內(nèi)容:所有原創(chuàng)文章分類匯總及配套源碼,涉及Java、Doc...
摘要:限流算法最簡單粗暴的限流算法就是計數(shù)器法了,而比較常用的有漏桶算法和令牌桶算法計數(shù)器計數(shù)器法是限流算法里最簡單也是最容易實現(xiàn)的一種算法。 運營研發(fā)團隊 李樂 高并發(fā)系統(tǒng)有三把利器:緩存、降級和限流; 限流的目的是通過對并發(fā)訪問/請求進行限速來保護系統(tǒng),一旦達到限制速率則可以拒絕服務(wù)(定向到錯誤頁)、排隊等待(秒殺)、降級(返回兜底數(shù)據(jù)或默認數(shù)據(jù)); 高并發(fā)系統(tǒng)常見的限流有:限制總并發(fā)...
摘要:但是比較可惜的是已經(jīng)宣布對停止更新??蛻舳苏厦總€微服務(wù)客戶端都需要整合的客戶端封裝與配置,才能將監(jiān)控信息上報給展示以及實時的更改限流或熔斷規(guī)則等。下面我們就分兩部分來看看,如何使用來實現(xiàn)接口限流。 最近管點閑事浪費了不少時間,感謝網(wǎng)友libinwalan的留言提醒。及時糾正路線,繼續(xù)跟大家一起學習Spring Cloud Alibaba。 Nacos作為注冊中心和配置中心的基礎(chǔ)教程,...
閱讀 1358·2021-11-15 11:37
閱讀 3545·2021-11-11 16:55
閱讀 1800·2021-08-25 09:39
閱讀 3266·2019-08-30 15:44
閱讀 1783·2019-08-29 12:52
閱讀 1446·2019-08-29 11:10
閱讀 3288·2019-08-26 11:32
閱讀 3270·2019-08-26 10:16