性能調優

性能目的:
一、客戶明確要求:標準明確
二、只想瞭解系統的性能(容量測試):最大用戶數和最佳用戶數-->須要對系統作分析,找出系統的壓力點
三、找出系統的性能瓶頸:分析可能對系統形成瓶頸的邏輯業務,進行系能測試
四、瞭解系統在長時間壓力下的性能情況(強度測試):長期處於大用戶的訪問狀態,問題的暴露:如內存溢出
 
 
性能測試的環境:
硬件、軟件環境、網絡環境(除去找出性能的瓶頸能夠在廣域網,其餘的都在局域網測試。否則你壓力工具所發送的請求都會卡死在網絡的傳輸過程當中)
 
 
尋找系統的壓力點

須要對系統的哪一個頁面或業務進行加壓。這個不是本身想出來的,須要與開發人員的溝通。系統的首頁?系統的登陸?仍是系統的交易過程?各個業務的用戶比例是多少?css

  只有得到有效的性能需求,才容易尋找和定位壓力點。html

 
性能測試分類:、
系能測試(狹義)、負載測試、壓力(強度)測試、可靠性測試、併發測試、配置測試
 
 

提升系統性能的相關技術                                                              前端

 

網頁HTML 靜態化web

其實你們都知道網頁靜態化,效率最高,消耗最小的就是純靜態化的 html 頁面,因此咱們儘量使咱們的網站上的頁面採用靜態頁面來實現,這個最簡單的方法其實也是最有效的方法。數據庫

可是對於大量內容而且頻繁更新的網站,咱們沒法所有手動去挨個實現,因而出現了咱們常見的信息發佈系統 CMS,像咱們常訪問的各個門戶站點的新聞頻道,甚至他們的其餘頻道,都是經過信息發佈系統來管理和實現的,信息發佈系統能夠實現最簡單的信息錄入自動生成靜態頁面,還能具有頻道管理,權限管理,自動抓取等功能,apache

對於一個大型網站來講,擁有一套高效,可管理的CMS 是必不可少的,除了門戶和信息發佈類型的網站,對於交互性要求很高的社區類型網站來講,儘量的靜態化也是提升性能的必要手段,將社區內的帖子,文章進行實時的靜態化,有更新的時候再從新靜態化也是大量使用的策略,像Mop 的大雜燴就是使用了這樣的策略,網易社區等也是如此同時,html 靜態化也是某些緩存策略使用的手段,緩存

對於系統中頻繁使用數據庫查詢可是內容更新很小的應用,能夠考慮使用 html 靜態化來實現,好比論壇中論壇的公用設置信息,這些信息目前的主流論壇都 能夠進行後臺管理而且存儲再數據庫中,這些信息其實大量被前臺程序調用,可是更新頻率很小,能夠 考慮將這部份內容進行後臺更新的時候進行靜態化,這樣避免了大量的數據庫訪問請求;安全

 

圖片服務器分離服務器

對Web 服務器來講,無論是 Apache,IIS 仍是其餘容器,圖片是最消耗資源的,因而咱們 有必要將圖片與頁面進行分離,這是基本上大型網站都會採用的策略,他們都有獨立的圖片服務器,甚至不少臺圖片服務器,這樣的架構能夠下降提供頁面訪問請求的服務器系統壓力,而且能夠保證系統不 會由於圖片問題而崩潰,在應用服務器和圖片服務器上,能夠進行不一樣的配置優化,好比 apache 在配置 ContentType 的時候能夠儘可能少支持,儘量少的 LoadModule,保證更高的系統消耗和執行效率;網絡

 

數據庫集羣和庫表散列 

大型網站都有複雜的應用,這些應用必須使用數據庫,那麼在面對大量訪問的時候,數據庫的瓶頸很快就能顯現出來,這時一臺數據庫將很快沒法知足應用,因而咱們須要使用數據庫集羣或者庫表散列。

在數據庫集羣方面, 不少數據庫都有本身的解決方案, Oracle, Sybase 等都有很好的方案,經常使用的 MySQL 提供的 Master/Slave 也是相似的方案,您使用了什麼樣的 DB,就參考相應的解決方案來實施便可。

上面提到的數據庫集羣因爲在架構,成本,擴張性方面都會受到所採用 DB 類型的限制,因而咱們須要從應用程序的角度來考慮改善系統架構,庫表散列是經常使用而且最有效的解決方案,咱們在應用程序中安裝 業務和應用或者功能模塊將數據庫進行分離,不一樣的模塊對應不一樣的數據庫或者表,再按照必定的策略 對某個頁面或者功能進行更小的數據庫散列,好比用戶表,按照用戶 ID 進行表散列,這樣就可以低成本 的提高系統的性能而且有很好的擴展性,sohu 的論壇就是採用了這樣的架構,將論壇的用戶,設置,帖 子等信息進行數據庫分離,而後對帖子,用戶按照板塊和 ID 進行散列數據庫和表,最終能夠在配置文件 中進行簡單的配置便能讓系統隨時增長一臺低成本的數據庫進來補充系統性能;

 

緩存

