頁面緩存是安裝在Web服務(wù)器之前的緩存服務(wù)器,用于卸載對服務(wù)器上的靜態(tài)和動態(tài)對象的請求。該系統(tǒng)或服務(wù)器器的常見名稱還有反向代理緩存、反向代理服務(wù)器和反向代理。經(jīng)過慎重考慮,我們采用了頁面緩存這個術(shù)語,因為代理程序還會負(fù)責(zé)負(fù)載平衡或SSL加速,而我們只想專注于緩存服務(wù)器對可擴(kuò)展性的影響。被實現(xiàn)的代理緩存如圖64所示。頁面緩存會處理部分或所有請求,直到它存儲的頁面或數(shù)據(jù)過期了,或服務(wù)器收到的請求了它沒有存儲的數(shù)據(jù)。請求失敗叫做緩存未命中,原因可能是緩存滿了,沒有空間為最新的請求存儲數(shù)據(jù),也可能是緩存未滿,但請求頻率較低或最近重啟過。緩存未命中會被傳遞給Web服務(wù)器,Web服務(wù)器用該請求回答并填充緩存,從而替換緩存中最近很少使用的記錄,或者在空白處寫入數(shù)據(jù)。
在這個原則中,有三個關(guān)鍵點。
第一點,應(yīng)該在Web服務(wù)器前實現(xiàn)頁面緩存(反向代理程序),這樣你就會得到很大的可擴(kuò)展性。生成動態(tài)內(nèi)容的Web服務(wù)器的工作量會大大減少,因為計算過的結(jié)果(或響應(yīng))在合適的時間被恰當(dāng)?shù)鼐彺媪恕L峁╈o態(tài)內(nèi)容的Web服務(wù)器不需要查詢那些內(nèi)容,可以少用一些緩存。我們同意,靜態(tài)內(nèi)容的頁面緩存的好處沒有動態(tài)內(nèi)容的頁面緩存那么大。
第二點,需要利用正確的HTTP頭,確保對內(nèi)容和查詢結(jié)果進(jìn)行最大化的緩存(當(dāng)然還要確保業(yè)務(wù)正確)。
第三點,盡可能加入RFC2616中的另一個HTTP頭,從而最大化內(nèi)容的可緩存性。這個新的頭是ETag,也就是實體標(biāo)簽(entity tag),目的是配合If-None-Match有條件地從服務(wù)器獲得請求。ETag是由服務(wù)器在瀏覽器第一次請求一個對象時賦予該對象的唯一標(biāo)識符。如果服務(wù)器端的資源改變了,那么服務(wù)器會為它分配一個新的Erag。假設(shè)能被瀏覽器(客戶端)正確地支持,對象和它的ETag標(biāo)簽就會被瀏覽器緩存,之后瀏覽器向Web服務(wù)器發(fā)送的工f-None-Match請求都會包含該標(biāo)簽。如果標(biāo)簽匹配,服務(wù)器會用狀態(tài)HTIP304 Not Modified進(jìn)行響應(yīng)。如果該標(biāo)簽與服務(wù)器上的不一致,服務(wù)器會發(fā)送更新過的對象以及與之相關(guān)的Etag-ETag是可選的,但如果要確保在任何特定的網(wǎng)站設(shè)計頁面或?qū)ο蟮恼麄€網(wǎng)絡(luò)傳輸中,頁面緩存和代理緩存具有更大的可緩存性,強(qiáng)烈推薦使用Brag。
本文地址:http://m.knowyourextract.com//article/3475.html