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