chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

海量請(qǐng)求下的接口并發(fā)解決方案

jf_ro2CN3Fa ? 來(lái)源:CSDN技術(shù)社區(qū) ? 作者:舍其小伙伴 ? 2022-12-14 13:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

設(shè)定一個(gè)場(chǎng)景,假如一個(gè)商品接口在某段時(shí)間突然上升,會(huì)怎么辦?

生活中的例子來(lái)說(shuō),假設(shè)冰墩墩在當(dāng)天晚上上熱搜之后,迅速有十幾萬(wàn)人去淘寶下單購(gòu)買(mǎi),此時(shí)并沒(méi)有做好對(duì)該商品的緩存預(yù)熱以及準(zhǔn)備,如何操作?

對(duì)于這個(gè)問(wèn)題,在電商高并發(fā)系統(tǒng)中,對(duì)接口的保護(hù)一般采用:緩存、限流、降級(jí) 來(lái)操作。

假設(shè)該接口已經(jīng)接受過(guò)風(fēng)控的處理,過(guò)濾掉一半的機(jī)器人腳本請(qǐng)求,剩下都是人為的下單請(qǐng)求。

服務(wù)限流

限流 主要的目的是通過(guò)對(duì)并發(fā)訪問(wèn)/請(qǐng)求進(jìn)行限速,或者對(duì)一個(gè)時(shí)間窗口內(nèi)的請(qǐng)求進(jìn)行限速,一旦達(dá)到限制速率則可以拒絕服務(wù)、排隊(duì)或等待、降級(jí)等處理。

限流算法

1. 漏斗算法

漏桶算法 是當(dāng)請(qǐng)求到達(dá)時(shí)直接放入漏桶,如果當(dāng)前容量已達(dá)到上限(限流值),則進(jìn)行丟棄或其他策略(觸發(fā)限流策略)。漏桶以固定的速率(根據(jù)服務(wù)吞吐量)進(jìn)行釋放訪問(wèn)請(qǐng)求(即請(qǐng)求通過(guò)),直到漏桶為空。

漏斗算法的思想就是,不管你來(lái)多少請(qǐng)求,我的接口消費(fèi)速度一定是小于等于流出速率的閾值的。

4e5dc4f0-7b61-11ed-8abf-dac502259ad0.png

可以基于消息隊(duì)列來(lái)實(shí)現(xiàn)。

2. 令牌桶算法

令牌桶算法 是程序以v(v = 時(shí)間周期 / 限流值)的速度向令牌桶中增加令牌,直到令牌桶滿(mǎn),請(qǐng)求到達(dá)時(shí)向令牌桶請(qǐng)求令牌,如果獲取成功則通過(guò)請(qǐng)求,如果獲取失敗觸發(fā)限流策略。

令牌桶算法和漏斗算法的思想差別在于,前者可以允許突發(fā)請(qǐng)求的發(fā)生。

4e6ecaa2-7b61-11ed-8abf-dac502259ad0.png

3. 滑窗算法

滑窗算法 是將一個(gè)時(shí)間周期分為N個(gè)小周期,分別記錄每個(gè)小周期內(nèi)訪問(wèn)次數(shù),并且根據(jù)時(shí)間滑動(dòng)刪除過(guò)期的小周期。

如下圖所示,假設(shè)時(shí)間周期為1分鐘,將1分鐘再分為2個(gè)小周期,統(tǒng)計(jì)每個(gè)小周期的訪問(wèn)數(shù)量,則可以看到,第一個(gè)時(shí)間周期內(nèi),訪問(wèn)數(shù)量為75,第二個(gè)時(shí)間周期內(nèi),訪問(wèn)數(shù)量為100,如果一個(gè)時(shí)間周期內(nèi)所有的小周期總和超過(guò)100的話(huà),則會(huì)觸發(fā)限流策略。

4e89500c-7b61-11ed-8abf-dac502259ad0.png

Sentinel的實(shí)現(xiàn) 和 TCP滑窗。

接入層限流

Nginx限流

Nginx 限流采用的是漏桶算法。

