在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

海量請求下的接口并發解決方案

jf_ro2CN3Fa ? 來源:CSDN技術社區 ? 作者:舍其小伙伴 ? 2022-12-14 13:48 ? 次閱讀

設定一個場景,假如一個商品接口在某段時間突然上升,會怎么辦?

生活中的例子來說,假設冰墩墩在當天晚上上熱搜之后,迅速有十幾萬人去淘寶下單購買,此時并沒有做好對該商品的緩存預熱以及準備,如何操作?

對于這個問題,在電商高并發系統中,對接口的保護一般采用:緩存、限流、降級 來操作。

假設該接口已經接受過風控的處理,過濾掉一半的機器人腳本請求,剩下都是人為的下單請求。

服務限流

限流 主要的目的是通過對并發訪問/請求進行限速,或者對一個時間窗口內的請求進行限速,一旦達到限制速率則可以拒絕服務、排隊或等待、降級等處理。

限流算法

1. 漏斗算法

漏桶算法 是當請求到達時直接放入漏桶,如果當前容量已達到上限(限流值),則進行丟棄或其他策略(觸發限流策略)。漏桶以固定的速率(根據服務吞吐量)進行釋放訪問請求(即請求通過),直到漏桶為空。

漏斗算法的思想就是,不管你來多少請求,我的接口消費速度一定是小于等于流出速率的閾值的。

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

可以基于消息隊列來實現。

2. 令牌桶算法

令牌桶算法 是程序以v(v = 時間周期 / 限流值)的速度向令牌桶中增加令牌,直到令牌桶滿,請求到達時向令牌桶請求令牌,如果獲取成功則通過請求,如果獲取失敗觸發限流策略。

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

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

3. 滑窗算法

滑窗算法 是將一個時間周期分為N個小周期,分別記錄每個小周期內訪問次數,并且根據時間滑動刪除過期的小周期。

如下圖所示,假設時間周期為1分鐘,將1分鐘再分為2個小周期,統計每個小周期的訪問數量,則可以看到,第一個時間周期內,訪問數量為75,第二個時間周期內,訪問數量為100,如果一個時間周期內所有的小周期總和超過100的話,則會觸發限流策略。

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

Sentinel的實現 和 TCP滑窗。

接入層限流

Nginx限流

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

它可以根據客戶端特征,限制其訪問頻率,客戶端特征主要指 IP、UserAgent等。使用 IP 比 UserAgent 更可靠,因為 IP 無法造假,UserAgent 可隨意偽造。

本地接口限流

Semaphore

Java 并發庫 的 Semaphore 可以很輕松完成信號量控制,Semaphore 可以控制某個資源可被同時訪問的個數,通過 acquire() 獲取一個許可,如果沒有就等待,而 release() 釋放一個許可。

假如我們對外提供一個服務接口,允許最大并發數為40,我們可以這樣:

privatefinalSemaphorepermit=newSemaphore(40,true);

publicvoidprocess(){

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

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

具體的 Semaphore 實現參考源碼。

分布式接口限流

使用消息隊列

不管是用MQ中間件,或是Redis的List實現的消息隊列,都可以作為一個 緩沖隊列 來使用。思想就是基于漏斗算法。

當對于一個接口請求達到一定閾值時,就可以啟用消息隊列來進行接口數據的緩沖,并根據服務的吞吐量來消費數據。

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

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

服務降級

在接口做好風控的前提下,發現了接口請求的并發量迅速上升,我們可以啟用兜底方案,進行服務降級。

一般服務降級應該用來對一些 不重要 或 不緊急 的服務或任務進行服務的 延遲使用 或 暫停使用。

降級方案

停止邊緣業務

比如淘寶雙11前,就不可以查詢三個月前的訂單,對邊緣業務進行降級,保證核心業務的高可用。

拒絕請求

在接口請求并發量大于閾值,或是接口出現大量失敗請求等等突發情況,可以拒絕一些訪問請求。

拒絕策略

隨機拒絕:隨機拒絕超過閾值的請求 。

拒絕舊請求:按照請求的時間,優先拒絕更早收到的請求。

拒絕非核心請求:根據系統業務設置核心請求清單,將非核心清單內的請求拒絕掉。

恢復方案

在實現服務降級之后,對于突增流量我們可以繼續注冊多個消費者服務來應對并發量,之后我們再對一些服務器進行慢加載。

降級具體實現參考其他文章。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

數據緩存

在接口做好風控的前提下,發現了接口請求的并發量迅速上升,我們可以分以下幾個操作執行:

對訪問請求使用分布式鎖進行阻塞。

在這個短時間中,我們可以將對應操作行的熱點數據,緩存在緩存中間件中。

放行請求后,讓所有請求優先操作緩存數據。

再將操作的結果通過消息隊列發送給消費接口慢慢消費。

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

緩存問題

假設我們操作的是一個庫存接口,此時數據庫中只有100個庫存。

那假如此時我們將一條數據放入緩存中,如果所有的請求都來訪問這個緩存,那它還是被打掛,我們該怎么操作?

讀寫分離

第一種想法,讀寫分離。

使用Redis的哨兵集群模式來進行主從復制的讀寫分離操作。讀的操作肯定大于寫操作,等庫存被消費到0時,讀操作直接快速失敗。

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

負載均衡

第二種想法,負載均衡。

在緩存數據后,如果所有請求都來緩存中操作這個庫存,不管是加悲觀鎖還是樂觀鎖,并發率都很低,此時我們可以對這個庫存進行拆分。

我們可以參照 ConcurrentHashMap 中的 counterCells 變量的設計思想,將100個庫存拆分到10個緩存服務中,每個緩存服務有10個緩存,然后我們再對請求進行負載均衡到各個緩存服務上。

但是這種方式會有問題,如果大部分用戶被hash到同一個緩存上,導致其他緩存沒有被消費,卻返回沒有庫存,這是不合理的。

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

page cache

第三種想法,page cache。

大部分軟件架構其實都用到了這種方法,比如linux內核的硬盤寫入、mysql的刷盤等等,即將短時間內的寫操作聚合結果寫入,所有的寫操作在緩存內完成。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8728

    瀏覽量

    152092
  • 算法
    +關注

    關注

    23

    文章

    4633

    瀏覽量

    93468

原文標題:海量請求下的接口并發解決方案

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    立體智慧倉儲解決方案.#云計算

    解決方案智能設備
    學習電子知識
    發布于 :2022年10月06日 19:45:47

    存儲器接口生成器(MIG)解決方案

    存儲器接口生成器(MIG)解決方案---Virtex-4 存儲器接口和Virtex-II Pro存儲器解決方案 Virtex-4? FPGAs solve
    發表于 10-24 12:02

    基于U盤的單片機海量存儲方案

    基于U盤的單片機海量存儲方案隨著Flash Memory非易失存儲技術的發展,基于USB接口的閃存即U盤現已得到廣泛應用。從理論上講,以U盤作為便攜式采集存儲系統的存儲載體完全能夠滿足長時間采集
    發表于 11-30 08:59

    HDMI接口靜電保護解決方案

    東沃DOWO技術部門根據客戶的需求設計了很多保護方案,接下來重點來分享其中一個HDMI接口的ESD靜電保護解決方案方案中用到了兩種ESD靜電保護二極管物料,分別是:DW03DLC-B
    發表于 12-31 15:57

    怎樣使用Redis + LUA腳本進行系統控制并發以防止無效請求

    個以上的請求時,它將提示“對接口進行簽名的客戶端請求數超過了限制”。然后,作為下游系統,我們需要控制并發以防止無效請求。最常用的
    發表于 03-22 13:45

    P2P流媒體系統中并發請求的數據分發算法

    大規模并發請求是流媒體直播系統面臨的一個挑戰,也是視頻點播系統中亟待解決的一個問題。本文針對相同數據的并發請求問題,提出了一種高效,低帶寬消耗、低延遲的數據
    發表于 12-30 14:21 ?14次下載

    海思參展ICTC 2008并發布雙向多功能機頂盒芯片解決方案

    海思參展ICTC 2008并發布雙向多功能機頂盒芯片解決方案 在第十六屆杭州ICTC 2008展上,海思現場發布并展示了業界最佳性價比全系列機頂盒芯片解決方案,其中包括:雙
    發表于 10-30 08:45 ?497次閱讀

    海量小文件存儲的問題以及解決方案

    海量小文件是業界難題,甚至有專門的名詞,LOSF(lots of samll file)。通常我們認為大小在1MB以內的文件稱為小文件,百萬級數量及以上稱為海量文件,由此量化定義海量小文件。
    發表于 08-20 10:27 ?4151次閱讀

    一文匯總并發http請求最快的幾種實現方式用

    假如有一個文件,里面有 10 萬個 url,需要對每個 url 發送 http 請求,并打印請求結果的狀態碼,如何編寫代碼盡可能快的完成這些任務呢? Python 并發編程有很多方法,多線程的標準庫
    的頭像 發表于 10-20 14:36 ?4376次閱讀
    一文匯總<b class='flag-5'>并發</b>http<b class='flag-5'>請求</b>最快的幾種實現方式用

    解密高并發業務場景典型的秒殺系統的架構

    很多小伙伴反饋說,高并發專題學了那么久,但是,在真正做項目時,仍然不知道如何下手處理高并發業務場景!甚至很多小伙伴仍然停留在只是簡單的提供接口(CRUD)階段,不知道學習的并發知識如何
    的頭像 發表于 11-17 10:32 ?2324次閱讀
    解密高<b class='flag-5'>并發</b>業務場景<b class='flag-5'>下</b>典型的秒殺系統的架構

    效率加倍,高并發場景接口請求合并方案

    假設我們3個用戶(用戶id分別是1、2、3),現在他們都要查詢自己的基本信息,請求到服務器,服務器端請求數據庫,發出3次請求。我們都知道數據庫連接資源是相當寶貴的,那么我們怎么盡可能節省連接資源呢?
    的頭像 發表于 01-13 10:09 ?918次閱讀

    所有接口都用post請求的原因

    查看上面的區別,就會發現post在發送數據量大的請求時優勢很顯示,get則更適合獲取靜態資源、簡單的查詢等接口。 我個人在開發接口的時候也會注意,將簡單的查詢請求使用get方法,
    發表于 08-24 10:06 ?457次閱讀
    所有<b class='flag-5'>接口</b>都用post<b class='flag-5'>請求</b>的原因

    并發場景請求合并

    我們在服務器端把請求合并,只發出一條SQL查詢數據庫,數據庫返回后,服務器端處理返回數據,根據一個唯一請求ID,把數據分組,返回給對應用戶。
    的頭像 發表于 10-09 16:05 ?439次閱讀
    高<b class='flag-5'>并發</b>場景<b class='flag-5'>下</b><b class='flag-5'>請求</b>合并

    服務器并發的概念

    自己調整系統的相關參數 并發的概念是什么?什么是并發? 對于服務器并發的概念,下面幾點是錯誤的定義 ①服務器處理客戶端請求的數量:沒有時間、空間等限制,因此不能作為
    的頭像 發表于 11-10 10:05 ?5552次閱讀
    服務器<b class='flag-5'>并發</b>的概念

    實用RTD接口解決方案

    電子發燒友網站提供《實用RTD接口解決方案.pdf》資料免費下載
    發表于 11-16 16:05 ?1次下載
    實用RTD<b class='flag-5'>接口</b><b class='flag-5'>解決方案</b>
    主站蜘蛛池模板: 国产精品天天爽夜夜欢张柏芝 | 爱爱456高清国语在线456 | 最新久久免费视频 | 天天看天天摸色天天综合网 | aaa一级最新毛片 | 1024国产基地永久免费 | 久久精品视频免费播放 | 午夜污片 | 欧美一级色 | 一级特黄aa大片免费播放视频 | 美女扒开尿口给男人捅 | 久久天天躁夜夜躁狠狠 | 伦理片日本韩国电影三级在线观看 | 鲁老汉精品视频在线观看 | 午夜伦理片免费观看在线 | 娇妻被黑人蹂躏 | 成人精品在线观看 | 999久久精品国产 | 日本大片免费播放网站 | 日本xxxⅹ69xxxx护士 | 狠狠轮 | 国产精品嫩草影院午夜 | 亚洲网站一区 | 美女被羞羞产奶视频网站 | 欧美色啪| 日本美女中出 | 国色天香网在线 | 日本成人黄色网址 | 久青草免费视频手机在线观看 | 欧美视频小说 | 91av在线免费观看 | 91aaa免费观看在线观看资源 | 爱爱视频天天看 | 啪啪免费视频 | 亚洲第一在线播放 | 69日本人xxxxxxxx色 | 欧色视频 | 国产美女精品久久久久久久免费 | 婷婷草 | 日韩欧美高清一区 | 视频三区|