獨家授權(quán)請勿轉(zhuǎn)載
“ColdFusionMX開發(fā)的應用程序已經(jīng)夠強壯和快速了,但是我還想讓它更好!” ---7yue.com
1996年的Internet沒有留給我什么印象,唯一的印記就是非?焖俚脑L問速度,即使在28.8的小貓下也是如此。因為當時Internet信息全部都是Html代碼,這一切直到Flash誕生后才有了轉(zhuǎn)變。(玩笑)
當時的Internet應用幾乎沒有復雜的后臺交互,沒有從后臺數(shù)據(jù)庫的數(shù)據(jù)查詢的響應時間,沒有中間件服務器,沒有負載均衡。服務器如果有思想的話,它們一定很懷念當時身上所承受的壓力。
“現(xiàn)在該死的人類開發(fā)的該死的應用系統(tǒng),我們哥幾個合伙抬一個都抬不動!
---來自服務器甲的滿腹牢騷
言歸正傳,ColdFusion自誕生以來,就以穩(wěn)定的性能和快速的響應速度獲得了眾多企業(yè)客戶的青睞,移植到Java平臺為核心的ColdFusionMX更是秉承了這個優(yōu)點。但是,這個優(yōu)點不能成為我們肆意開發(fā)ColdFusion應用的借口,精益求精應該是我們更高的追求。由于目前Internet應用的B/S(Browser/Server)的結(jié)構(gòu)已經(jīng)越來越多的應用在Intranet的企業(yè)內(nèi)部,諸如OA,CRM,ERP,CMS等大規(guī)模的集成應用都要求應用具備高度的可靠性和高效的響應速度以及極少的出錯率。所以,對于一個資深的(或者是合格的)開發(fā)人員而言,“效率不行我們增加服務器”這種話是自身不負責任和不夠?qū)I(yè)的表現(xiàn)。
高度可靠性按照我們ColdFusion高級工程BenForta的話來說就是要保證你的應用在運行過程中有99.99%的時間可以處理來自外部的響應,包括合理的和不合理的。合理的給予響應,不合理的給予拒絕或者錯誤信息擲出。
為什么上面的段落要提到99.99%,而不是99.9%或者是99%。這個數(shù)字是有說法的。首先,這個指標是針對最終用戶而言的,而不是針對服務器。單一的服務器運行一個大規(guī)模的電子商務應用或者高負載的交互應用站點是根本無法達到99.99%的時間正常運行的。對于最終用戶而言,他瀏覽你的站點,使用你的程序,采納你的服務,總是前臺的商務邏輯在起作用,能夠在99.99%的時間內(nèi)對最終用戶保持商務邏輯的有效性,就必須使用集群(Cluster)的操作方式,只有這樣,才能保證在一臺服務器出錯(術(shù)語是DownTime)的時候,應用邏輯可以在最終用戶沒有察覺的情況下順利轉(zhuǎn)移到另一臺服務器運行,這種情況同樣也屬于正常運行。那么正常運行時間的百分比是這樣算出來的: 最終用戶端的商務邏輯正確運行時間/(7*24*365)=正常運行百分比
下表是一個正常運行時間和錯誤運行的時間對比表格(表格數(shù)據(jù)來源于Macromedia.Inc):
正常運行百分比 |
每年的出錯時間 |
99.999 |
5分鐘 |
99.99 |
53分鐘 |
99.9 |
8小時45分鐘 |
99 |
87小時36分鐘 |
各位應該已經(jīng)看到99.99%的正常運行時間和99%的差距了。大多數(shù)站點Crash崩潰的原因就是大量的負荷和不正確的性能調(diào)試。
既然站點崩潰的原因來自于服務器的超負荷,我們?nèi)绾沃雷约赫军c運行的負荷狀況呢?在這里,站長通過2種方案來進行服務器的負荷流量的評估。第一種方案,叫做Simulating Stress Test,模擬壓力測試。這方面需要開發(fā)者做到2個準備。首先是有一個測試工具,比如LoadRunner(來自于www.mercuryinteratctive.com)或者是微軟免費的Web application stress,站長推薦后者,第一是免費,第二是測試的過程比較簡單,不需要太高的專業(yè)水平。第二種方案,就是Actual Stress Test,真實壓力測試,這方面也可一通過一些檢測工具來達到評估結(jié)果。但是對于企業(yè)而言,站點性能的監(jiān)測更勝于評估,因為模擬的壓力測試總是和真實情況有出入,所以,真實環(huán)境的Web Trends對于站點的分析,更加重要。
下面是使用上述工具進行壓力測試時,我們需要注意的一些問題,這些問題的結(jié)果對于了解站點性能有很大的幫助:
- 每小時在線用戶數(shù)量或者Session數(shù)
- 平均每小時的在線用戶數(shù)量或者Session數(shù)
- 不同小時的在線用戶峰值比較(網(wǎng)站什么時候瀏覽人最多?)
- 站點中最常用的導航鏈接是什么?
- 在做什么操作時,服務器CPU操作時間最長?(數(shù)據(jù)查詢還是什么?)
- 最常被訪問的頁面是哪些?
- Session在網(wǎng)站的平均停留時間是多長?(你的網(wǎng)站可用性是否很高,用戶很喜歡?)
- 訪問你的用戶都是一個什么樣的帶寬接入條件?(可以通過在線投票來實現(xiàn))
- 網(wǎng)站正常運行期間,CPU的使用率有多高?
一個個人站點當然不強調(diào)這些(但是也不表示不需要進行這些評估,藍色的站點訪問量很大,對于性能的評估可能要求更高。)站長在模擬端推薦使用MS的Web Stress這個免費工具,對于有條件的企業(yè)商務應用站點服務器,推薦架設一個Web Trends來進行上述問題結(jié)果的記錄和跟蹤。Web Trends是一個商業(yè)的工具,功能強大,通過分析Web Server的日志來統(tǒng)計完成全面的站點分析,不了解的朋友可能僅僅認為它是一個網(wǎng)站訪問量的記錄工具,其實不然。好了,不替Web Trends做廣告了,也不多說Stress工具的測試Script怎么寫,因為這個可能又涉及到了另外一個職業(yè)了。在研究高可靠性的本篇文章中,我僅僅告訴大家評估網(wǎng)站可靠性需要注意到的問題。除了進行上述一系列問題的真實評測,我們還應該通過編程和使用第三方工具的結(jié)合方法,來測試動態(tài)交互性的可靠程度(如果你的企業(yè)應用有交互的話)。比如,用戶登錄注冊的頻率、商務網(wǎng)站購買東西的數(shù)據(jù)查詢頻率,購物車的狀態(tài)評測等等。這就需要我們來測試一些交互性的參數(shù)。我參考了Macromedia的文檔和多方面的書籍,總結(jié)了一下需要評測的動態(tài)交互參數(shù):
- 網(wǎng)站最大的在線人數(shù)和application所容納的最大的Session數(shù)
- Session的長度,我們需要通過Web Trends的結(jié)果來進行編程控制,一個論壇和一個B2C網(wǎng)站的Session設定自然不同。
- 完成一個測試需要的時間,測試的時間越長,說明你的應用在某個環(huán)節(jié)占用大量的時間。
- 完成一個節(jié)點測試的最大測試數(shù),比如,能最多多少人同時進行數(shù)據(jù)庫查詢?
- 了解了用戶的寬待接入條件后,同一個節(jié)點對于不同用戶的響應時間是多少。56k的人完成數(shù)據(jù)查詢結(jié)果的顯示和寬帶肯定不一樣,這點論壇表現(xiàn)的最明顯。
- 網(wǎng)站那些動態(tài)操作讓哪些寬帶接入的用戶最不能忍受?這個是可以量化的哦。
知道了需要注意的問題和需要測試的參數(shù)后,是進行負荷測試的時候了。測試的時候,最好把應用的整個Package進行一下備份,然后到?jīng)]有公開的產(chǎn)品服務器或者測試服務器開始測試。測試的時候,我們最好找一個和產(chǎn)品服務器配置一致的服務器去測試,產(chǎn)品服務器的負荷測試,不是Beta的話,各位還是不要這樣做了。然后,我們就可以使用MS的Web Stress開始測試了。另外,站長誠實的警告,不要在最終發(fā)布的產(chǎn)品服務器上做壓力測試,如果讓客戶知道了,吃不了兜著走是有可能出現(xiàn)的。
如果在測試環(huán)節(jié),很快就出現(xiàn)了CPU占用率居高不下,內(nèi)存占用異常,經(jīng)常報錯的情況,推薦各位從以下問題著手:
- 看看應用的出錯環(huán)節(jié)是否有死循環(huán)等邏輯錯誤
- 檢查應用部署后所使用的數(shù)據(jù)連接驅(qū)動是否有誤或者未更新
- 查看數(shù)據(jù)庫查詢或者其他語句是否有異常
- 查看Macromedia站點的Release Notes的問題列表對應
- 中斷測試,運行響應時間最長的頁面并驗證結(jié)果。
- 檢查Application.cfm
站長會在后續(xù)教程中告訴大家如何監(jiān)測CF應用的性能,如何監(jiān)測Web Server的性能,驗證瓶頸以及調(diào)整優(yōu)化的方法,此乃后話。接著說本篇教程的東西。
構(gòu)造高可靠性的ColdFusion應用不是通過一個壓力測試就能解決問題的,壓力測試只能幫助你發(fā)現(xiàn)問題,但是解決問題,需要通過以下六個必須采納的解決方案。(注,這六個解決方案來自于BenForta的觀點)
- 運行一個負載均衡的Web Server(Load-Balanced Web-Server cluster ) ,保證服務器當機期間的可靠性。
- 選擇一個盡可能知名的網(wǎng)絡服務商。
- 安裝防火墻保證不被過多的非法用戶訪問和避免過多的不可識別的請求。
- 在數(shù)據(jù)庫上使用RAID5。
- 計算每一個程度上的商業(yè)邏輯和成本投入所帶來的運行風險。比如,你要開第二個亞馬遜,你現(xiàn)估計一下自己的錢包和商業(yè)模式,看看站點能不能正常運行。(哈哈,Benforta太逗了,連掂量自己有多少錢這個都算做可靠性的方案)
- 選擇一個有容錯機制的系統(tǒng)來減少應用站點的錯誤。
下面我們分別從這六個方面來一一研究一下其中的細節(jié)。
運行一個Web服務器的負載均衡的集群是最好的解決方法。通過這種方式,可以把對于服務器的最大流量的負擔分攤到每一臺集群里的服務器上去,這樣,就可以很容易的避免峰值太高,導致單服務器Crash。而且,很多錯誤在一臺上出現(xiàn),可以將事務轉(zhuǎn)移到另外一臺服務器上去,并且不對最終用戶呈現(xiàn)這些錯誤信息。做均衡負載的方式只有三種:純軟件、純硬件和軟硬件搭配。
ColdFusionMX的軟件均衡負載只有企業(yè)版支持這個功能,這個解決方案包叫做ClusterCATs。ClusterCATs的詳細操作我們會在以后詳細研究。這里只說明一下它的工作原理。類似于硬件,ClusterCATs用軟件做為檢測集群服務器運行的中心,每一臺在ColdFusion端設定的集群服務器的狀態(tài),都會在ClusterCATs上反映出來。同時ClusterCATs還會監(jiān)控每臺集群服務器的狀態(tài),發(fā)生的錯誤,是否當機等方面的參數(shù)。
硬件服務器是有錢的企業(yè)所采用的方式,國內(nèi)很少有個人站點采用硬件的負載均衡解決方案。這方面,我有幸見過有的有預算的客戶所采用的方法。他們使用Cisco的LocalDirecor和F5's BigIP系列來做均衡負載。 硬件解決方案因為很貴,所以效率也非常高,性能非常好。不過,監(jiān)測的附屬工作可能我們自己就無法完成了,需要專業(yè)的技術(shù)人員。
軟硬件搭配就是使用ClusterCATs和硬件的負載均衡器進行搭配工作,完成服務器的負載均衡操作。這種方式最奢侈,也是上述兩種方案的優(yōu)勢集中的體現(xiàn)。
網(wǎng)絡服務商的選擇對于企業(yè)的應用的性能也是一個重要的環(huán)節(jié)。我們都知道,使用tracert命令,可以看到到達一個站點,會經(jīng)過很多的Routers(路由),交換機以及網(wǎng)絡上的大型服務器節(jié)點。一個好的服務商可以讓你的站點在更快更高效更少經(jīng)由路徑的方式下被用戶所訪問到。舉個小例子,我們打開cmd的命令窗口,分別tracert www.7yue.com和www.sina.com.cn,就可以看到不同的結(jié)果了。 如果中間的節(jié)點有很多環(huán)節(jié),則會造成訪問路徑上的冗余,也有可能出現(xiàn)一個或多個節(jié)點無法跳轉(zhuǎn)的問題,造成網(wǎng)站無法訪問。
安裝防火墻已經(jīng)成為專業(yè)服務器的必備解決方案。這里我們不研究防火墻有那些類型和那些品牌,以及它的使用方法,這個跟我探討ColdFusionMX應用已經(jīng)相去甚遠。這篇文章,我們只探討安裝防火墻對于ColdFusionMX企業(yè)級站點的好處。Web服務器總是通過系統(tǒng)端口來傳遞信息,比如ColdFusionMX單獨模式下的8500和普遍的80端口,F(xiàn)lashCom的1911管理端口和1935RTMP協(xié)議傳輸使用端口等等,都是通過端口來傳遞信息。沒有防火墻的企業(yè)應用服務器總是被黑客攻擊的一個主要原因是有一些端口上的漏洞被掃到,從而成為進入系統(tǒng)的某種方式。安裝防火墻,設定允許通過消息的端口,是一個好的解決方案。它對于構(gòu)建強壯可靠的ColdFusionMX站點而言,具備了以下2個優(yōu)點:
- 降低網(wǎng)站接收外部請求信息時所面臨的未知風險。
- 保護數(shù)據(jù)庫和一些管理方式的應用。比如1433端口的SQL Server,3306端口的Mysql,1911端口的Flashcom管理 。
如果我們架設硬件Pix之類的品牌防火墻在預算上有問題,那么我們可以選用RedHat Linux中的ipchains包來完成一個低成本的軟件防火墻方案。
如果各位預算夠的話,服務器的硬盤一定要使用SCSI的RAID5配置的硬盤啊。速度快,數(shù)據(jù)傳輸穩(wěn)定,而且自身傳輸數(shù)據(jù)帶有CRC校驗。一個大規(guī)模的ColdFusionMX企業(yè)應用最好采用這種數(shù)據(jù)存儲方案。
預估可以執(zhí)行的成本以及所帶來的風險。美國的Macromedia培訓教材中總是反復強調(diào)這一點。我想這不是沒有理由的。你有10元錢,確想要買一件esprit的上衣,顯然,方案是不可行的。解決方法是,多增加一些錢來買相同的衣服,或者降低檔次,去大排檔買一件打折的大背心。這樣可以避免沒衣服穿的風險,:*)。但是服務器端的風險則是潛在的和爆發(fā)性的。如果你有足夠的預算,還是推薦你使用好一些的服務器,不要用桌面PC。比如,超線程的多CPU,SCSI RAID5 Disk,多個分布式的Database。這些都會很大程度上降低企業(yè)應用的當機或者崩潰的風險。我指的是企業(yè)應用,如果你是個人站點,找個不錯的服務商吧。
最后就是為你的企業(yè)應用選擇一個有容錯機制的系統(tǒng)。這里的系統(tǒng)不是操作系統(tǒng),電力供應可以稱之為系統(tǒng),靜電保護方案也稱之為保護系統(tǒng)。比如不見斷的7*24*365的全天候UPS電源供給系統(tǒng)就是應該為企業(yè)用戶所采用的方案之一。這方面有不熟悉的,多多查詢一些資料,在部署企業(yè)應用之前,未雨綢繆,會帶來很好的運行效果的。
一個真正的可靠的ColdFusionMX企業(yè)級應用(其他的J2ee級別也一樣)不能單純的依靠程序端的優(yōu)化來完成。硬件的保障,軟件的支持,中間件服務器的性能,應用部署的方式,應用開發(fā)人員的素質(zhì),維護的方案,數(shù)據(jù)的備份,多方面的支持才能構(gòu)造出一個完美的99.99%運行效率的ColdFusionMX應用。
下一篇文章,我們詳細探討如何監(jiān)控我們的應用性能,并給出詳細的操作方案。感謝大家花時間看我的文章,也感謝Macromedia美國的一些工程師在業(yè)余交流時間給予我的幫助。
出處:7yue.com
責任編輯:藍色
◎進入論壇網(wǎng)絡編程版塊參加討論
|