它可以根據(jù)客戶(hù)端特征,限制其訪問(wèn)頻率,客戶(hù)端特征主要指 IP、UserAgent等。使用 IP 比 UserAgent 更可靠,因?yàn)?IP 無(wú)法造假,UserAgent 可隨意偽造。

本地接口限流

Semaphore

Java 并發(fā)庫(kù) 的 Semaphore 可以很輕松完成信號(hào)量控制,Semaphore 可以控制某個(gè)資源可被同時(shí)訪問(wèn)的個(gè)數(shù),通過(guò) acquire() 獲取一個(gè)許可,如果沒(méi)有就等待,而 release() 釋放一個(gè)許可。

假如我們對(duì)外提供一個(gè)服務(wù)接口,允許最大并發(fā)數(shù)為40,我們可以這樣:

privatefinalSemaphorepermit=newSemaphore(40,true);

publicvoidprocess(){

try{
permit.acquire();
//TODO處理業(yè)務(wù)邏輯

}catch(InterruptedExceptione){
e.printStackTrace();
}finally{
permit.release();
}
}

具體的 Semaphore 實(shí)現(xiàn)參考源碼。

分布式接口限流

使用消息隊(duì)列

不管是用MQ中間件,或是Redis的List實(shí)現(xiàn)的消息隊(duì)列,都可以作為一個(gè) 緩沖隊(duì)列 來(lái)使用。思想就是基于漏斗算法。

當(dāng)對(duì)于一個(gè)接口請(qǐng)求達(dá)到一定閾值時(shí),就可以啟用消息隊(duì)列來(lái)進(jìn)行接口數(shù)據(jù)的緩沖,并根據(jù)服務(wù)的吞吐量來(lái)消費(fèi)數(shù)據(jù)。

4e9bb044-7b61-11ed-8abf-dac502259ad0.png

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶(hù)小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶(hù)、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

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

在接口做好風(fēng)控的前提下,發(fā)現(xiàn)了接口請(qǐng)求的并發(fā)量迅速上升,我們可以啟用兜底方案,進(jìn)行服務(wù)降級(jí)。

一般服務(wù)降級(jí)應(yīng)該用來(lái)對(duì)一些 不重要 或 不緊急 的服務(wù)或任務(wù)進(jìn)行服務(wù)的 延遲使用 或 暫停使用。

降級(jí)方案

停止邊緣業(yè)務(wù)

比如淘寶雙11前,就不可以查詢(xún)?nèi)齻€(gè)月前的訂單,對(duì)邊緣業(yè)務(wù)進(jìn)行降級(jí),保證核心業(yè)務(wù)的高可用。

拒絕請(qǐng)求

在接口請(qǐng)求并發(fā)量大于閾值,或是接口出現(xiàn)大量失敗請(qǐng)求等等突發(fā)情況,可以拒絕一些訪問(wèn)請(qǐng)求。

拒絕策略

隨機(jī)拒絕:隨機(jī)拒絕超過(guò)閾值的請(qǐng)求 。

拒絕舊請(qǐng)求:按照請(qǐng)求的時(shí)間,優(yōu)先拒絕更早收到的請(qǐng)求。

拒絕非核心請(qǐng)求:根據(jù)系統(tǒng)業(yè)務(wù)設(shè)置核心請(qǐng)求清單,將非核心清單內(nèi)的請(qǐng)求拒絕掉。

恢復(fù)方案

在實(shí)現(xiàn)服務(wù)降級(jí)之后,對(duì)于突增流量我們可以繼續(xù)注冊(cè)多個(gè)消費(fèi)者服務(wù)來(lái)應(yīng)對(duì)并發(fā)量,之后我們?cè)賹?duì)一些服務(wù)器進(jìn)行慢加載。

降級(jí)具體實(shí)現(xiàn)參考其他文章。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶(hù)小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶(hù)、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

數(shù)據(jù)緩存

在接口做好風(fēng)控的前提下,發(fā)現(xiàn)了接口請(qǐng)求的并發(fā)量迅速上升,我們可以分以下幾個(gè)操作執(zhí)行:

對(duì)訪問(wèn)請(qǐng)求使用分布式鎖進(jìn)行阻塞。

在這個(gè)短時(shí)間中,我們可以將對(duì)應(yīng)操作行的熱點(diǎn)數(shù)據(jù),緩存在緩存中間件中。

放行請(qǐng)求后,讓所有請(qǐng)求優(yōu)先操作緩存數(shù)據(jù)。

再將操作的結(jié)果通過(guò)消息隊(duì)列發(fā)送給消費(fèi)接口慢慢消費(fèi)。

4eac01ce-7b61-11ed-8abf-dac502259ad0.png

緩存問(wèn)題

假設(shè)我們操作的是一個(gè)庫(kù)存接口,此時(shí)數(shù)據(jù)庫(kù)中只有100個(gè)庫(kù)存。

那假如此時(shí)我們將一條數(shù)據(jù)放入緩存中,如果所有的請(qǐng)求都來(lái)訪問(wèn)這個(gè)緩存,那它還是被打掛,我們?cè)撛趺床僮鳎?/p>

讀寫(xiě)分離

第一種想法,讀寫(xiě)分離。

使用Redis的哨兵集群模式來(lái)進(jìn)行主從復(fù)制的讀寫(xiě)分離操作。讀的操作肯定大于寫(xiě)操作,等庫(kù)存被消費(fèi)到0時(shí),讀操作直接快速失敗。

4ebed39e-7b61-11ed-8abf-dac502259ad0.png

負(fù)載均衡

第二種想法,負(fù)載均衡。

在緩存數(shù)據(jù)后,如果所有請(qǐng)求都來(lái)緩存中操作這個(gè)庫(kù)存,不管是加悲觀鎖還是樂(lè)觀鎖,并發(fā)率都很低,此時(shí)我們可以對(duì)這個(gè)庫(kù)存進(jìn)行拆分。

我們可以參照 ConcurrentHashMap 中的 counterCells 變量的設(shè)計(jì)思想,將100個(gè)庫(kù)存拆分到10個(gè)緩存服務(wù)中,每個(gè)緩存服務(wù)有10個(gè)緩存,然后我們?cè)賹?duì)請(qǐng)求進(jìn)行負(fù)載均衡到各個(gè)緩存服務(wù)上。

但是這種方式會(huì)有問(wèn)題,如果大部分用戶(hù)被hash到同一個(gè)緩存上,導(dǎo)致其他緩存沒(méi)有被消費(fèi),卻返回沒(méi)有庫(kù)存,這是不合理的。

4ed5872e-7b61-11ed-8abf-dac502259ad0.png

page cache

第三種想法,page cache。

大部分軟件架構(gòu)其實(shí)都用到了這種方法,比如linux內(nèi)核的硬盤(pán)寫(xiě)入、mysql的刷盤(pán)等等,即將短時(shí)間內(nèi)的寫(xiě)操作聚合結(jié)果寫(xiě)入,所有的寫(xiě)操作在緩存內(nèi)完成。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9275

    瀏覽量

    155460
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4740

    瀏覽量

    96728

