天天看點

性能測試知多少---系統架構分析

之前有對性能需求進行過分析,那篇主要從項目業務、背景等角度如何抽絲剝繭的将項目的需求抽離出來。在我們進行需求的時候也需要對被測項目的架構有一定的認識,如果不了解被測系統的架構,那麼在後期的性能分析與調優階段将無從下手。

  簡單系統架構介紹

  因為每個公司的業務不同,采用的技術,架構也都有很大不同。但不管怎麼變動,但基本都在三層架構的基礎上擴充與改進。

  下面看一個基本的系統架構:

性能測試知多少---系統架構分析

  表示層:

  表示層運作在客戶終端上,運作java  applet 程式,提供協定控制和使用者界面,與系統使用者實作直接互動,通過tcp/http協定與業務層系統通信,向應用層系統發送請求封包,并接收應用層系統傳回的回應封包。

  業務邏輯層:

  業務邏輯層作為中間層實作核心業務邏輯服務。

  應用伺服器主要運作中間件系統,中間件系統系統作為一個容器來運作各種應用軟體系統。前台發來的請求封包通過中間件傳遞給應用程式,應用程式在處理的過程中調用資料層的資料伺服器,資料伺服器将查詢的資料傳回給應用程式,應用軟體處理完成後通過中間件系統傳回給用戶端。

  在大型的系統中,可以對應用系統進行拆分,比如拆分成交易服務,查詢服務;或者通過負載均衡技術,來分散用戶端發來的請求,使其能承受更大的使用者通路量。

  資料層:

  資料庫叢集技術就是對大型系統應用非常廣泛的一種解決方案。

  大型系統架構介紹

  前面介紹了一般系統的架構,那麼一個大型的系統在設計中使用了哪些手段或技術來提高系統的性能呢

性能測試知多少---系統架構分析

  作業系統是硬體與軟體之間的橋梁,那麼一個穩定的作業系統是系統堅實的基礎。在個人作業系統領域,windows 無疑是絕對的霸主,但随着近幾年的發展,linux/unix以其不俗的性能表現,超強的穩定性與安全性使其在伺服器領域變成重多企業的首選。因為系統伺服器由少數技術人員使用,他們更看重系統的性能、穩定性和安全性等方面的表現

  web伺服器

  web伺服器即中間件伺服器,是應用程式的載體(容器),應用程式隻有在中間件伺服器上才能正常的運作被外界所通路使用。對于window系統來說,iis是微軟配套的web伺服器,他們的搭配應該是夫妻是之間的默契;apache 作為開源力量代表,不管在windows還是linux下面都非常得寵。因為linux與apache 都為開源産品且性能優異,應用非常廣泛。

  · 淘寶網(阿裡巴巴): linux作業系統 + web 伺服器: apache

  · 新浪:freebsd + web 伺服器:apache

  · yahoo:freebsd + web 伺服器:自己的

  · google: 部分linux + web 伺服器:自己的

  · 百度:linux + web 伺服器: apache

  · 網易:linux + web 伺服器: apache

  · ebay: windows server 2003/8 (大量) + web 伺服器:microsoft iis

  · myspace: windows server 2003/8 + web 伺服器:microsoft iis

  常用的系統架構是:

  · linux + apache + php + mysql

  · linux + apache + java (websphere) + oracle

  · windows server 2003/2008 + iis + c#/asp.net + 資料庫

  · window server 2003/2008 + tomcat + mysql

  提高系統性能的相關技術

  網頁html 靜态化

  其實大家都知道網頁靜态化,效率最高,消耗最小的就是純靜态化的 html 頁面,是以我們盡可能使我們的網站上的頁面采用靜态頁面來實作,這個最簡單的方法其實也是最有效的方法。

  但是對于大量内容并且頻繁更新的網站,我們無法全部手動去挨個實作,于是出現了我們常見的資訊釋出系統 cms,像我們常通路的各個門戶站點的新聞頻道,甚至他們的其他頻道,都是通過資訊釋出系統來管理和實作的,資訊釋出系統可以實作最簡單的資訊錄入自動生成靜态頁面,還能具備頻道管理,權限管理,自動抓取等功能,

  對于一個大型網站來說,擁有一套高效,可管理的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 伺服器通信帶來的安全隐患。

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

  這篇文章非常糾結,以目前技術水準來講這塊的東西實屬班門弄斧。部分内容從網際網路搜集。

====================================分割線================================

最新内容請見作者的github頁:http://qaseven.github.io/