應用服務器就是處理網站業務的服務器,網站的業務代碼都部署在這裏,是網站開發最複雜,變化最多的地方,優化手段主要有緩存、集羣和異步等。數據庫
緩存無處不在,既存在於瀏覽器、也存在於服務器和數據庫;既能夠對數據緩存,也能夠對文件緩存,還能夠對頁面片斷進行緩存。瀏覽器
網站性能優化第必定律:優先考慮使用緩存優化性能。緩存
緩存是指將數據存儲在相對較高訪問速度的存儲介質中。一方面緩存訪問熟讀快,能夠減小訪問時間;另外一方面若是緩存的數據是通過計算處理獲得的,那麼被緩存的數據無需重複計算便可直接使用,所以緩存還能夠減小計算時間。安全
緩存的本質是一個內存HASH表,網站應用中,數據緩存以一對Key、Value的形式存儲在Hash表中。緩存主要用來存放讀寫頻率比較高、不多變化的數據。應用程序讀取數據時,先到緩存中讀取,先到緩存中讀取,若是讀取不到或數據已經失效,再訪問數據庫,並將數據寫入緩存。性能優化
2.合理使用緩存服務器
使用緩存對提升系統性能有不少好處,可是不合理使用緩存非但不能提升系統的性能,還會成爲系統的累贅,甚至風險。網絡
頻繁修改的數據:若是緩存中保存的是頻繁修改的數據,就會出現數據寫入緩存後,應用還來不及讀取緩存,數據就已經失效,徒增系統負擔,還可能讀取到髒數據。數據結構
沒有熱點的訪問: 緩存使用內存做爲存儲,若是應用程序訪問數據沒有熱點,那麼緩存就沒有意義。多線程
數據不一致與髒讀: 通常對緩存的數據設置有失效時間,一旦超過失效時間,就要從數據庫中從新加載,所以應用要容忍必定時間的數據不一致,在應用中這種延遲一般是能夠接受的,但在具體應用仍須要慎重對待。還有一種策略是數據更新時當即更新緩存,不過這也會帶來更多系統開銷和事務一致性問題架構
緩存可用性:當緩存服務崩潰時,數據庫會由於徹底承受不了如此大的壓力而宕機,進而致使整個網站不可用,這種狀況被稱做緩存雪崩,發生這種故障,甚至不能簡單地重啓緩存服務器和數據庫服務器來恢復網站訪問。實踐中有的網站經過緩存熱備等手段提升緩存的可用性:當某臺緩存服務器宕機時,將緩存訪問切換到熱備服務器上。經過分佈式緩存服務器集羣,將緩存數據分佈到集羣多臺服務器上可在必定程度上改善緩存的可用性。當一臺緩存服務器宕機時,只有部分緩存數據丟失,從新從數據庫加載這部分數據不會對數據庫產生很大影響。
3.分佈式緩存架構
分佈式緩存是指緩存部署在多個服務器組成的集羣中,以集羣方式提供緩存服務.一種是以Jboss Cache爲表明的須要同步更新的分佈式緩存,一種是以Memcached爲表明的互不通訊的分佈式緩存.
Memcached設計簡單、性能優異、互補通訊的服務器集羣、海量數據可伸縮架構另網站架構師趨之若鶩。
使用消息隊列將調用異步化,在改善網站擴展性的同時,還能夠改善網站系統的性能。
在不使用消息隊列的狀況下,用戶的請求數據直接寫入數據庫,在高併發的狀況下,會對數據庫形成巨大的壓力,同時也使得響應延遲加重。在使用消息隊列後,用戶請求的數據發送給消息隊列後當即返回,再有消息隊列的消費者進程從消息隊列中獲取數據,異步寫入數據庫。因爲消息隊列服務器處理速度遠大於數據庫,所以用戶的響應延遲可獲得有效改善。
消息隊列具備很好的削峯做用-----------即經過異步處理,將短期高併發的事務消息存儲在消息隊列中,從而削平高峯期的併發事務。
在高併發場景下,使用負載均衡技術爲一個應用建構一個由多臺服務器組成的服務器集羣,將併發訪問請求分發到多臺服務器上處理,避免單一服務器因負載壓力過大而響應緩慢,使用戶請求具備更好的響應延遲特徵。
1.多線程
解決線程安全問題的幾個主要手段:將對象設計爲無狀態對象:指對象自己不具存儲狀態信息、使用局部對象、併發訪問資源時使用鎖。
2.資源複用
系統運行時,儘可能減小開銷很大的系統資源的建立和銷燬,好比數據庫鏈接、網絡通訊鏈接、線程、複雜對象等。資源複用模式主要有兩種:單例和對象池。對象池模式經過複用對象實例,減小對象建立和資源消耗。
3.數據結構
在不一樣場景中合理使用恰當的數據結構,靈活組合各類數據結構改善數據讀寫和計算特性可極大優化程序性能.
4.垃圾回收