原文標(biāo)題:海量請(qǐng)求下的接口并發(fā)解決方案

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    立體智慧倉(cāng)儲(chǔ)解決方案.#云計(jì)算

    解決方案智能設(shè)備
    學(xué)習(xí)電子知識(shí)
    發(fā)布于 :2022年10月06日 19:45:47

    基于U盤(pán)的單片機(jī)海量存儲(chǔ)方案

    基于U盤(pán)的單片機(jī)海量存儲(chǔ)方案隨著Flash Memory非易失存儲(chǔ)技術(shù)的發(fā)展,基于USB接口的閃存即U盤(pán)現(xiàn)已得到廣泛應(yīng)用。從理論上講,以U盤(pán)作為便攜式采集存儲(chǔ)系統(tǒng)的存儲(chǔ)載體完全能夠滿(mǎn)足長(zhǎng)時(shí)間采集
    發(fā)表于 11-30 08:59

    HDMI接口靜電保護(hù)解決方案

    東沃DOWO技術(shù)部門(mén)根據(jù)客戶(hù)的需求設(shè)計(jì)了很多保護(hù)方案,接下來(lái)重點(diǎn)來(lái)分享其中一個(gè)HDMI接口的ESD靜電保護(hù)解決方案,方案中用到了兩種ESD靜電保護(hù)二極管物料,分別是:DW03DLC-B
    發(fā)表于 12-31 15:57

    P2P流媒體系統(tǒng)中并發(fā)請(qǐng)求的數(shù)據(jù)分發(fā)算法

    大規(guī)模并發(fā)請(qǐng)求是流媒體直播系統(tǒng)面臨的一個(gè)挑戰(zhàn),也是視頻點(diǎn)播系統(tǒng)中亟待解決的一個(gè)問(wèn)題。本文針對(duì)相同數(shù)據(jù)的并發(fā)請(qǐng)求問(wèn)題,提出了一種高效,低帶寬消耗、低延遲的數(shù)據(jù)
    發(fā)表于 12-30 14:21 ?14次下載

    海量小文件存儲(chǔ)的問(wèn)題以及解決方案

    海量小文件是業(yè)界難題,甚至有專(zhuān)門(mén)的名詞,LOSF(lots of samll file)。通常我們認(rèn)為大小在1MB以?xún)?nèi)的文件稱(chēng)為小文件,百萬(wàn)級(jí)數(shù)量及以上稱(chēng)為海量文件,由此量化定義海量小文件。
    發(fā)表于 08-20 10:27 ?4391次閱讀

    一文匯總并發(fā)http請(qǐng)求最快的幾種實(shí)現(xiàn)方式用

    假如有一個(gè)文件,里面有 10 萬(wàn)個(gè) url,需要對(duì)每個(gè) url 發(fā)送 http 請(qǐng)求,并打印請(qǐng)求結(jié)果的狀態(tài)碼,如何編寫(xiě)代碼盡可能快的完成這些任務(wù)呢? Python 并發(fā)編程有很多方法,多線程的標(biāo)準(zhǔn)庫(kù)
    的頭像 發(fā)表于 10-20 14:36 ?4800次閱讀
    一文匯總<b class='flag-5'>并發(fā)</b>http<b class='flag-5'>請(qǐng)求</b>最快的幾種實(shí)現(xiàn)方式用

    解密高并發(fā)業(yè)務(wù)場(chǎng)景典型的秒殺系統(tǒng)的架構(gòu)

    很多小伙伴反饋說(shuō),高并發(fā)專(zhuān)題學(xué)了那么久,但是,在真正做項(xiàng)目時(shí),仍然不知道如何下手處理高并發(fā)業(yè)務(wù)場(chǎng)景!甚至很多小伙伴仍然停留在只是簡(jiǎn)單的提供接口(CRUD)階段,不知道學(xué)習(xí)的并發(fā)知識(shí)如何
    的頭像 發(fā)表于 11-17 10:32 ?2772次閱讀
    解密高<b class='flag-5'>并發(fā)</b>業(yè)務(wù)場(chǎng)景<b class='flag-5'>下</b>典型的秒殺系統(tǒng)的架構(gòu)

    效率加倍,高并發(fā)場(chǎng)景接口請(qǐng)求合并方案

    假設(shè)我們3個(gè)用戶(hù)(用戶(hù)id分別是1、2、3),現(xiàn)在他們都要查詢(xún)自己的基本信息,請(qǐng)求到服務(wù)器,服務(wù)器端請(qǐng)求數(shù)據(jù)庫(kù),發(fā)出3次請(qǐng)求。我們都知道數(shù)據(jù)庫(kù)連接資源是相當(dāng)寶貴的,那么我們?cè)趺幢M可能節(jié)省連接資源呢?
    的頭像 發(fā)表于 01-13 10:09 ?1577次閱讀

    所有接口都用post請(qǐng)求的原因

    查看上面的區(qū)別,就會(huì)發(fā)現(xiàn)post在發(fā)送數(shù)據(jù)量大的請(qǐng)求時(shí)優(yōu)勢(shì)很顯示,get則更適合獲取靜態(tài)資源、簡(jiǎn)單的查詢(xún)等接口。 我個(gè)人在開(kāi)發(fā)接口的時(shí)候也會(huì)注意,將簡(jiǎn)單的查詢(xún)請(qǐng)求使用get方法,
    發(fā)表于 08-24 10:06 ?666次閱讀
    所有<b class='flag-5'>接口</b>都用post<b class='flag-5'>請(qǐng)求</b>的原因

    并發(fā)場(chǎng)景請(qǐng)求合并

    我們?cè)诜?wù)器端把請(qǐng)求合并,只發(fā)出一條SQL查詢(xún)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)返回后,服務(wù)器端處理返回?cái)?shù)據(jù),根據(jù)一個(gè)唯一請(qǐng)求ID,把數(shù)據(jù)分組,返回給對(duì)應(yīng)用戶(hù)。
    的頭像 發(fā)表于 10-09 16:05 ?700次閱讀
    高<b class='flag-5'>并發(fā)</b>場(chǎng)景<b class='flag-5'>下</b><b class='flag-5'>請(qǐng)求</b>合并

    服務(wù)器并發(fā)的概念

    自己調(diào)整系統(tǒng)的相關(guān)參數(shù) 并發(fā)的概念是什么?什么是并發(fā)? 對(duì)于服務(wù)器并發(fā)的概念,下面幾點(diǎn)是錯(cuò)誤的定義 ①服務(wù)器處理客戶(hù)端請(qǐng)求的數(shù)量:沒(méi)有時(shí)間、空間等限制,因此不能作為
    的頭像 發(fā)表于 11-10 10:05 ?8455次閱讀
    服務(wù)器<b class='flag-5'>并發(fā)</b>的概念

    實(shí)用RTD接口解決方案

    電子發(fā)燒友網(wǎng)站提供《實(shí)用RTD接口解決方案.pdf》資料免費(fèi)下載
    發(fā)表于 11-16 16:05 ?2次下載
    實(shí)用RTD<b class='flag-5'>接口</b><b class='flag-5'>解決方案</b>

    對(duì)等關(guān)稅沖擊 國(guó)產(chǎn)化PXIe海量互連如何?

    促使國(guó)產(chǎn)化加速。02國(guó)產(chǎn)化PXIe海量互連通用測(cè)試解決方案國(guó)產(chǎn)化海量互聯(lián)系統(tǒng)主要用在功能測(cè)試上,可以PXI儀器和被測(cè)單元之間的提供一個(gè)非??煽康倪B接,海量互聯(lián)
    的頭像 發(fā)表于 04-10 16:53 ?559次閱讀
    對(duì)等關(guān)稅沖擊<b class='flag-5'>下</b> 國(guó)產(chǎn)化PXIe<b class='flag-5'>海量</b>互連如何?

    Ingress網(wǎng)關(guān)高并發(fā)請(qǐng)求解決方案

    當(dāng) Ingress 網(wǎng)關(guān)面臨高并發(fā)請(qǐng)求(如 QPS 超過(guò) 10萬(wàn)+)時(shí),可能導(dǎo)致服務(wù)崩潰、響應(yīng)延遲激增或資源耗盡。
    的頭像 發(fā)表于 05-14 11:52 ?532次閱讀

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)13:PCIe請(qǐng)求模塊設(shè)計(jì)(

    在接收到請(qǐng)求總線接口請(qǐng)求事務(wù)后,當(dāng)請(qǐng)求類(lèi)型的值為0時(shí),表示通過(guò)PCIE硬核的配置管理接口發(fā)送請(qǐng)求
    的頭像 發(fā)表于 08-04 16:35 ?290次閱讀
    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)13:PCIe<b class='flag-5'>請(qǐng)求</b>模塊設(shè)計(jì)(<b class='flag-5'>下</b>)