天天看點

從服務端等不同視角看高并發問題

所謂伺服器大流量高并發指的是:在同時或極短時間内,有大量的請求到達服務端,每個請求都需要服務端耗費資源進行處理,并做出相應的回報。

服務端看高并發

服務端處理請求需要耗費服務端的資源,比如能同時開啟的程序數、能同時運作的線程數、網絡連接配接數、cpu、I/O、記憶體等等,由于服務端資源是有限的,那麼服務端能同時處理的請求也是有限的。高并發問題的本質就是:資源的有限性

高并發帶來的問題

服務端的處理和響應會越來越慢,甚至會丢棄部分請求不予處理,更嚴重的會導緻服務端崩潰。

高并發處理的基本思路

1)從用戶端看

盡量減少請求數量,比如:依靠用戶端自身的緩存或處理能力。

盡量減少對服務端資源的不必要耗費,比如:重複使用某些資源,如連接配接池用戶端處理的基本原則就是:能不通路服務端就不要通路

2)從服務端看

增加資源供給,比如:更大的網絡帶寬,使用更高配置的伺服器,使用高性能的Web伺服器,使用高性能的資料庫

請求分流,比如:使用叢集,分布式的系統架構

應用優化,比如:使用更高效的程式設計語言,優化處理業務邏輯的算法,優化通路資料庫的SQL

基本原則:分而治之,并提高單個請求的處理速度

高并發處理的基本手段

1)用戶端送出請求層面,常見的手段有:

l 盡量利用浏覽器的緩存功能,減少通路服務端,比如:js、css、圖檔等

l 可以考慮使用壓縮傳輸的功能,減少網絡流量,也會提高傳輸速度

l 考慮使用異步請求,分批擷取資料

2)前端接收用戶端請求層面,常見的手段有:

l 動靜分離,部分靜态資源可以直接從Nginx傳回

l 按請求的不同,分發到不同的後端進行處理,比如:負載均衡、業務拆分通路等

l 前面再加上一層來做多個Nginx的負載均衡,比如:LVS、F5等

l 還可以在更前面使用CDN服務

l 還可以對動态内容進行緩存,盡量減少通路後端服務

3)Web伺服器層面,常見的手段有:

l 使用最新的JVM,并進行配置優化

l 對Web伺服器進行配置優化,比如:調整記憶體數量、線程數量等

l 提供多個能提供相同服務的Web伺服器,以實作負載均衡

l 仔細規劃Web伺服器上部署的應用規模

l 對Web伺服器進行叢集

4)Web應用層面,常見的手段有:

l 動态内容靜态化

l Java開發優化

l 優化處理業務邏輯的算法

l 合理高效的利用緩存

l 優化通路資料庫的Sql,可以考慮利用存儲過程等資料庫的能力

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

l 部分業務可以考慮記憶體資料庫,或者是進行純記憶體處理

l 盡量避免遠端調用、大量I/O等耗時的操作

l 合理規劃事務等較為耗資源的操作

l 合理使用異步處理

l 對部分業務考慮采用預處理或者預計算的方式,減少實時計算量

l 内部系統間的業務盡量直接調用、直接處理,減少WebService、工作流等

繼續閱讀