讓匠心精神傳給更多的人 高并發(fā)和大流量 解決方案 #高并發(fā)架構相關概念# 并發(fā): 在操作系統中,,是指一個時間段中有幾個程序都處于已啟動運行到運行完畢之間,,且這幾個程序都是在同一個處理機上運行,但任意一個時刻上只有一個程序在處理機上運行,。 我們說的高并發(fā)是什么,? 上面的定義明顯不是我們通常所言的并發(fā),在互聯網時代,,所講的并發(fā),、高并發(fā),通常是指并發(fā)訪問,。也就是在某個時間點,,有多少個訪問同時到來通常如果一個系統的日PV在千萬以上,有可能是一個高并發(fā)的系統,,但是有的公司完全不走技術路線,,全靠機器堆,這不在我們的討論范圍,。 高并發(fā)的問題,我們具體該關心什么? QPS:每秒鐘請求或者查詢的數量,,在互聯網領域,,指每秒響應請求數(指HTTP請求) 吞吐量:單位時間內處理的請求數量(通常由QPS與并發(fā)數決定) 響應時間:從請求發(fā)出到收到響應花費的時間,例如系統處理一個HTTP請求需要100ms,,這個100ms就是系統的響應時間 PV:綜合瀏覽量(Page View),,即頁面瀏覽量或者點擊量,一個訪客在24小時內訪問的頁面數量,,同一個人瀏覽你的網站同一頁面,,只記作一次PV UV:獨立訪問(UniQue Visitor),即一定時間范圍內相同訪客多次訪問網站,,只計算為1個獨立訪客 帶寬:計算帶寬大小需關注兩個指標,,峰值流量和頁面的平均大小 日網站帶寬=PV/統計時間(換算到秒)*平均頁面大小(單位KB)*8 峰值一般是平均值的倍數,根據實際情況來定 QPS不等于并發(fā)連接數 QPS是每秒HTTP請求數量,,并發(fā)連接數是系統同時處理的請求數量 (總PV數*80%)/(6小時秒數*20%)=峰值每秒請求數(QPS) 80%的訪問量集中在20%的時間?。?! QPS達到極限,,各種情況如何處理? 隨著QPS的增長,,每個階段需要根據實際情況來進行優(yōu)化,,優(yōu)化的方案也與硬件條件、網絡帶寬息息相關,。 QPS達到50 可以稱之為小型網站,,一般的服務器就可以應付 QPS達到100 假設關系型數據庫的每次請求在0.01秒完成 假設單頁面只有一個SQL查詢,那么100QPS意味這1秒鐘完成100次請求,,但是此時我們并不能保證數據庫查詢能完成100次 方案:數據庫緩存層,、數據庫的負載均衡 QPS達到800 假設我們使用百兆帶寬,意味著網站出口的實際帶寬是8M左右 假設每個頁面只有10k,,在這個并發(fā)條件下,,百兆帶寬已經吃完 方案:CDN加速、負載均衡 QPS達到1000 假設使用Memcache緩存數據庫查詢數據,,每個頁面對Memcache的請求遠大于直接對DB的請求 Memcache的悲觀并發(fā)數在2W左右,,但有可能在之前內網帶寬已經吃光,表現出不穩(wěn)定 方案:靜態(tài)HTML緩存 QPS達到2000 這個級別下,,文件系統訪問鎖都成為災難 方案:做業(yè)務分離,,分布式存儲 #三種高并發(fā)解決方案# 一、數據庫緩存層的優(yōu)化 什么是數據庫緩存,? MySQL等一些常見的關系型數據庫的數據都存儲在磁盤中,,在高并發(fā)場景下,,業(yè)務應用對MySQL產生的增、刪,、改,、查的操作造成巨大的I/O開銷和查詢壓力,這無疑對數據庫和服務器都是一種巨大的壓力,,為了解決此類問題,,緩存數據的概念應運而生 為什么是要使用緩存? 緩存數據是為了讓客戶端很少甚至不訪問數據庫服務器進行數據的查詢,,高并發(fā)下,,能最大程度的降低對數據庫服務器的訪問壓力極大地解決數據庫服務器的壓力 提高應用數據的響應速度 用戶請求-->數據查詢-->連接數據庫服務器并查詢數據-->將數據緩存起來(HTML、內存,、JSON,、序列化數據)-->顯示給客戶端 用戶再次請求或者新用戶訪問-->數據查詢-->直接從緩存中獲取數據-->顯示給客戶端 二、CDN加速 什么是CDN,? CDN的全稱是Content Delivery Network,,即內容分發(fā)網絡,盡可能避開互聯網上有可能影響數據傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié),,使內容傳輸的更快,、更穩(wěn)定 在網絡各處放置節(jié)點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡 CDN系統能夠實時地根據網絡流量和各節(jié)點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節(jié)點上 使用CDN的優(yōu)勢,? 本地Cache加速,,提高了企業(yè)站點(尤其含有大量圖片和靜態(tài)頁面站點)的訪問速度 跨運營商的網絡加速,保證不同網絡的用戶都得到良好的訪問質量 遠程訪問用戶根據DNS負載均衡技術智能自動選擇Cache服務器 自動生成服務器的遠程Mirror(鏡像)cache服務器,,遠程用戶訪問時從cache服務器上讀取數據,,減少遠程訪問的帶寬,分擔網絡流量,,減輕原站點WEB服務器負載等功能 廣泛分布的CDN節(jié)點加上節(jié)點之間的智能冗余機制,,可以有效地預防黑客入侵 三、Web服務器的負載均衡,、請求分發(fā) 七層負載均衡的實現 基于URL等應用信息的負載均衡 Nginx的proxy是它一個很強大的功能,,實現了7層負載均衡 Nginx實現的優(yōu)點 功能強大,性能卓越,,運行穩(wěn)定 配置簡單靈活 能夠自動剔除工作不正常的后端服務器 上傳文件使用異步模式 支持多種分配策略,,可以分配權重,分配方式靈活 Nginx負載均衡 內置策略,,擴展策略 內置策略:IP Hash,、加權輪詢 擴展策略:fair策略、通用hash,、一致性hash 加權輪詢策略 首先將請求都分給高權重的機器,,直到該機器的權值降到了比其他機器低,,才開始將請求分給下一個高權重的機器 當所有后端機器都down掉時,Nginx會立即將所有機器的標志位清成初始狀態(tài),,以避免造成所有的機器都處于timeout的狀態(tài) IP Hash策略 Nginx內置的另一個負載均衡的策略,,流程和輪詢很類似,,只是七種的算法和具體的策略有些變化 IP Hash算法是一種變相的輪詢算法 |
|