(方案)高併發優化思路

語言: CN / TW / HK

一個大型系統的高併發優化有很多環節,在每個環節存在的問題及解決思路如下:

1. 客户端

問題

頁面加載緩慢、卡頓、頻繁請求服務器獲取資源、頁面應用體積過大臃腫、多次加載靜態資源消耗資源等。

優化思路

減少頁面加載時間 、儘量減少頁面應用的體積、訪問加速、過濾無效請求減少請求量等

解決方案

  • 動靜分離:H5靜態頁面,通過Ajax異步調用後端接口獲取數據
  • 靜態資源壓縮:webpack 、壓縮軟件進行靜態資源壓縮和打包
  • 靜態資源部署:H5 靜態頁面的靜態資源,部署到CDN 和雲端加速站點訪問
  • 頁面緩存: 如外部插件、靜態資源、常用信息等,適當採用本地緩存
  • 請求過濾及拆分:當請求內容較大時,拆分成多個請求,並行調用 。頁面過濾無效請求。
  • 請求處理策略:如長輪詢操作,採用 websocket等方式,減少資源消耗
  • 客户端頁面部署:部署多份頁面至服務器,採用輪詢策略分攤訪問量,如將頁面部署到2台 Nginx上等。

2. 負載均衡

問題

頁面單獨請求服務器獲取資源未以過負載均衡、負載均衡算法不合適,負載均衡配置參數不適合。

優化思路

設置符合系統場景的算法、調配配置相關參數、提高處理能力等

解決方案

  • 負載均衡算法選擇:靈活採用輪詢、權重和ip_hash等算法
  • 緩存機制: 調整負載均衡服務器的緩存機制,當靜態或相對時間不變的請求數據,可以直接返回,無須多餘請求應用。https://my.oschina.net/pengchanghua/blog/4267009
  • 配置調整:調整Nginx 請求的相關參數。

3.網絡

問題

頻繁多次請求消耗帶寬、單次請求數據量過大、TCP網絡傳輸參數配置不適合。

優化思路

減少請求量、減少請求的內容體、優化網絡環節,、加快傳輸交互等

解決方案

  • 傳輸數據壓縮:請求參數內容壓縮後再傳輸、服務器端處理完返回數據壓縮後至客户端。
  • TCP 傳輸協議:眾多傳輸協議都是基於TCP網絡傳輸,HTTP1.1 引入長連接,可減少TCP三次握手的次數以及流量控制、慢啟動等方式 。
  • 減少 cookie 、session傳遞

4.web 應用

問題

web應用硬件配置低、web應用單體結構、Web應用不支持擴容拆分、Web數據處理較慢,Web響應時間過、宕機、JVM參數設置不合理等。

優化思路

調整應用參數、加大處理併發能力、調整系統配置、機器數量、應用支持擴容、模塊支持拆分、熱點數據存儲到緩存、異步任務隊列處理、減少響應時間、程序合理設計避免死鎖等。

解決方案

  • 系統預估:根據以往設計和經驗,提前預估用户增長量和系統大吞吐量、投入匹配的機器數量、硬件配置等。
  • 設計方案:提前設計好HA高可用方案、容災方案、高併發處理相關方案。
  • JVM參數 :通過過去1-2年內的數據分析,如應用gc日誌、錯誤日誌、大數據日誌、監控日誌等,設置合理的JVM相關參數。
  • 引入緩存:熱點數據、實時數據可存儲緩存服務器中,提高應用處理能力,可處理高併發帶來的相關問題。
  • 引入消息隊列:對於處理時間較長、消耗IO等場景,通過異步隊列來實現,提高應用處理速度,可處理高併發帶來的相關問題。
  • 應用模塊按照相關維度,如區塊、類別進行折分,模塊和模塊 之間強耦合變成松耦合或不耦合,分別部署在相關應用服務器。
  • 應用集羣部署

5.數據庫

問題

數據庫配置低、參數設置不合理、表結構設計不合理、索引設計低效、數據存儲策略低效、SQL語句執行時間過長、死鎖等。

優化思路

調整系統參數、加快處理能力,調整系統硬件配置、機器數量、表結構合理設計、合理設計索引、合理設置數據量存儲策略等

解決方案

  • 數據庫預估:提前預估數據庫的機器數量、硬件配置等。
  • 設計方案:提前設計好相關高可用方案、數據丟失/備份方案、數據存儲方案、數據同步方案。
  • 表存儲優化:通過表現有存儲數據量大小和未來的增長速度 提前設計好存儲方案,如分區分表。
  • 表結構優化:通過數據表處理的日誌分析,表結構設計是否合理,字段屬性是否需要調整,表是否要分區,分區的策略。
  • SQL 語句優化:通過執行計劃查看SQL的執行過程 ,進行相關語句優化調整
  • 表索引設計: 通過數據處理的日誌和慢SQL進行分析統計,是否需要調整表索引結構 。
  • 數據庫部署:部署策略是否需要調整,如主從模式、一主多從、多主多從等