化)
一、耗時統(tǒng)計在做接口的性能優(yōu)化時最重要的是知道時間消耗在哪里。優(yōu)先使用 Arthas 進行耗時統(tǒng)計。不需要寫冗余代碼無侵入。https://blog.csdn.net/sinat_32502451/article/details/142960019可以用StopWatch進行耗時統(tǒng)計。需要寫一些代碼。詳情見https://blog.csdn.net/sinat_32502451/article/details/148350451二、鏈路追蹤如果團隊使用了Skywalking可以用來進行鏈路追蹤耗時統(tǒng)計。時間主要消耗在哪些服務哪些方法通過traceId一看便知。Skywalking非常有用哪怕項目里沒有也可以積極推進并接入Skywalking。三、性能監(jiān)控如果團隊里面有用到一些性能監(jiān)控的工具比如Grafana、Prometheus??梢远嗫聪陆涌诘恼埱髷?shù)、響應時間、服務器的CPU、GcCount等。四、線程池多線程、異步如果多個任務之間不存在先后關系沒有強依賴可以使用線程池做多線程、異步。如果接口中存在多個任務可以考慮使用多線程。如果接口中有某個任務比較耗時可以考慮使用異步。CompletableFuture類能夠開多線程處理多個任務還能處理異步回調(diào)。還能將多個任務合并成一個設置阻塞時間。非常實用。詳情見https://blog.csdn.net/sinat_32502451/article/details/133955576線程池調(diào)優(yōu)詳情見https://blog.csdn.net/sinat_32502451/article/details/148350537五、MQMQ的使用場景: 異步解耦削峰。如果存在耗時的任務或功能對性能的要求比較高可以使用MQ做異步。線程池也可以異步處理但如果系統(tǒng)掛了線程池也會失效MQ則不會。MQ做異步還有重試機制。六、數(shù)據(jù)庫數(shù)據(jù)表加索引數(shù)據(jù)庫最常見的優(yōu)化就是加索引。索引能夠極大地提升數(shù)據(jù)表查詢的速度。常用的區(qū)分度高的字段可以嘗試加索引。如果經(jīng)常查詢的有多個字段可以考慮查詢條件是否符合最左匹配原則符合的話用復合索引。批量處理–數(shù)據(jù)表接口代碼在做批量處理時一定要注意不要在for循環(huán)中調(diào)用數(shù)據(jù)庫/緩存不僅性能極差還有連接數(shù)耗盡的可能。數(shù)據(jù)表的批量處理詳情見https://blog.csdn.net/sinat_32502451/article/details/148350849Explain接口中的sql比較慢時可以用 Explain查看執(zhí)行計劃做性能優(yōu)化。詳情見 https://segmentfault.com/a/1190000008131735分庫分表數(shù)據(jù)表的數(shù)據(jù)量大可以分庫分表。詳情見 https://blog.csdn.net/sinat_32502451/article/details/140732625七、緩存加緩存Redis緩存的處理速度遠遠快于數(shù)據(jù)庫/網(wǎng)絡這些IO。在做性能優(yōu)化時如果數(shù)據(jù)庫/網(wǎng)絡太慢經(jīng)常會用到Redis緩存。加緩存有幾點要注意1.如果在查詢時使用了緩存那么在更新(刪除、插入)之后必須處理緩存(一般是更新DB后刪除緩存)讓數(shù)據(jù)最終一致。2.實時數(shù)據(jù)頻繁更新的數(shù)據(jù)最好不要加緩存。3.如果不是頻繁更新的數(shù)據(jù)又沒法在數(shù)據(jù)變更時處理緩存比如調(diào)用其他系統(tǒng)的接口可以嘗試加較短時間的緩存比如1分鐘。詳情見 https://blog.csdn.net/sinat_32502451/article/details/139545057批量處理–緩存Redis的execute()可以在一次連接中處理多個命令。Redis的execute()詳情見https://blog.csdn.net/sinat_32502451/article/details/134366504Pipeline (管道) 可以一次性發(fā)送多條命令并在執(zhí)行完后一次性將結果返回。Redis的管理操作詳情見: https://blog.csdn.net/sinat_32502451/article/details/134366490數(shù)據(jù)預熱使用定時任務定時去查詢數(shù)據(jù)或者是通過前置過濾器提前預熱。查詢之后數(shù)據(jù)進入緩存那么用戶再去查時速度就會快很多。這也是一種很常見的性能優(yōu)化方式。·八、服務器服務器的狀態(tài)服務器是否正常啟動。在調(diào)用接口時服務器的CPU、GcCount是否正常。九、優(yōu)化服務鏈路如果接口的服務鏈路比較復雜可以試著優(yōu)化服務鏈路。比如A服務中分別調(diào)用了B,C,D服務那可以試著將BCD服務的內(nèi)容合并到一個服務中只做一次調(diào)用。比如服務鏈路為 A-B-C-D可以試著縮短服務鏈路由 A-D這樣消耗的時間也會變短。十、去掉冗余邏輯如果接口復用了項目中其他的方法/代碼可以看是否有冗余的邏輯如果有冗余的考慮能否抽取可用邏輯去掉冗余的邏輯。