天天看點

如何解決高并發和大流量三種高并發解決方案

名詞解釋:并發

在作業系統中,是指一個時間段中有幾個程式都處于已啟動運作到運作完畢之間,且這幾個程式都是在同一個處理機上運作,但任意一個時刻上隻有一個程式在處理機上運作。

我們說的高并發是什麼?

上面的定義明顯不是我們通常所言的并發,在網際網路時代,所講的并發、高并發,通常是指并發通路。也就是在某個時間點,有多少個通路同時到來通常如果一個系統的日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%的時間!!!

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

這個級别下,檔案系統通路鎖都成為災難

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

三種高并發解決方案

一、資料庫緩存層的優化
  • 什麼是資料庫緩存?

MySQL等一些常見的關系型資料庫的資料都存儲在磁盤中,在高并發場景下,業務應用對MySQL産生的增、删、改、查的操作造成巨大的I/O開銷和查詢壓力,這無疑對資料庫和伺服器都是一種巨大的壓力,為了解決此類問題,緩存資料的概念應運而生

  • 為什麼是要使用緩存?

緩存資料是為了讓用戶端很少甚至不通路資料庫伺服器進行資料的查詢,高并發下,能最大程度的降低對資料庫伺服器的通路壓力極大地解決資料庫伺服器的壓力

  • 提高應用資料的響應速度

使用者請求-->資料查詢-->連接配接資料庫伺服器并查詢資料-->将資料緩存起來(HTML、記憶體、JSON、序列化資料)-->顯示給用戶端

使用者再次請求或者新使用者通路-->資料查詢-->直接從緩存中擷取資料-->顯示給用戶端

二、CDN加速
  • 什麼是CDN?

CDN的全稱是Content Delivery Network,即内容分發網絡,盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使内容傳輸的更快、更穩定

在網絡各處放置節點伺服器所構成的在現有的網際網路基礎之上的一層智能虛拟網絡

CDN系統能夠實時地根據網絡流量和各節點的連接配接、負載狀況以及到使用者的距離和響應時間等綜合資訊将使用者的請求重新導向離使用者最近的服務節點上

  • 使用CDN的優勢?

本地Cache加速,提高了企業站點(尤其含有大量圖檔和靜态頁面站點)的通路速度

跨營運商的網絡加速,保證不同網絡的使用者都得到良好的通路品質

遠端通路使用者根據DNS負載均衡技術智能自動選擇Cache伺服器

自動生成伺服器的遠端Mirror(鏡像)cache伺服器,遠端使用者通路時從cache伺服器上讀取資料,減少遠端通路的帶寬,分擔網絡流量,減輕原站點WEB伺服器負載等功能

廣泛分布的CDN節點加上節點之間的智能備援機制,可以有效地預防黑客入侵

三、Web伺服器的負載均衡、請求分發
  • 七層負載均衡的實作

基于URL等應用資訊的負載均衡

Nginx的proxy是它一個很強大的功能,實作了7層負載均衡

  • Nginx實作的優點

功能強大,性能卓越,運作穩定

配置簡單靈活

能夠自動剔除工作不正常的後端伺服器

上傳檔案使用異步模式

支援多種配置設定政策,可以配置設定權重,配置設定方式靈活

  • Nginx負載均衡

内置政策,擴充政策

内置政策:IP Hash、權重輪詢

擴充政策:fair政策、通用hash、一緻性hash

  • 權重輪詢政策

首先将請求都分給高權重的機器,直到該機器的權值降到了比其他機器低,才開始将請求分給下一個高權重的機器

當所有後端機器都down掉時,Nginx會立即将所有機器的标志位清成初始狀态,以避免造成所有的機器都處于timeout的狀态

  • IP Hash政策

Nginx内置的另一個負載均衡的政策,流程和輪詢很類似,隻是七種的算法和具體的政策有些變化

IP Hash算法是一種變相的輪詢算法