一般而言 Web系統(tǒng)的性能主要涵蓋四個方面指標:即響應(yīng)時間、并發(fā)用戶數(shù)、吞吐量、TPS。響應(yīng)時間指從客戶請求到請求結(jié)果數(shù)據(jù)完全展示的時間。由此可見響應(yīng)時間實際上是指客戶端呈現(xiàn)數(shù)據(jù)時間、網(wǎng)絡(luò)傳輸時間及系統(tǒng)響應(yīng)時間的和。并發(fā)用戶數(shù)指用戶會話同時處于活動狀態(tài)并向服務(wù)器發(fā)送類似的請求的用戶的數(shù)量。吞吐量指每個服務(wù)器實例單位時間可以處理的請求量,TPS指系統(tǒng)每秒能夠處理的事物的數(shù)量。并發(fā)用戶數(shù)、吞吐量、TPS三者概念有一定交叉,同時對系統(tǒng)設(shè)計而言,提高這三者的性能和降低響應(yīng)時間之間常常需要權(quán)衡。即根據(jù)實際業(yè)務(wù)的需要考慮在合理用戶響應(yīng)時間的基礎(chǔ)上盡量提高并發(fā)性能還是保證合理并發(fā)數(shù)的情況下盡量降低響應(yīng)時間。
隨著RIA的web應(yīng)用越來越廣泛,前臺的性能開始越來越重要。國內(nèi)與國外相比還有一些特殊情況,就是在國內(nèi)IE市場占有率要比國外要高,大多數(shù)舊版的 IE瀏覽器腳本性能要比谷歌或者搜狐的瀏覽器要差很多這一點在設(shè)計階段就要充分考慮這一點。在循環(huán)中要盡量減少字符串的拼接。同時可能的情況下DOM節(jié)點創(chuàng)建盡量使用innerHTML代替createElement。一般來說使用開源的業(yè)務(wù)框架要注意不要在頁面上加載用不到的代碼,以EXTJS為例,其window窗口關(guān)閉以后是不會主動釋放資源的,如果前臺業(yè)務(wù)復(fù)雜可以考慮使用窗口池。
ASP.NET提供了HttpRuntime.Cache對象來緩存數(shù)據(jù),也提供了OutputCache指令來緩存整個頁面輸出。在網(wǎng)站優(yōu)化階段可以使用 Fiddler之類的工具分析網(wǎng)站的頁面,找到內(nèi)容幾乎不變的頁面,給這些頁面添加OutputCache指令。像腳本庫之類資源文件是長期不變的,可以在IIS中啟用內(nèi)容過期,如果需要更新可以給資源文件添加帶版本號的不同文件名。由于現(xiàn)在絕大多數(shù)瀏覽器都支持HTTP壓縮,沒有特殊情況的話建議啟用。除此之外可以在Windows系統(tǒng)中關(guān)閉不必要的服務(wù),在IIS關(guān)閉不需要的HttpModule。
Apache2.X版支持插入多路處理模塊,即MPM,MPM分為Work MPM和Perfork MPM其中Work MPM使用多個子進程,每個子進程中又支持多個線程而Perfork MPM使用多個子進程,但是每個子進程名不包含多線程。一般來說Work MPM性能要好一些,相同并發(fā)下占有內(nèi)存也小,在JSP程序中Apache只應(yīng)用在各個應(yīng)用服務(wù)器之間的負載均衡可以考慮使用Work MPM。Perfork是UNIX平臺上默認的MPM,穩(wěn)定性要好一些建議在不支持線程安全的第三方模塊上使用,如PHP3/4/5。
Tomcat一般默認使用的堆內(nèi)存為128M,在較大的應(yīng)用中是不夠用的,需要在catalina.bat中調(diào)大。同時線程數(shù)一般情況下配置在200到300之間,這個數(shù)字可以根據(jù)壓力測試結(jié)果進行調(diào)節(jié),一般Windows系統(tǒng)支持的上限是2000,Linux系統(tǒng)支持的上限是1000。負載比較大的情況下可以考慮和 Apache Http配合使用Tomcat集群基本上可以達到接近Jboss或Weblogic的性能。單獨的Tomcat調(diào)優(yōu)還可以考慮為Tomcat加載APR同時在配置中啟用 NIO在大多數(shù)情況下可以提高 Tomcat并發(fā)處理能力和如果Web應(yīng)用中不需要記錄客戶端的IP可以考慮禁用Tomcat DNS查詢。
Jboss本身是免費的,同時性能在大多數(shù)情況下可以媲美商用中間件。JVM堆大小一般設(shè)置在峰值內(nèi)存占用的125%~140%。新生代和年老代之間的正確比例范圍在1/3 和1/2之間。如果應(yīng)用容許可以考慮GC使用G1收集器(JDK7以后的版本中),G1提供比CMS更好的性能。
盡量開啟NIO。JAVA堆內(nèi)存的設(shè)置可以參考JBOSS。在生產(chǎn)機的話可以考慮關(guān)閉JSP和Servle的動態(tài)編譯。
對于Web應(yīng)用而言大多數(shù)性能問題都出現(xiàn)在SQL語句的優(yōu)化上面。下面只是羅列出一些筆者的經(jīng)驗。
如果數(shù)據(jù)庫 Mysql的情況下注意數(shù)據(jù)庫引擎的選擇,MyISAM傾向于查詢,InnoDB傾向于插入和事物處理對于數(shù)據(jù)量特別大的表要拆表,分區(qū)或者分庫。
如果數(shù)據(jù)量大并且對數(shù)據(jù)的操作單一,可以選擇相應(yīng)的NoSQL數(shù)據(jù)庫,一般最少也能獲得一個數(shù)量級以上的提升。
對于多表關(guān)聯(lián)查詢的 SQL出現(xiàn)性能問題,首先是否數(shù)據(jù)量最大的表走了索引,其次考慮表結(jié)構(gòu)是否合理,如果表結(jié)構(gòu)無法變更,盡量使用連接操作代替in和exist語句。
如果不了解具體機制,慎用某些系統(tǒng)自帶函數(shù),如MYSQL中的ORDER BY RAND()。
如果需要在收尾重復(fù)字符比較多的列上建索引(例如網(wǎng)址),可以考慮在插入數(shù)據(jù)的時候就對數(shù)據(jù)進行Hash映射,單獨建立索引列(例如對網(wǎng)址取CRC32,在CRC值上建立索引),不要直接在這種列上建索引。
很多 Web應(yīng)用中需要進行對數(shù)據(jù)排序同時限制數(shù)據(jù)返回條數(shù),例如取某個表的最后500條數(shù)據(jù)。由于在絕大多數(shù)數(shù)據(jù)庫中會先限制返回條數(shù),再排序,一般得不到正確的結(jié)果。這種情況下需要套兩層 select,內(nèi)層排序,外層限制返回條數(shù)。但是這樣做會影響性能。以O(shè)racle為例,正確的做法是這樣的,使用三層Select,最內(nèi)層排序,并且只查詢rowid(注意保證排序列為主鍵或者唯一鍵索引,其他類型的索引會失效),中間的一層in語句通過rowid取需要的列,最外層限制條數(shù)。經(jīng)過如此處理的SQL一般開銷都能降到可接受的范圍內(nèi)。
根據(jù)網(wǎng)站存在的安全威脅因素,要做好WEB網(wǎng)站的安全優(yōu)化,首先從硬件上加以防范,作好物理環(huán)境、系統(tǒng)硬件的安全控制。另外運用下一代防火墻,審計系統(tǒng)等技術(shù)手段加以部署,以確保WEB網(wǎng)站安全性。
主要方法是在構(gòu)建物理機房時,按照標準做好物理機房的防火防水防盜工程,保障強弱電系統(tǒng)穩(wěn)定,在購買計算機及網(wǎng)絡(luò)硬件時,選擇知名品牌,做好設(shè)備冗余,加強設(shè)備的管理工作。
近年來,市場上出現(xiàn)了一種全新的防火墻,叫做“下一代防火墻”,該防火墻是面向應(yīng)用層設(shè)計,能夠精確識別用戶、應(yīng)用和內(nèi)容,具備完整安全防火能力,能夠全面替代傳統(tǒng)防火墻,并具有強進應(yīng)用層處理能力的全新網(wǎng)絡(luò)安全設(shè)備。解決了傳統(tǒng)安全設(shè)備在應(yīng)用管理、應(yīng)用可視化、應(yīng)用內(nèi)容防護等方面的不足,同時開啟所有功能后性能不會大幅下降。
網(wǎng)站系統(tǒng)內(nèi)眾多的網(wǎng)絡(luò)系統(tǒng)運維人員、第三方系統(tǒng)運維人員以及設(shè)備廠商維護人員卻缺乏有效的管理與監(jiān)控,眾所周知系統(tǒng)網(wǎng)絡(luò)運維人員他們享有系統(tǒng)的“最高權(quán)限”,一旦出現(xiàn)惡意操作或誤操作,將會對整個系統(tǒng)造成不可估量的嚴重后果。,針對該問題,目前流行使用一種設(shè)備進行監(jiān)管,名為“運維審計系統(tǒng)”。
該系統(tǒng)具體功能包括單點登錄、賬號管理、身份認證、資源授權(quán)、訪問控制和操作審計六個方面。通過該系統(tǒng)可以有效的避免一些越權(quán)操作,還可以追溯每一個操作過程,可以做到事前預(yù)防、事后追查。
一般來說對于 Web應(yīng)用而言,在應(yīng)用服務(wù)器端大多數(shù)性能問題主要考慮線程池和數(shù)據(jù)庫連接池配置,在數(shù)據(jù)庫端主要考慮SQL語句的優(yōu)化,在網(wǎng)站安全建設(shè)方面介紹了兩種目前比較流行的安全技術(shù)。當(dāng)然系統(tǒng)的安全和性能的優(yōu)化是一個復(fù)雜的問題,跟實際情況高度相關(guān),本文僅對實際應(yīng)用中常見的問題提出一個思路,具體情況還需要具體分析。