www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]什么是限流? ? 限流可以認(rèn)為服務(wù)降級(jí)的一種,限流就是限制系統(tǒng)的輸入和輸出流量已達(dá)到保護(hù)系統(tǒng)的目的。一般來(lái)說(shuō)系統(tǒng)的吞吐量是可以被測(cè)算的,為了保證系統(tǒng)的穩(wěn)定運(yùn)行,一旦達(dá)到的需要限制的閾值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:


什么是限流?

限流可以認(rèn)為服務(wù)降級(jí)的一種,限流就是限制系統(tǒng)的輸入和輸出流量已達(dá)到保護(hù)系統(tǒng)的目的。一般來(lái)說(shuō)系統(tǒng)的吞吐量是可以被測(cè)算的,為了保證系統(tǒng)的穩(wěn)定運(yùn)行,一旦達(dá)到的需要限制的閾值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延遲處理,拒絕處理,或者部分拒絕處理等等。

坐地鐵上班的同學(xué)對(duì)于這張圖片是不是都不會(huì)陌生。高并發(fā)系統(tǒng)三大利器之限流基本上在上下班的早晚高峰我們就會(huì)發(fā)現(xiàn)進(jìn)站的閘機(jī)會(huì)有一部分是關(guān)閉的。為什么地鐵站會(huì)關(guān)閉一部分閘機(jī)呢?這就是為了限流。畢竟地鐵站就那么大,可容納的人數(shù)也就那么多。如果大家一股腦全部擠進(jìn)地鐵站是不是又會(huì)發(fā)生踩踏事件什么的。這是生活中的限流。還有我們?nèi)ゾ皡^(qū)玩,景區(qū)的門票是不是也是固定的,每天就賣那么多張,賣完即止。限流是不是和我們的生活也息息相關(guān)。

為什么要限流?

開篇也有說(shuō)到限流是為了「保證系統(tǒng)的穩(wěn)定運(yùn)行」。假設(shè)我們一個(gè)系統(tǒng)一小時(shí)之最多只能處理10000個(gè)請(qǐng)求,但是一小時(shí)流量突增10倍,這突增的流量我們?nèi)绻贿M(jìn)行限制的話,任由它直接進(jìn)入系統(tǒng)的話,是不是直接會(huì)把我們的系統(tǒng)弄癱瘓,就無(wú)法對(duì)外提供服務(wù)了。本人就曾經(jīng)被這個(gè)所坑過(guò),有一次把爬蟲開關(guān)攔截的開關(guān)給關(guān)掉了,突然有一大波的爬蟲流量進(jìn)入系統(tǒng)中,我們也沒(méi)有把這些爬蟲請(qǐng)求進(jìn)行攔截,然后一股腦的全部給轉(zhuǎn)發(fā)到下游系統(tǒng)里面去了。下游系統(tǒng)直接就找上門來(lái)了,造成他們的服務(wù)發(fā)生大量的超時(shí)。比如地鐵早高峰的時(shí)候我們?nèi)绻粚?duì)地鐵站進(jìn)行限流的話,大家是不是都會(huì)往地鐵站擠,然后再往地鐵里面擠,擠不上都還要擠。會(huì)導(dǎo)致地鐵門都關(guān)不上,然后地鐵就開不走,會(huì)導(dǎo)致越來(lái)越多的人堵在地鐵站。然后最后就會(huì)導(dǎo)致整條地鐵線都阻塞了。上班就妥妥的遲到了(對(duì)于程序員說(shuō)大多數(shù)應(yīng)該是彈性制的所以也不存在遲到這一說(shuō)法)。

限流操作有哪些?

拒絕服務(wù)

這個(gè)是最最簡(jiǎn)單粗暴的做法了,直接把請(qǐng)求直接拒絕掉。比如早高峰坐地鐵的時(shí)候,直接讓進(jìn)入1000個(gè)人,剩下多出來(lái)的人不讓坐地鐵了。直接把入站口給關(guān)閉了。

服務(wù)降級(jí)

將系統(tǒng)的所有功能服務(wù)進(jìn)行一個(gè)分級(jí),當(dāng)系統(tǒng)出現(xiàn)問(wèn)題,需要緊急限流時(shí),可將不是那么重要的功能進(jìn)行降級(jí)處理,停止服務(wù),這樣可以釋放出更多的資源供給核心功能的去用。假設(shè)有一個(gè)功能新用戶注冊(cè)完,要給用戶發(fā)送多少優(yōu)惠券。這時(shí)候服務(wù)降級(jí)的話就可以直接把送券服務(wù)關(guān)掉,讓服務(wù)快速響應(yīng),提高系統(tǒng)處理能力。應(yīng)用到早高峰坐地鐵的時(shí)候比如在人民廣場(chǎng)這個(gè)大站點(diǎn),處理不過(guò)來(lái)了那么多人換乘,我們是不是可以直接地鐵一號(hào)線在人民廣場(chǎng)不停,直接到下一站在停,這時(shí)候經(jīng)過(guò)人民廣場(chǎng)換乘的人就少多了。

延遲處理

