1. java代碼優化
java代碼優化6大原則 : https://blog.csdn.net/bunny1024/article/details/72803708
java代碼優化: https://www.cnblogs.com/xrq730/p/4865416.html
2. 業務優化
公司后台是一個手機app后台, 全天平均每秒並發50~60, 個別時間點可達到5000+, 我采用以下措施
(a). 盡量減少對服務器請求次數, 單次請求, 返回盡量多的信息.
比如有個拉取banner廣告接口,根據banner展示的位置不同, 會走不同的查詢sql, 相當於多個接口集成到一個接口上, 造成接口
訪問壓力大, 大量占用服務器資源.
改進 : 一次查詢, 返回所有banner廣告信息, 使用gzip壓縮json數據
(b). 盡量避免高並發時間點, 將請求散布到盡可能大的時間范圍內
安卓端每天有一部分信息需要在特定時間點更新, 該點為服務器配置, 會造成每天配置的點訪問壓力瞬時加大, 單台tomcat優化后每秒並發量在500-800,
加配置浪費硬件配置. 不加配置, 造成服務器壓力過大, 部分請求會失敗或者超時, 嚴重影響用戶體驗.
改進 :
1. 調整訪問方式為用戶隨機和代碼隨機, 具體做法是
用戶隨機 - 每天手機第一次亮屏並且用戶切回到主桌面, 滿足2個條件則發送請求. 將原來過0點的瞬時請求, 轉化到0點過后的任意時間點,
大大降低瞬時點的並發量
代碼隨機 - 服務端配置更新時間精確到某一分鍾, 用一個隨機函數確定請求時間點(秒), 可以將請求由原來的某一秒散布到一分鍾以內
(c). 更改運營策略, 錯峰訪問
結合nginx訪問日志, 確定全天高並發時間點和高訪問量接口, 具體參見我的nginx日志分析:
高並發點采用b方法,
對於高頻訪問數據, 要預先加載到緩存中, 次要一些的請求放到全天請求不高的時間段, 比如加載廣告資源,
可以預先用定時任務加載緩存中, 而app靜默更新下載之類的, 不太緊急的接口, 可以放到並發量不高的時間段去訪問
3. tomcat/jvm 優化
tomcat調優 : https://www.cnblogs.com/hcl1991/p/10838245.html
4. nginx優化
參考nginx調優: https://www.cnblogs.com/hcl1991/p/10838912.html
5. mysql優化
參考: https://www.cnblogs.com/hcl1991/p/10839809.html
參考:
aliyun如何處理網站高並發流量問題: https://yq.aliyun.com/articles/696140?spm=a2c4e.11155472.0.0.18bf2c5d5oy2Ui