一、何謂ASP緩存/為什么要緩存
當你的web站點采用asp技術(shù)建立的初期,可能感覺到的是asp動態(tài)網(wǎng)頁技術(shù)帶來的便利性,以及隨意修改性、自如的http控制。但是,隨著訪問量的增加,你一定會發(fā)現(xiàn)自己的站點訪問速度越來越慢,IIS重新啟動得越來越頻繁。接下來,你一定想優(yōu)化asp,諸如更換性能更優(yōu)異的數(shù)據(jù)庫、建立索引、編寫存儲過程等等。這些措施有些不需要增加成本壓力,有些則成本壓力很大(譬如叢Access到SQL),而且效果還不一定。
面對web訪問壓力,我認為最經(jīng)濟的辦法是利用緩存優(yōu)化技術(shù)來實現(xiàn)緩解web的服務(wù)壓力。
Web訪問量增加通常意味著以下資源需求的快速增長:
1、 網(wǎng)卡流量增加,需要消耗更多的CPU處理網(wǎng)絡(luò)流量和網(wǎng)絡(luò)I/O線程。
2、 需要更頻繁的打開/關(guān)閉數(shù)據(jù)庫連結(jié)(如果使用數(shù)據(jù)庫技術(shù)—通常asp都會采用數(shù)據(jù)庫作為數(shù)據(jù)存儲),嚴重消耗資源的事物數(shù)量、以及事務(wù)相互競爭資源引起的死鎖、會增加網(wǎng)絡(luò)I/O或者CPU消耗。
3、 如果采用session的話,IIS為了維持狀態(tài),會消耗更多內(nèi)存,而內(nèi)存消耗可能會引發(fā)物理內(nèi)存不夠,引起物理內(nèi)存同輔存間的頻繁交換,從而引起代碼執(zhí)行的停頓,web響應(yīng)阻滯。
4、 由于訪問的不到及時響應(yīng),會引起網(wǎng)頁訪問故障,導(dǎo)致用戶刷新,從而加劇CPU、內(nèi)存等資源需求。
實際上,考慮通常的web應(yīng)用程序,很多時候的動態(tài)代碼執(zhí)行是不必要的。
二、asp緩存的分類
擅自總結(jié),asp的緩存可以分為兩類:
1、 文件緩存
所謂文件緩存,就是根據(jù)邏輯判斷,一段時間內(nèi)某個asp的特定執(zhí)行將不會有很大的變動,因而將內(nèi)容以靜態(tài)html的形式存放,然后以web的重定向技術(shù)讓客戶端訪問靜態(tài)文件,以達到減少CPU、數(shù)據(jù)庫資源等的需求。這樣的應(yīng)用很多,譬如很多論壇就是在回復(fù)貼子的時候?qū)⒄麄€貼子重新生成一個靜態(tài)文件,然后進行重定向的,例如 donews.com的論壇。該成靜態(tài)還有一個副作用(好處)--可以很容易被google等搜索引擎收錄。一些所謂新聞發(fā)布系統(tǒng)的都采用了此技術(shù)。
2、 文件片斷緩存
所謂文件緩存,也是基于邏輯判斷,某部分數(shù)據(jù)(通常是需要消耗資源的大容量數(shù)據(jù)庫查詢?nèi)〉茫┰谝欢〞r間內(nèi)不會改變,所以我們可以將這些數(shù)據(jù)利用文件的形式進行存儲,當需要時候,可以通過讀取文件來獲取數(shù)據(jù),避免增加數(shù)據(jù)庫的負擔(dān)。例如,我們通常將一些數(shù)據(jù)以XML格式存儲,然后利用xslt技術(shù)實現(xiàn)顯示(xml處理通常需要大量CPU資源,所以通常是IE直接讀取xml到客戶端在客戶的CPU上進行處理)。CSDN的論壇就是這樣處理的。
3、 主存緩存
除此之外,還可以考慮在內(nèi)存中處理緩存,將需要及時響應(yīng)的內(nèi)容存儲在內(nèi)存中,一旦訪問需求,立即從快速的貯存中輸送出去。如果極大量的訪問需求集中在幾個少量的頁面或者主存足夠多,我想采用主存緩存一定可以大幅度提高web訪問性能。
三、如何實現(xiàn)/使用緩存
實現(xiàn)緩存需要考慮以下問題:
1、 哪些頁面會在短時間內(nèi)不會改變?
分析自己的站點,這樣的頁面很多。譬如一個站點通常都有新聞資訊類的欄目,這些欄目通常都是站點維護人員在一天的某個時間發(fā)布資料,之后很少改動頁面。那么這些頁面就適合于采用靜態(tài)文件緩存。實際上,所謂新聞發(fā)布系統(tǒng)就是這么做的,那么那也可以參考這些系統(tǒng)的思想改造自己的原有動態(tài)asp頁面。
2、 那些頁面針對全部訪問者都采用同一個邏輯生成(也就是不區(qū)分訪問者)。
除了新聞資訊之類的欄目所有訪問者都看一個界面外,論壇等消耗資源的應(yīng)用一般也可以設(shè)計成統(tǒng)一邏輯生成(同一個貼子,張三李四看的都一樣),針對這類應(yīng)用頁面我們也可以采用靜態(tài)緩存來實現(xiàn)。也可以考慮將數(shù)據(jù)片斷化,利用腳本技術(shù)在服務(wù)器處理能力之外也就是客戶端瀏覽器進行處理。
3、 采用緩存的代價和收獲。
主要就是“空間換(響應(yīng))時間”。利用緩存技術(shù)將之后頻繁需要的內(nèi)容進行預(yù)處理,使之提高web服務(wù)器響應(yīng)能力,更重要贏得訪問者的歡心。
代價就是web空間需求增加,同時又可能影響到訪問效果。
但我認為適當?shù)木彺妫抢笥诒椎摹?BR> 4、 那些地方不適宜采用緩存
動態(tài)查詢頁面,每個人的查詢內(nèi)容不一樣,所以顯示結(jié)果不大一樣,所以不大可能將查詢結(jié)果生成緩存,所以采用緩存較為復(fù)雜且緩存利用率底下,造成管理成本上什(假設(shè)你緩存了1000個查詢關(guān)鍵字,那么管理這些關(guān)鍵字同緩存的對應(yīng)也是麻煩事)。
當你的web站點采用asp技術(shù)建立的初期,可能感覺到的是asp動態(tài)網(wǎng)頁技術(shù)帶來的便利性,以及隨意修改性、自如的http控制。但是,隨著訪問量的增加,你一定會發(fā)現(xiàn)自己的站點訪問速度越來越慢,IIS重新啟動得越來越頻繁。接下來,你一定想優(yōu)化asp,諸如更換性能更優(yōu)異的數(shù)據(jù)庫、建立索引、編寫存儲過程等等。這些措施有些不需要增加成本壓力,有些則成本壓力很大(譬如叢Access到SQL),而且效果還不一定。
面對web訪問壓力,我認為最經(jīng)濟的辦法是利用緩存優(yōu)化技術(shù)來實現(xiàn)緩解web的服務(wù)壓力。
Web訪問量增加通常意味著以下資源需求的快速增長:
1、 網(wǎng)卡流量增加,需要消耗更多的CPU處理網(wǎng)絡(luò)流量和網(wǎng)絡(luò)I/O線程。
2、 需要更頻繁的打開/關(guān)閉數(shù)據(jù)庫連結(jié)(如果使用數(shù)據(jù)庫技術(shù)—通常asp都會采用數(shù)據(jù)庫作為數(shù)據(jù)存儲),嚴重消耗資源的事物數(shù)量、以及事務(wù)相互競爭資源引起的死鎖、會增加網(wǎng)絡(luò)I/O或者CPU消耗。
3、 如果采用session的話,IIS為了維持狀態(tài),會消耗更多內(nèi)存,而內(nèi)存消耗可能會引發(fā)物理內(nèi)存不夠,引起物理內(nèi)存同輔存間的頻繁交換,從而引起代碼執(zhí)行的停頓,web響應(yīng)阻滯。
4、 由于訪問的不到及時響應(yīng),會引起網(wǎng)頁訪問故障,導(dǎo)致用戶刷新,從而加劇CPU、內(nèi)存等資源需求。
實際上,考慮通常的web應(yīng)用程序,很多時候的動態(tài)代碼執(zhí)行是不必要的。
二、asp緩存的分類
擅自總結(jié),asp的緩存可以分為兩類:
1、 文件緩存
所謂文件緩存,就是根據(jù)邏輯判斷,一段時間內(nèi)某個asp的特定執(zhí)行將不會有很大的變動,因而將內(nèi)容以靜態(tài)html的形式存放,然后以web的重定向技術(shù)讓客戶端訪問靜態(tài)文件,以達到減少CPU、數(shù)據(jù)庫資源等的需求。這樣的應(yīng)用很多,譬如很多論壇就是在回復(fù)貼子的時候?qū)⒄麄€貼子重新生成一個靜態(tài)文件,然后進行重定向的,例如 donews.com的論壇。該成靜態(tài)還有一個副作用(好處)--可以很容易被google等搜索引擎收錄。一些所謂新聞發(fā)布系統(tǒng)的都采用了此技術(shù)。
2、 文件片斷緩存
所謂文件緩存,也是基于邏輯判斷,某部分數(shù)據(jù)(通常是需要消耗資源的大容量數(shù)據(jù)庫查詢?nèi)〉茫┰谝欢〞r間內(nèi)不會改變,所以我們可以將這些數(shù)據(jù)利用文件的形式進行存儲,當需要時候,可以通過讀取文件來獲取數(shù)據(jù),避免增加數(shù)據(jù)庫的負擔(dān)。例如,我們通常將一些數(shù)據(jù)以XML格式存儲,然后利用xslt技術(shù)實現(xiàn)顯示(xml處理通常需要大量CPU資源,所以通常是IE直接讀取xml到客戶端在客戶的CPU上進行處理)。CSDN的論壇就是這樣處理的。
3、 主存緩存
除此之外,還可以考慮在內(nèi)存中處理緩存,將需要及時響應(yīng)的內(nèi)容存儲在內(nèi)存中,一旦訪問需求,立即從快速的貯存中輸送出去。如果極大量的訪問需求集中在幾個少量的頁面或者主存足夠多,我想采用主存緩存一定可以大幅度提高web訪問性能。
三、如何實現(xiàn)/使用緩存
實現(xiàn)緩存需要考慮以下問題:
1、 哪些頁面會在短時間內(nèi)不會改變?
分析自己的站點,這樣的頁面很多。譬如一個站點通常都有新聞資訊類的欄目,這些欄目通常都是站點維護人員在一天的某個時間發(fā)布資料,之后很少改動頁面。那么這些頁面就適合于采用靜態(tài)文件緩存。實際上,所謂新聞發(fā)布系統(tǒng)就是這么做的,那么那也可以參考這些系統(tǒng)的思想改造自己的原有動態(tài)asp頁面。
2、 那些頁面針對全部訪問者都采用同一個邏輯生成(也就是不區(qū)分訪問者)。
除了新聞資訊之類的欄目所有訪問者都看一個界面外,論壇等消耗資源的應(yīng)用一般也可以設(shè)計成統(tǒng)一邏輯生成(同一個貼子,張三李四看的都一樣),針對這類應(yīng)用頁面我們也可以采用靜態(tài)緩存來實現(xiàn)。也可以考慮將數(shù)據(jù)片斷化,利用腳本技術(shù)在服務(wù)器處理能力之外也就是客戶端瀏覽器進行處理。
3、 采用緩存的代價和收獲。
主要就是“空間換(響應(yīng))時間”。利用緩存技術(shù)將之后頻繁需要的內(nèi)容進行預(yù)處理,使之提高web服務(wù)器響應(yīng)能力,更重要贏得訪問者的歡心。
代價就是web空間需求增加,同時又可能影響到訪問效果。
但我認為適當?shù)木彺妫抢笥诒椎摹?BR> 4、 那些地方不適宜采用緩存
動態(tài)查詢頁面,每個人的查詢內(nèi)容不一樣,所以顯示結(jié)果不大一樣,所以不大可能將查詢結(jié)果生成緩存,所以采用緩存較為復(fù)雜且緩存利用率底下,造成管理成本上什(假設(shè)你緩存了1000個查詢關(guān)鍵字,那么管理這些關(guān)鍵字同緩存的對應(yīng)也是麻煩事)。

