JavaWeb開發設計(四)高併發方案設計
高併發時要求系統對高QPS併發請求快速處理,並且有足夠的系統容量處理這些資料。
簡單總結一下高併發系統的技術點:
1、請求排程
1)使用CDN
CDN即內容分發網路,CDN系統能夠實時地根據網路流量和各節點的連線、負載狀況以及到使用者的距離和響應時間等綜合資訊將使用者的請求重新導向離使用者最近的服務節點上。使使用者可就近取得所需內容,解決 Internet網路擁擠的狀況,提高使用者訪問網站的響應速度。
2)負載均衡
把高併發的訪問平均分配到每一個伺服器節點上,從而減小系統中每一個節點的壓力。
3)設定http連線池 https://blog.csdn.net/ll641058431/article/details/79566277
設定http連線池,可以降低延遲,提高客戶端響應時間,還可以連線池複用,支援更大的併發量。
4)限流
當不可降級場景出現時,需要採用限流限制該場景的併發請求,有損服務而不是不服務。
5)降級
當服務出現問題或影響到核心流程時,需要暫時遮蔽掉,待高峰過後或問題解決後再開啟。
2、前端優化
1)動態內容靜態化
頁面靜態化是指將指含有大量動態元素的動態網頁,如jsp、php等,轉換為html靜態頁面,靜態頁面由於不用載入動態元素,其訪問速度要比動態頁面快得多,可以增加訪問速度,減小後端壓力。
2)增加前端快取
前端頁面快取在系統前端對Web伺服器上的頁面進行快取。對於其他資訊,也可以做部分快取,如cookie。
3、後端優化
1)使用NIO和阻塞佇列
NIO 將最耗時的 I/O 操作(即寫入和讀取緩衝區)轉移回作業系統,因而可以極大地提高速度。
阻塞佇列,因為NIO第二個階段會引起使用者執行緒的阻塞,比如可能等待JDBC連線資料庫,因此在這裡用一個阻塞佇列,執行緒把請求放到阻塞佇列裡面,這個執行緒就可以迴歸線程池,處理別的事情了。
2)使用快取
使用分散式快取,可以提升系統的訪問速度,增大系統處理容量。
3)業務非同步處理
非核心流程非同步處理,降低RT,提高併發度。
4)使用資料庫連線池 https://www.cnblogs.com/wym789/p/6374440.html
由於資料庫連線得到重用,避免了頻繁建立、釋放連線引起的大量效能開銷。
5)資料庫擴充套件
包括分為水平拆分和垂直拆分,垂直拆分即按列拆分,把資料按應用分離,降低單個事務的資料處理量;水平拆分即按行拆分,降低節點的併發量。
參考資料: