1. 程式人生 > >伺服器大流量、高併發該怎麼處理

伺服器大流量、高併發該怎麼處理

高併發處理的基本思路
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、工作流等。

  5. 資料庫層面,常見的手段有:合理選擇資料庫的引擎,比如Mysql的InnoDB與MyISAM引擎;進行配置優化;可以考慮使用儲存過程來處理複雜的資料邏輯;資料庫叢集,進行讀寫分離;合理設計資料庫的表結構、索引等;分庫、分表,降低單庫、單表的資料量。