
高并發是指系統在短時間內同時處理大量請求的能力,比如:大家熟知的阿里雙11,?一秒峰值完成58.3萬筆訂單,這就是典型的高并發場景。
這可能包括多個用戶同時發送請求、多個客戶端同時連接到服務器、或者同時進行大量的事務處理。
"多大算高并發"是一個常見的問題,我們可以通過考慮一些關鍵指標來判斷何時可以將一個系統視為高并發系統。
比如:通過QPS來計算具體的數據標志。
QPS是Query Per Second的縮寫,即每秒查詢率,是衡量系統、服務或數據庫每秒能夠處理的查詢請求數量。
QPS 通常用于衡量數據庫、Web 服務器、API 等系統的性能。
QPS 的計算方式很簡單,就是統計系統在每秒內處理的查詢請求數量。
通常情況下,QPS在幾千到幾萬以上的范圍內可以被認為是高并發。
比如:QPS 在 1000 到 10000 之間,通常屬于較為繁忙的系統,就屬于有一定的并發量了。
如果超過 10,000...QPS 甚至到數十萬、上百萬 QPS 的級別,也就是非常高的并發場景。
這類系統往往依賴于復雜的架構,如:多級緩存、負載均衡、數據庫分庫分表、消息隊列...等來解決。
多級緩存
多級緩存,就會涉及到:
客戶端緩存:例如:瀏覽器緩存,減少服務器壓力...等等;
CDN(內容分發網絡):CDN也就緩存的一大利器,一般都會采用:把靜態資源緩存到距離用戶最近的邊緣節點;
本地緩存:以及還會涉及到本地緩存,比如:將熱點數據緩存到應用服務器內存,如:Guava、Ehcache...等等都是使用較多的本地緩存。
分布式緩存:通過 Redis、Memcached ...等技術實現多級緩存,支持水平擴展、和高可用。
負載均衡
負載均衡,也是高并發的常見手段。
常見的負載均衡,有硬件的負載均衡、以及軟件的負載均衡。
比如:
硬件負載均衡器:如 F5、A10 ...等,硬件的效果更好,但是就是比較貴。
軟件負載均衡:如 Nginx、LVS、HAProxy ...等,軟件負載均衡相對硬件效果差一點,但是省錢啊。
分庫分表
當數據量比較大的時候,都會考慮到“分庫分表”,這里就會涉及到:垂直拆分、和水平拆分...等等拆分方式。
垂直分庫:按業務模塊拆分,例如將用戶表、訂單表分到不同的數據庫。
水平分庫:將同一張表的數據按一定規則(如用戶 ID)分到不同的數據庫實例上。
分表:將數據按一定規則分成多個表存儲,減少單表的數據量和索引壓力。
消息中間件
如果數據庫壓力大,你肯定想到緩存,除此之外,就會涉及到消息中間件,這也是一大利器。
通過消息隊列進行異步處理,解耦系統組件,避免高峰期的請求壓力直接傳遞到數據庫、或后端系統。
比如:高并發最典型的場景,就是:異步處理、削峰填谷、...等等。
削峰填谷:是高并發系統中常用的一種架構設計模式,主要用于平衡系統在高并發場景下的負載壓力。
它的核心思想:削峰、和填谷。
削峰
什么是削峰呢?削峰就是:在并發請求達到峰值時,系統無法在短時間內處理所有請求,可以通過一些手段將請求削減,或者暫時存儲起來,這就是削峰。
當請求量過大時,生產者(發起請求的一方)會將請求寫入消息隊列,消費者(處理請求的一方)則以相對較慢的速度從隊列中讀取數據并處理,這樣系統不至于在短時間內被大量請求壓垮。
通過“削峰”的方式,可以避免系統在短時間內被巨量的請求壓垮。
填谷
填谷就是:當系統處于較低負載時,可以從之前存儲的請求中逐步取出,充分利用系統的剩余資源來處理這些積壓的任務或請求。
比如:當請求量減少時,消費者繼續從隊列中獲取消息處理,保證資源充分利用,不會因為請求量減少而讓資源閑置。
最典型的場景:就是秒殺活動,通常會產生大量瞬時請求,系統往往無法在同一時間處理所有請求。
可以使用消息隊列對請求進行緩沖,后臺逐步處理訂單,避免系統崩潰。
【版權聲明】:本站內容來自于與互聯網(注明原創稿件除外),供訪客免費學習需要。如文章或圖像侵犯到您的權益,請及時告知,我們第一時間刪除處理!謝謝!