【高並發】如何設計一個支撐高並發大流量的系統?這次我將設計思路分享給大家!


寫在前面

最近不少小伙伴們都在問我:高並發專題我學了不少文章了,但是如何設計一個高並發的系統我還是一臉懵逼!這個問題怎么解決呢?其實,相信不只是問我的這些小伙伴有這個困惑,就連工作(入坑)了好幾年的開發人員也都有這樣的困惑:我學習了很多的高並發課程,也看了不少的高大上的文章,可就是不知道怎么去設計一個支撐高並發大流量的系統。針對小伙伴們的疑惑,這里,我就把一些設計高並發大流量的常規思路分享給大家,不一定完全正確,設計高並發大流量系統本來就是一個仁者見仁、智者見智的事情,只要是符合自身業務場景的架構思路,都是好的架構思路,架構本身來說就是沒有一個完全正確的架構,而是盡量符合當時自身的業務場景,並且能夠良好的支撐業務的負載。

高並發架構相關概念

什么是並發?

並發是指並發的訪問,也就是某個時間點,有多少個訪問同時到來;

通常如果一個系統的日PV在千萬以上,有可能是一個高並發的系統,這里需要注意的是:只是有可能是一個高並發的系統,不一定是一個高並發的系統。

並發數和QPS是不同的概念,一般說QPS會說多少並發用戶下QPS,當QPS相同時,並發用戶數越大,網站並發處理能力越好。當並發用戶數過大時,會造成進程(線程)頻繁切換,反正真正用於處理請求的時間變少,每秒能夠處理的請求數反而變少,同時用戶的請求等待時間也會變大。 找到最佳線程數能夠讓web系統更穩定,效率更高。

並發數 = QPS*平均響應時間

高並發具體關心什么?

QPS: 每秒請求或查詢的數量,在互聯網領域,指每秒響應請求數;

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

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

PV: 綜合瀏覽量,即頁面瀏覽量或者點擊量,一個訪客在24小時內訪問的頁面數量;

UV: 獨立訪客 ,即一定時間范圍內相同訪客多次訪問網站,只計算為一個獨立的訪客;

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

日網站帶寬可以使用下面的公式來粗略計算:

日網站帶寬=pv/統計時間(換算到秒)*平均頁面大小(單位kB)*8

峰值一般是平均值的倍數;

QPS不等於並發連接數,QPS是每秒HTTP請求數量,並發連接數是系統同時處理的請求數量;

峰值每秒請求數(QPS) = (總PV數 * 80%) /(6小時秒數 * 20%)

壓力測試: 測試能承受的最大並發,測試最大承受的QPS值。

測試工具(ab): 目標是URL,可以創建多個訪問線程對同一個URL進行訪問(Nginx);

ab的使用: 模擬並發請求100次(100個人),總共請求5000次(每個人請求5000次)

ab -c 100 -n 5000 待測試網站(內存和網絡不超過最高限度的75%)

QPS達到50: 一般的服務器就可以應付;

QPS達到100: 假設關系型數據庫的每次請求在0.01秒完成(理想),假設單頁面只有一個SQL查詢,那么100QPS意味着1秒中完成100次請求,但此時我們不能保證數據庫查詢能完成100次;

方案:數據庫緩存層、數據庫的負載均衡;

QPS達到800: 假設我們使用 百兆寬帶,意味着網站出口的實際帶寬是8M左右,假設每個頁面是有10k,在這個並發的條件下,百兆帶寬已經被吃完;

方案:CDN加速、負載均衡

QPS達到1000: 假設使用Redis緩存數據庫查詢數據,每個頁面對Redis請求遠大於直接對DB的請求;
Redis的悲觀並發數在5W左右,但有可能之前內網帶寬已經被吃光,表現出不穩定;

方案:靜態HTML緩存

QPS達到2000: 文件系統訪問鎖都成為了災難;

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

高並發解決方案案例

流量優化: 防盜鏈處理(把一些惡意的請求拒之門外)

前端優化: 減少HTTP請求、添加異步請求、啟用瀏覽器的緩存和文件壓縮、CDN加速、建立獨立的圖片服務器;

服務端優化: 頁面靜態化處理、並發處理、隊列處理;

數據庫優化: 數據庫的緩存、分庫分表、分區操作、讀寫分離、負載均衡

Web服務器優化: 負載均衡

高並發下的經驗公式

通過QPS和PV計算部署服務器的台數

單台服務器每天PV計算

公式1:每天總PV = QPS * 3600 * 6
公式2:每天總PV = QPS * 3600 * 8

服務器計算

服務器數量 =   ceil( 每天總PV / 單台服務器每天總PV )

峰值QPS和機器計算公式

原理: 每天80%的訪問集中在20%的時間里,這20%時間叫做峰值時間

公式: ( 總PV數 * 80% ) / ( 每天秒數 * 20% ) = 峰值時間每秒請求數(QPS)

機器: 峰值時間每秒QPS / 單台機器的QPS = 需要的機器。

重磅福利

關注「 冰河技術 」微信公眾號,后台回復 “設計模式” 關鍵字領取《深入淺出Java 23種設計模式》PDF文檔。回復“Java8”關鍵字領取《Java8新特性教程》PDF文檔。兩本PDF均是由冰河原創並整理的超硬核教程,面試必備!!

好了,今天就聊到這兒吧!別忘了點個贊,給個在看和轉發,讓更多的人看到,一起學習,一起進步!!

寫在最后

如果你覺得冰河寫的還不錯,請微信搜索並關注「 冰河技術 」微信公眾號,跟冰河學習高並發、分布式、微服務、大數據、互聯網和雲原生技術,「 冰河技術 」微信公眾號更新了大量技術專題,每一篇技術文章干貨滿滿!不少讀者已經通過閱讀「 冰河技術 」微信公眾號文章,吊打面試官,成功跳槽到大廠;也有不少讀者實現了技術上的飛躍,成為公司的技術骨干!如果你也想像他們一樣提升自己的能力,實現技術能力的飛躍,進大廠,升職加薪,那就關注「 冰河技術 」微信公眾號吧,每天更新超硬核技術干貨,讓你對如何提升技術能力不再迷茫!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM