高併發處理

高併發處理css

Author: Lijb前端

Email: lijb1121@163.com算法

瞭解高併發sql

  • 何謂高併發 所謂高併發指的是

在同時或極短期內,有大量的請求到達服務端,每 個請求都須要服務端耗費資源進行處理,並作出相應的反饋。數據庫

  • 從服務端視角看高併發

服務端處理請求須要耗費服務端的資源,好比能同時開啓的進程數、能同 時運行的線程數、網絡鏈接數、cpu、I/O、內存等等,因爲服務端資源是有限 的,那麼服務端能同時處理的請求也是有限的,高併發問題的本質就是資源的有限性編程

  • 高併發帶來的問題

服務端的處理和響應會愈來愈慢,甚至會丟棄部分請求不予處理,更嚴重 的會致使服務端崩潰。後端

  • 高併發問題並非互聯網應用獨有瀏覽器

  • 高併發問題的層面緩存

好比:前端請求、Web服務器、Web應用、數據庫等服務器

高併發處理的基本思路

高併發處理的基本思路

一:從客戶端看

1:儘可能減小請求數量,好比:依靠客戶端自身的緩存或處理能力

2:儘可能減小對服務端資源的沒必要要耗費,好比:重複使用某些資源,如鏈接池

客戶端處理的基本原則就是:能不訪問服務端就不要訪問

二:從服務端看

1:增長資源供給,好比:

(1)更大的網絡帶寬

(2)使用更高配置的服務器

(3)使用高性能的Web服務器

(4)使用高性能的數據庫

2:請求分流,好比:

(1)使用集羣

(2)分佈式的系統架構

3:應用優化,好比:

(1)使用更高效的編程語言

(2)優化處理業務邏輯的算法

(3)優化訪問數據庫的SQL

服務端的處理基本原則是:分而治之,並提升單個請求的處理速度

高併發處理的基本手段-1

  • 是手段而非具體的方案

(1)下面按照每一個層面來談談處理的具體手段,注意不是高併發處理的方案, 方案是要結合具體的應用,綜合分析,選擇合適的手段組合起來。

(2)另外還要注意,下面提到的手段都是 「包含但不限於」

客戶端發送請求層面

1:儘可能利用瀏覽器的緩存功能,減小訪問服務端,好比:js、css、圖片等

2:能夠考慮使用壓縮傳輸的功能,減小網絡流量,也會提升傳輸速度

3:考慮使用異步請求,分批獲取數據

前端接收客戶端請求層面

一:好比Nginx這一層

1:動靜分離,部分靜態資源能夠直接從Nginx返回

2:按請求的不一樣,分發到不一樣的後端進行處理,好比:負載均衡、業務拆分訪問等

3:前面再加上一層來作多個Nginx的負載均衡,好比:LVS、F5等

4:還能夠在更前面使用CDN服務

二:好比Varnish這一層

1:還能夠對動態內容進行緩存,儘可能減小訪問後端服務

2:使用頁面片段緩存技術,好比ESI(EdgeSide Includes )

Web服務器層面

1:使用最新的JVM,並進行配置優化

2:合理選擇服務器的運行模式,好比有些服務器有Client和Server之分

3:對Web服務器進行配置優化,好比:調整內存數量、線程數量等

4:提供多個能提供相同服務的Web服務器,以實現負載均衡

5:仔細規劃Web服務器上部署的應用規模

6:對Web服務器進行集羣

7:提供專門的圖片、文件、視頻等靜態資源服務器

Web應用層面

1:動態內容靜態化

2:Java開發優化

3:優化處理業務邏輯的算法

4:合理高效的利用緩存

5:優化訪問數據庫的Sql,能夠考慮利用存儲過程等數據庫的能力

6:合理使用多線程,加快業務處理

7:部分業務能夠考慮內存數據庫,或者是進行純內存處理

8:儘可能避免遠程調用、大量I/O等耗時的操做

9:合理規劃事務等較爲耗資源的操做

10:合理使用異步處理

11:對部分業務考慮採用預處理或者預計算的方式,減小實時計算量

12:內部系統間的業務儘可能直接調用、直接處理,減小WebService、工做流等

數據庫層面

1:合理選擇數據庫的引擎,好比Mysql的InnoDB與MyISAM引擎

2:進行配置優化

3:能夠考慮使用存儲過程來處理複雜的數據邏輯

4:數據庫集羣,進行讀寫分離

5:合理設計數據庫的表結構、索引等

6:分庫、分表,下降單庫、單表的數據量

7:合理使用NoSql

相關文章
相關標籤/搜索