高併發和大流量解決方案

my38778570發表於2022-12-12

併發

併發,在作業系統中,是指一個時間段中有幾個程式都處於已啟動執行到執行完畢之間,且這幾個程式都是在同一個處理機上執行但任一個時刻點上只有一個程式在處理機上執行

我們說的高併發是什麼 ?

上面的定義明顯不是我們通常所言的併發,在網際網路時代,所講的併發、高併發,通常是指併發訪問。也就是在某個時間點,有多少個訪問同時到來

我們說的高併發是什麼 ?

通常如果一個系統的日PV在千萬以上,有可能是一個高併發的系統

高併發的問題,我們具體該關心什麼 ?

  • QPS:每秒鐘請求或者查詢的數量,在網際網路領域,指每秒響應請求數(指HTTP請求);
  • 吞吐量:單位時間內處理的請求數量(通常由QPS與併發數決定)

高併發的問題,我們具體該關心什麼 ?

  • 響應時間:從請求發出到收到響應花費的時間 。例如系統處理一個HTTP請求需要100ms,這個100ms就是系統的響應時間

  • PV:綜合瀏覽量( Page View ),即頁面瀏覽量或者點選量,一個訪客在24小時內訪問的頁面數量同一個人瀏覽你的網站同一頁面,只記作一次PV

  • UV :獨立訪客(UniQue Visitor),即一定時間範圍內相同訪客多次訪問網站,只計算為1個獨立訪客

  • 頻寬:計算頻寬大小需關注兩個指標,峰值流量和頁面的平均大小

  • 日網站頻寬= PV/統計時間(換算到秒) * 平均頁面大小(單位KB) * 8
    峰值一般是平均值的倍數,根據實際情況來定

  • QPS 不等於併發連線數
    QPS是每秒HTTP請求數量,併發連線數是系統同時處理的請求數

  • (總PV數80%)/(6小時秒數20%)= 峰值每秒請求數(QPS)
    80% 的訪問量集中在 20%的時間
    6小時,是早上兩小時,中午兩小時,晚上兩小時

  • 壓力測試
    測試能承受的最大併發
    測試最大承受的QPS值

常用效能測試工具

ab、wrk、http_load、Web Bench、Siege、Apache JMeter

ab的使用

模擬併發請求100次,總共請求5000次

ab -c 100 -n 5000 待測試網站

注意事項

  • 測試機器與被測試機器分開(測試機器會佔用被測試機器資源)
  • 不要對線上服務做壓力測試(當壓力到一定值的時候線上服務掛了)
  • 觀察測試工具ab所在機器,以及被測試的前端機的CPU,記憶體,網路等都不超過最高限度的75%

QPS達到極限

隨著QPS的增長,每個階段需要根據實際情況來進行最佳化,最佳化的方案也與硬體條件、網路頻寬息息相關

  • QPS 達到50
    可以稱之為小型網站,一般的伺服器就可以應付

  • QPS 達到100
    假設關係型資料庫的每次請求在0.01秒完成
    假設單頁面只有一個SQL查詢,那麼100QPS意味著1秒鐘完成100次請求,但是此時我們並不能保證資料庫查詢能完成100次

    方案:資料庫快取層、資料庫的負載均衡

  • QPS 達到800
    假設我們使用百兆頻寬,意味著網站出口的實際頻寬是8M左右假設每個頁面只有10K,在這個併發條件下,百兆頻寬已經吃完

    方案:CDN加速、負載均衡

  • QPS 達到1000
    假設使用Memcache快取資料庫查詢資料,每個頁面對Memcache的請求遠大於直接對DB的請求Memcache的悲觀併發數在2w左右,但有可能在之前內網頻寬已經吃光,表現出不穩定

    方案:靜態HTML快取

  • QPS 達到2000
    這個級別下,檔案系統訪問鎖都成為了災難

    方案:做業務分離,分散式儲存

流量最佳化

防盜鏈處理

前端最佳化

  • 減少HTTP請求
  • 新增非同步請求
  • 啟用瀏覽器快取和檔案壓縮
  • CDN加速
  • 建立獨立圖片伺服器

服務端最佳化

  • 頁面靜態化
  • 併發處理
  • 佇列處理

資料庫最佳化

  • 資料庫快取
  • 分庫分表、分割槽操作
  • 讀寫分離
  • 負載均衡

web伺服器最佳化

  • 負載均衡
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章