從服務端視角看高併發難題

大快搜尋DKH發表於2018-11-02


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

 

從服務端視角看高併發

服務端處理請求需要耗費服務端的資源,比如能同時開啟的程式數、能同時執行的執行緒數、網路連線數、 cpu、I/O、記憶體等等,由於服務端資源是有限的,那麼服務端能同時處理的請求也是有限的。高併發問題的本質就是:資源的有限性

高併發帶來的問題

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

高併發處理的基本思路

1)從客戶端看

儘量減少請求數量,比如:依靠客戶端自身的快取或處理能力

儘量減少對服務端資源的不必要耗費,比如:重複使用某些資源,如連線池客戶端處理的基本原則就是:能不訪問服務端就不要訪問

2)從服務端看

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

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

應用最佳化,比如:使用更高效的程式語言 ,最佳化處理業務邏輯的演算法,最佳化訪問資料庫的SQL

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

高併發處理的基本手段

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

儘量利用瀏覽器的快取功能,減少訪問服務端,比如: js、css、圖片等

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

考慮使用非同步請求,分批獲取資料

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

動靜分離,部分靜態資源可以直接從 Nginx返回

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

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

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

還可以對動態內容進行快取,儘量減少訪問後端服務

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

使用最新的 JVM,並進行配置最佳化

Web伺服器進行配置最佳化,比如:調整記憶體數量、執行緒數量等

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

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

Web伺服器進行叢集

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

動態內容靜態化

Java開發最佳化

最佳化處理業務邏輯的演算法

合理高效的利用快取

最佳化訪問資料庫的 Sql,可以考慮利用儲存過程等資料庫的能力

合理使用多執行緒,加快業務處理

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

儘量避免遠端呼叫、大量 I/O等耗時的操作

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

合理使用非同步處理

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

內部系統間的業務儘量直接呼叫、直接處理,減少 WebService、工作流等


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555587/viewspace-2218527/,如需轉載,請註明出處,否則將追究法律責任。

相關文章