高併發與解決方案

2021-08-25 05:36:31 字數 2759 閱讀 3250

#高併發架構相關概念#

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

我們說的高併發是什麼?

上面的定義明顯不是我們通常所言的併發,在網際網路時代,所講的併發、高併發,通常是指併發訪問。也就是在某個時間點,有多少個訪問同時到來通常如果乙個系統的日pv在千萬以上,有可能是乙個高併發的系統,但是有的公司完全不走技術路線,全靠機器堆,這不在我們的討論範圍。

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

qps:每秒鐘請求或者查詢的數量,在網際網路領域,指每秒響應請求數(指http請求)

吞吐量:單位時間內處理的請求數量(通常由qps與併發數決定)

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

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

日**頻寬=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演算法是一種變相的輪詢演算法

高併發解決方案

時常看到高併發的問題,但高併發其實是最不需要考慮的東西。為何,他虛無縹緲,很少有 真的需要這些東西,而且其中很多技術,其實你已經在用了。有這個意識就夠了,不需要時刻盯著這個問題。只有很少的 真的能達到高併發。簡單做乙個歸納,從低成本 高效能和高擴張性的角度來說有如下處理方案 1 html靜態化 2 ...

高併發解決方案

將靜態資源分離到靜態站,對靜態資源的請求打到靜態站,增加動態站的請求處理量 頁面靜態化是將程式生成的頁面儲存起來,使用模板技術如freemarker和velocity生成靜態頁面 nginx快取頁面資訊,再次請求時直接從快取中獲取,不需要重新生成,頁面快取記憶體中,提高訪問速度 具有相同處理功能的伺...

高併發解決方案

秒殺場景一般會在電商 舉行一些活動或者節假日在12306 上搶票時遇到。對於電商 中一些稀缺或者 商品,電商 一般會在約定時間點對其進行限量銷售,因為這些商品的特殊性,會吸引大量使用者前來搶購,並且會在約定的時間點同時在秒殺頁面進行搶購。限流 鑑於只有少部分使用者能夠秒殺成功,所以要限制大部分流量,...