把請(qǐng)求全部放入到隊(duì)列中,真正處理的話,就從隊(duì)列里面依次去取,這樣的話流量比較大的情況可能會(huì)導(dǎo)致處理不及時(shí),會(huì)有一定的延時(shí)。雙十一零點(diǎn)我們付款的時(shí)候,去查詢訂單的狀態(tài)是不是也會(huì)有一定的延時(shí),不像在平時(shí)付完款訂單狀態(tài)就變成了付款狀態(tài)。

特權(quán)處理

這個(gè)模式需要將用戶進(jìn)行分類,通過(guò)預(yù)設(shè)的分類,讓系統(tǒng)優(yōu)先處理需要高保障的用戶群體,其它用戶群的請(qǐng)求就會(huì)延遲處理或者直接不處理。我們?nèi)ャy行辦理業(yè)務(wù)的時(shí)候是不是也會(huì)經(jīng)常需要排隊(duì),但是是不是經(jīng)常會(huì)VIP用戶、什么白金卡用戶,直接不需要排隊(duì),直接一上來(lái)就可以辦理業(yè)務(wù),還優(yōu)先處理這些人的業(yè)務(wù)。是不是特羨慕這些人,哎 羨慕也沒(méi)辦法誰(shuí)叫人家有錢咧。

限流的實(shí)現(xiàn)方式?

計(jì)數(shù)器方法

這是最簡(jiǎn)單的限流算法了,系統(tǒng)里面維護(hù)一個(gè)計(jì)數(shù)器,來(lái)一個(gè)請(qǐng)求就加1,請(qǐng)求處理完成就減1,當(dāng)計(jì)數(shù)器大于指定的閾值,就拒絕新的請(qǐng)求。是通過(guò)全局的總求數(shù)于設(shè)置的閾值來(lái)達(dá)到限流的目的。通常應(yīng)用在池化技術(shù)上面比如:「數(shù)據(jù)庫(kù)連接池、線程池」等中應(yīng)用。這種方式的話限流不是「平均速率」的。扛不住突增的流量。

漏桶算法

高并發(fā)系統(tǒng)三大利器之限流我們可以看到水是可以持續(xù)流入漏桶里面的,底部也是勻速的流出,如果流入的速率大于底部流出的速率,以及漏桶的水超過(guò)桶的大小就會(huì)發(fā)生益出。請(qǐng)求一經(jīng)過(guò)漏桶的過(guò)濾,不管你請(qǐng)求有多少,速率有多快,我反正就這么個(gè)速度處理。我們平時(shí)坐地鐵的時(shí)候是不是也是這樣,不管你乘客有多少,反正就是隔5min發(fā)一趟車。那早高峰的時(shí)候你5min鐘一趟車根本就不夠用啊,上班的人太多啊,你需要加快速度處理啊,所以可能早高峰改為3min一趟,動(dòng)態(tài)調(diào)整速率。

令牌桶

高并發(fā)系統(tǒng)三大利器之限流
在這里插入圖片描述

看圖的話是不是令牌桶和漏桶都差不多,只不過(guò)令牌桶新增了一個(gè)勻速生產(chǎn)令牌的中間人以恒定的速度往桶里面放令牌,如果令牌的數(shù)量超過(guò)里桶的限制的話,令牌就會(huì)溢出,這時(shí)候就直接舍棄多余的令牌。每個(gè)請(qǐng)求過(guò)來(lái)必須拿到桶里面拿到了令牌才允許請(qǐng)求(拿令牌的速度是不限制的,這就意味著如果瞬間有大量的流量請(qǐng)求進(jìn)來(lái),可以短時(shí)間內(nèi)拿到大量的令牌),拿不到令牌的話直接拒絕。這個(gè)令牌桶的思想是不是跟我們java里面的「Semaphore」 有點(diǎn)類似。Semaphore 是拿信號(hào)量,用完了就還回去。但是令牌桶的話,不需要還回去,因?yàn)榱钆茣?huì)定時(shí)的補(bǔ)充。令牌桶算法我們可以通過(guò)Google開源的guava包創(chuàng)建一個(gè)令牌桶算法的限流器。

總結(jié)

  • 以上粗略的介紹了幾種單機(jī)的限流思想,大家可以根據(jù)這個(gè)思想然后去實(shí)現(xiàn)各種各樣的限流組件。
  • 我們的限流算法每個(gè)里面是不是都一個(gè)閾值,這個(gè)閾值設(shè)置為多少是不是比較難。閾值設(shè)置過(guò)大的話,服務(wù)可能扛不住,閾值設(shè)置小了會(huì)把用戶請(qǐng)求給誤殺,資源沒(méi)有得到最大的一個(gè)利用。
  • 分布式限流的話,以后有機(jī)會(huì)再講。

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒(méi)關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

高并發(fā)系統(tǒng)三大利器之限流

高并發(fā)系統(tǒng)三大利器之限流

高并發(fā)系統(tǒng)三大利器之限流

長(zhǎng)按訂閱更多精彩▼

高并發(fā)系統(tǒng)三大利器之限流

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