1. 程式人生 > >高併發和大流量解決方案

高併發和大流量解決方案

https://blog.csdn.net/persistencegoing/article/details/84376427

#高併發架構相關概念#

併發:

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

我們說的高併發是什麼?

上面的定義明顯不是我們通常所言的併發,在網際網路時代,所講的併發、高併發,通常是指併發訪問。也就是在某個時間點,有多少個訪問同時到來通常如果一個系統的日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演算法是一種變相的輪詢演算法

 

 

轉載https://blog.csdn.net/beihenanfei/article/details/78919682

 

希望大家關注我一波,防止以後迷路,有需要的可以加群討論互相學習java ,學習路線探討,經驗分享與java求職      群號:721515304