緩存一詞搞技術的都接觸過,不少地方用到緩存,網站架構和網站開發中的緩存也是很是重要,這裏先 講述最基本的兩種緩存,高級和分佈式的緩存在後面講述, 架構方面的緩存,對 Apache 比較熟悉的人都能知道 Apache 提供了本身的緩存模塊,也可使用外加的 Squid 模塊進行緩存,這兩種方式都可以有效的提升 Apache 的訪問響應能力, 網站程序開發方面的緩存,Linux 上提供的 Memory Cache 是經常使用的緩存接口,能夠在 web 開發中使用, 好比用 Java 開發的時候就能夠調用 MemoryCache 對一些數據進行緩存和通信共享, 一些大型社區使用了 這樣的架構, 另外, 在使用 web 語言開發的時候, 各類語言基本都有本身的緩存模塊和方法, PHP 有 Pear 的 Cache 模塊,Java 就更多了,net 不是很熟悉,相信也確定有;

 

鏡像

鏡像是大型網站常採用的提升性能和數據安全性的方式,鏡像的技術能夠解決不一樣網絡接入商和地域帶來的用戶訪問速度差別, 好比 ChinaNet 和 EduNet 之間的差別就促使了不少網站在教育網內搭建鏡像站點,數據進行定時更新或者實時更新,在鏡像的細節技術方面,這裏不闡述太深,有不少專業的現成的解決 架構和產品可選,也有廉價的經過軟件實現的思路,好比 Linux 上的 rsync 等工具;

 

負載均衡

負載均衡將是大型網站解決高負荷訪問和大量併發請求採用的終極解決辦法,負載均衡技術發展了多年,有不少專業的服務提供商和產品能夠選擇,下面介紹幾種常見的負載均衡。

1. 基於DNS的負載均衡--一個域名綁定多個IP

DNS負載均衡技術是最先的負載均衡解決方案,它是經過DNS服務中的隨機名字解析來實現的,在DNS服務器中,能夠爲多個不一樣的地址配置同一個名字,而最終查詢這個名字的客戶機將在解析這個名字時獲得其中的一個地址。所以,對於同一個名字,不一樣的客戶機會獲得不一樣的地址,它們也就訪問不一樣地址上的Web 服務器,從而達到負載均衡的目的。

這種技術的優勢是,實現簡單、實施容易、成本低、適用於大多數TCP/IP應用;可是,其缺點也很是明顯,首先這種方案不是真正意義上的負載均衡,DNS 服務器將Http請求平均地分配到後臺的Web服務器上,而不考慮每一個Web服務器當前的負載狀況;若是後臺的Web服務器的配置和處理能力不一樣,最慢的 Web服務器將成爲系統的瓶頸,處理能力強的服務器不能充分發揮做用;其次未考慮容錯,若是後臺的某臺Web服務器出現故障,DNS服務器仍然會把DNS 請求分配到這臺故障服務器上,致使不能響應客戶端。最後一點是致命的,有可能形成至關一部分客戶不能享受Web服務,而且因爲DNS緩存的緣由,所形成的後果要持續至關長一段時間(通常DNS的刷新週期約爲24小時)。因此在國外最新的建設中心Web站點方案中,已經不多采用這種方案了。

2. 經過硬件四層交換實現負載均衡

在硬件四層交換產品領域,有一些知名的產品能夠選擇,好比Alteon、F5等,這些產品很昂貴,可是物有所值,可以提供很是優秀的性能和很靈活的管理能力。Yahoo中國當初接近2000臺服務器使用了三四臺Alteon就搞定了

3. 經過軟件四層交換實現負載均衡

軟件四層交換咱們可使用Linux上經常使用的LVS來解決,LVS就是Linux Virtual Server,他提供了基於心跳線heartbeat的實時災難應對解決方案,提升系統的魯棒性,同時可供了靈活的虛擬VIP配置和管理功能,能夠同時知足多種應用需求,這對於分佈式的系統來講必不可少。

一個典型的使用負載均衡的策略就是,在軟件或者硬件四層交換的基礎上搭建squid集羣,這種思路在不少大型網站包括搜索引擎上被採用,這樣的架構低成本、高性能還有很強的擴張性。

4. 經過反向代理服務器實現負載均衡

反向代理服務器又稱爲 WEB 加速服務器,它位於 WEB 服務器的前端,充當WEB服務器的內容緩存器,反向代理服務器是針對 WEB 服務器設置的,後臺 WEB 服務器對互聯網用戶是透明的,用戶只能看到反向代理服務器的地址,不清楚後臺 WEB 服務器是如何組織架構的。當互聯網用戶請求 WEB 服務時,DNS 將請求的域名解析爲反向代理服務器的 IP 地址,這樣 URL 請求將被髮送到反向代理服務器,由反向代理服務器負責處理用戶的請求與應答、與後臺 WEB 服務器交互。利用反向代理服務器減輕了後臺 WEB 服務器的負載,提升了訪問速度,同時避免了因用戶直接與 WEB 服務器通訊帶來的安全隱患。

 

----------------------------------------------------------------------------------

 

 

 
前端展現性能VS後臺性能
(ab.fildder.yslow+showslow)
 
頁面性能測試:

一、減小請求和響應的往返次數:http緩存機制(etag)

2。減小請求和響應的往返字節大小:少圖片、全部css濃縮一個css文件、全部腳本濃縮一個js文件、簡化頁時間、http壓縮
 
 
 
 
 
 
 
 
-------------------------------------------------------------------------------