1. 程式人生 > >一套適用於大部分系統的優化流程

一套適用於大部分系統的優化流程

常規系統優化流程:

1.0 應用程式優化

分析應用程式等GC日誌,檢視程式是否有優化等空間,或者某些業務程式碼是否可以進行優化,這個涉及的面比較廣。

1.1 資料表索引優化

WEB伺服器的CPU閒來無事,但資料庫伺服器的CPU使用率高居不下。經過初步分析,發現瓶頸在資料庫。

解決方案:監控資料庫的訪問,整理出那些耗時的SQL,並且進行SQL查詢分析。根據分析結果,對資料表索引進行重新整理。同時也對資料庫本身的引數設定進行了優化。

1.2 多點部署+負載均衡

慢慢的,訪問速度又不行了,這次是WEB伺服器壓力很大,資料庫伺服器相對空閒。經過分析,發現是系統併發使用者數太多,單WEB伺服器不能夠支援如此眾多的併發請求。

解決方案:使用分散式多點部署的方案,客戶端通過Nginx等負載均衡工具進行請求分發。

1.3 資料分片

多點部署之後,系統基本能應對客戶需求。但是經過一定的時間後,系統的服務速度明顯又慢下來了,增加WEB伺服器也不能解決問題了。分析發現系統瓶頸又回到了資料庫伺服器。SQL執行時間越來越長,而且無法優化。原因也很簡單,資料量太大。

解決方案:進行資料分片,目前市面上的分庫分表中介軟體還是挺多的,目前比較推薦的方式有mycat、sharding-jdbc(工具就不做太多的介紹了)。資料分片的重點在於定製出合理的分片策略。
常用分片策略:

(1)、根據主鍵進行分片:能夠實現最平均的分配方法,每生成一條新資料,會依次儲存到下一個資料表中(主鍵自增情況)。

(2)、根據使用者ID進行分配:能夠確保同一個使用者的所有資料儲存在同一個資料表中。如果經常按使用者id查詢資料,這是比較經濟的一種做法。
(3)、根據時間進行分配:這種對於那些經常只需要查詢一個月內、一年內等業務查詢相對比較友好。