一.應用服務器負載均衡
1.鏈路負載均衡
經過DNS解析域名時,將客戶端的訪問解析成不一樣的IP,分配到不一樣的入口,同時儘量保證所訪問的入口是全部入口中可能較快的一個。
2.軟件負載均衡
訪問時生成頁面的任務會被分配給其中一臺服務器完成,這個過程要保證公正、公平、平均。
3.硬件負載均衡
二.頁面優化
1.減小請求次數
經過合併CSS和Javascript文件來減小請求次數或是將資源文件分佈在多個域名下來繞過瀏覽器併發加載的限制。
2.壓縮CSS和Javascript代碼。
經過對文件代碼內容刪除換行和空格來減小代碼存儲空間。
3.優化圖片
經過對圖片進行截取和縮放大小來優化圖片,加快圖片加載速度。
4.靜態化
利用FreeMarker將數據庫數據靜態化成html文件來提升訪問速度。適用場合:對於含有不要求實時性的內容的網頁可以使用,如網站首頁,各模塊首頁的新聞,公告等等。
三.java設計優化
1.設計模式
單例模式、代理模式、享元模式、裝飾者模式、觀察者模式。
2.緩存
如:使用Ehcache能夠結合AOP,作業務層的方法緩存,以類名、方法名、參數名做爲key,結果對象做爲value。適用場合:對數據不常常更新,查詢方式比較固定。
3.緩衝
如:JDK的IO包中BufferedWriter
4.多線程
適用場合:羣發郵件,大批量處理圖片,寫日誌。典型的消費者生產者模式
5.對象池
如:數據庫鏈接池C3P0、線程池Executors、Apache的對象池Jakarta Commons Pool
6.分佈式緩存
分佈式緩存框架Terracotta,可實現分佈式session、EhCachc等共享。
四.java程序優化
1.String
String的replace、substring內存泄露問題,StringTokenizer取代split方法,charAt方法代替startsWith、endsWith方法,StringBuilder取代String並初始化預估的capacity。
2.List
查詢優先使用ArrayList,插入刪除優先使用LinkedList。若是插入數據在數組最後一位,則ArrayList性能好於LinkedList。遍歷實現了RandomAccess接口的集合性能由高到低依次排序:索引下標>迭代器>加強for
3.Map
hashCode方法決定集合的性能。
4.優化集合訪問代碼
建立集合對象時,初始化預估的capacity可提升性能。儘可能使用內部元素來取代方法調用。
5.NIO
使用MappedByteBuffer來取代傳統IO來進行文件讀寫。
6.引用
在適當時候緩存能夠用弱引用或是軟引用來實現,如:WeakHashMap。
7.異常
儘可能避免在循環體內使用異常捕獲。
8.位運算代替乘除運算
五.數據庫優化
1.分表
經過對記錄ID取膜或時間維度的規則進行分表。
2.分區
Oracle數據庫支持分區,能夠根據某個列的數據規則進行分區。
3.中間表
將原數據根據想獲得的目標數據進行一系列的處理作出一套中間表,直接從中間表中進行查詢,經過定時調度定時更新中間表。適用場合:對數據內容實時性要求不高,如:數據分析。
4.歷史歸檔
可根據時間整理出不多用到的數據集抽到歷史表中,數據表只留經常使用數據,能夠利用對象序列化反序列化來實現。適用場合:對歷史數據極少訪問。
5.列式存儲
MySQL開源數據倉庫Infobright,對高壓縮比數據存儲,查詢速度可提升5~60倍,免費版不支持DML語句,不支持高併發,只能支持10多個併發查詢,可經過load導入csv數據文件。適用場合:對數據不常常更新而且實時性要求不高,如:數據分析。
6.查詢緩存
MySQL Query Cache,Oracle Result Cache,可經過修改數據庫配置文件來實現查詢緩存,sql語句做爲key,結果做爲value的緩存方式,當數據表發生改變時相應的cache就會失效。適用場合:對數據不常常更新,查詢方式比較固定。注:支持錶鏈接,但不支持函數
7.建索引
對於使用較複雜的sql,對大數據量表查詢時候,可採用建索引的方式,將涉及到的查詢條件字段,可提升查詢速度。
8.sql優化
sql語句中,select後儘可能明確字段名來代替*來減小查詢列。儘可能少使用in關鍵字,可經過left join和exists關鍵字取代。
9.存儲過程
存儲過程只需編譯一次,適用場合:當對數據庫進行復雜操做時。如:多表的查詢,計算,更新。
10.數據庫服務器集羣,讀寫分離。
六.JVM調優。
1.肯定堆內存大小(-Xmx、-Xms)。
2.合理分配新生代和老年代(-XX:NewRatio、-Xmn、-XX:SurvivorRatio)。
3.肯定永久區大小(-XX:Permsize、-XX:MaxPermSize)。
4.選擇垃圾收集器(CMS、G1等)、對垃圾收集器合理設置。
5.禁用顯示GC(-XX:+DisableExplicitGC)。
6.禁用類元數據回收(-Xnoclassgc)。
7.禁用類驗證(-Xverify:none)。
8.jvm增長內存參數-Xms256M -Xmx1024M -XX:MaxNewSize=512m -XX:MaxPermSize=512m
七.需求上解決:若是性能瓶頸的模塊的需求是無關緊要,能夠考慮屏蔽掉此需求。
八.性能調優工具
1.JMeter、LoadRunner:性能測試、壓力測試。
2.JConsole、JProfiler:監控堆信息、線程、永久區使用狀況、類加載狀況等。
3.Visual VM:故障診斷、性能監控。html