架構師之修煉內功篇:系統性能優化
這段時間在做系統的優化。事情的起因是這樣的。我們開發的系統需要在分公司使用,而分公司的網絡帶寬只有專線2M的。我們的系統的層次結構是C/S三層,雖然客戶端是Swing開發的Desktop應用,但一樣可以在分公司的通過網絡連接進行訪問,可以做到每次登陸后,實時更新程序。由于網絡速度不穩定,導致原來在局域網很快完成的應用,到分公司現場測試時,發現很慢,一個操作需要100 多秒(由于后臺算法比較復雜,連接中間件和數據的查詢次數比較頻繁)。根據分析,將瓶頸確定在客戶端與中間件層之間。為了優化,需要將精力放在這里,盡量減少與中間層的交互。由于篇幅有限,本文不講Weblogic和Oracle DB的性能優化,僅從程序的角度來講系統效率的優化。

具體做法如下:
1.根據測試報告中所描述的時間,找出瓶頸所在,確定優化方案,這個很重要,是行動的指南。
2.確定優化目標,例如原來100秒,優化到6秒;
3.分析網絡連接點,將能夠從服務端可以取出的數據,一次取出,在客戶端進行邏輯運算。
4.需要考慮在網絡不穩定的情況或異常關機的情況下,對于客戶端的未保存的數據進行緩存,保證用戶輸入數據的安全。
5.除了減少中間層的訪問次數,對于查詢數據較慢的表格也需要加如Index進行優化。
根據上述方法,優化已經基本達到了目標,總結如下:
1.優化無止盡,需要找出瓶頸,確定優化目標;
2.優化不僅僅考慮中間層的連接次數,對于數據庫的性能優化也同樣重要。遇到過原來一個查詢需要8000MS,通過數據庫和SQL語句的優化,達到了500MS;
3.優化需要結合具體的程序考慮,需要層層跟蹤。例如,需要跟蹤哪里進行了中間層連接,這個連接是否有必要。
4.利用緩存時候,需要考慮緩存數據的一致性。
5.保存數據,進行批量中間層保存;
6.獨立的事務處理可以在PL/SQL里面實現,這樣效率***。





















