概述
識別并高速緩存動態(tài) Web 應(yīng)用:一款靈活的性能解決方案
在企業(yè)中部署動態(tài) web 應(yīng)用可帶來諸多顯著優(yōu)勢,但用戶可能會遇到一些難以預料的性能問題。導致性能下降的一個原因是:應(yīng)用使用率上升、內(nèi)容復雜性增加,這導致服務(wù)器出現(xiàn)過載。 F5 Networks 公司的 WebAccelerator 借助其動態(tài)高速緩存技術(shù)成功地解決了這一關(guān)鍵問題。動態(tài)高速緩存的獨特之處在于,它可為用戶提供高度動態(tài)的 web 支持型應(yīng)用,在web 基礎(chǔ)設(shè)施成本顯著降低的同時,速度提升了五至十倍。這種特性尤其適用于受到可擴充性限制以及需要支持更多用戶的應(yīng)用,并且,對于由傳統(tǒng)設(shè)計和其它問題而導致速度緩慢的 web 應(yīng)用,這種特性也彰顯其獨特之處。
挑戰(zhàn)
所面臨的挑戰(zhàn)主要包括:提高最終用戶應(yīng)用的性能、以及動態(tài) web 應(yīng)用與內(nèi)容的服務(wù)器卸載問題。通常,靜態(tài)高速緩存只能用于 30% 的 HTTP 請求——該百分比值通常不包括具有更大價值的動態(tài)數(shù)據(jù)(查詢響應(yīng)、XML 數(shù)據(jù)等)。
解決方案
|
動態(tài)高速緩存 動態(tài)高速緩存徹底改變了高速緩存模式,能夠?qū)Ω鼜V泛的內(nèi)容進行高速緩存,包括高度動態(tài) web 頁面、查詢響應(yīng)以及 XML 對象。該項專利技術(shù)為 F5 Networks 公司獨家擁有,僅可從 F5 Networks 公司獲得。 動態(tài)高速緩存注重應(yīng)用邏輯與行為,而不僅僅是個人 web 對象。通過了解某項應(yīng)用的高級邏輯(可高速緩存和不可高速緩存的內(nèi)容、可引發(fā)無效的事件等),WebAccelerator 可排除對復雜 web 請求的重復處理。動態(tài)高速緩存支持 WebAccelerator 系統(tǒng)決定何時使對象無效及如何識別可復用的內(nèi)容塊。這樣,通過將預定義的應(yīng)用加速策略、直觀的用戶界面、基于 XML 功能強大的 API (ESI) 及基于 HTTP 請求的觸發(fā)裝置相結(jié)合,便可提供使內(nèi)容生效或無效的全面控制。 現(xiàn)有的高速緩存解決方案如果不具備 WebAccelerator 和高速緩存,則只能將對象的有效期作為參考。動態(tài)高速緩存支持高速緩存查看 HTTP 請求中的任意內(nèi)容,包括 URL、cookies、查詢參數(shù),以及其它標頭等,這有助于生成更加“智能”的無效信息和高速緩存密鑰。此外,它還支持 WebAccelerator 系統(tǒng)決定何時使對象無效及如何識別單個內(nèi)容塊。 借助動態(tài)高速緩存,WebAccelerator 可直接響應(yīng)高達 80% 的用戶請求(此類請求計算成本頗高),且不涉及站點基礎(chǔ)設(shè)施的其它部分。此外,WebAccelerator 不受應(yīng)用語義的困擾,不會將高速緩存中的無效內(nèi)容發(fā)送出來。
靜態(tài)高速緩存 作為動態(tài)高速緩存能力的擴展,WebAccelerator 還可提供靜態(tài)高速緩存功能。靜態(tài)高速緩存僅緩存圖像、javascript,以及級聯(lián)樣式表等未到期的對象。即使靜態(tài)高速緩存可能已存在于應(yīng)用的計算基礎(chǔ)設(shè)施中,WebAccelerator 也支持靜態(tài)對象從原有應(yīng)用中刪除其它高開銷操作。 內(nèi)容識別 要想對應(yīng)用進行高速緩存,有必要對每個單項內(nèi)容進行準確識別。WebAccelerator 首次收到特定內(nèi)容項請求時,會以代理形式將該請求發(fā)送至源服務(wù)器,并為用戶取回該內(nèi)容。當 WebAccelerator 檢索頁面時,在發(fā)送響應(yīng)至客戶端之前,WebAccelerator 會把頁面副本轉(zhuǎn)換為一條經(jīng)過編譯的內(nèi)部請求。利用這些經(jīng)過編譯的響應(yīng),WebAccelerator 可重建一個頁面,作為對 HTTP 請求之響應(yīng)。 經(jīng)過編譯的響應(yīng)由頁面內(nèi)部請求(從源站點獲得)和指令(描述如何從內(nèi)部請求重建頁面)構(gòu)成,其中包括用于更新(以隨機或循環(huán)內(nèi)容更新)頁面的信息。 根據(jù)請求中的 URI、查詢參數(shù)等元素,WebAccelerator 還能為經(jīng)過編譯的響應(yīng)指定一個唯一內(nèi)容標識符 (UCI),UCI 可用于請求以及經(jīng)過編譯的響應(yīng),旨在為請求提供服務(wù)。如果收到的下一個請求包含相同元素且生成相同的 UCI,則 WebAccelerator 會找到已經(jīng)緩存的響應(yīng),并用之以響應(yīng)請求。 將這些元素作為標識符的一部分能夠使未來請求與高速緩存中的相應(yīng)內(nèi)容相匹配。不影響頁面內(nèi)容的 HTTP 請求元素將被忽略且不可在 UCI 中使用,因此,這些元素的設(shè)定值不可用于識別高速緩存內(nèi)容的特定實例。 但并非請求中的所有元素都代表一個特有的響應(yīng)。例如,兩個具有相同 URI、方法及查詢參數(shù)的請求,其 cookie 不同時,您的源服務(wù)器仍可能生成相同的響應(yīng)。在缺省狀態(tài)下,WebAccelerator 假定某些元素可導致內(nèi)容變化而其它元素不會。此外,該信息還可用于創(chuàng)建一個 UCI,可通過 WebAccelerator 的變更策略進行配置。 實例 讓我們看看幫助中心應(yīng)用,這類應(yīng)用管理一套持續(xù)進行變化的瑣碎的記錄。參考每項記錄可能需要多種方式,每條記錄代表一個將要被高速緩存的單獨對象。如要識別單獨的記錄,應(yīng)用需要以其數(shù)據(jù)庫生成的特定的 ID 為依據(jù)。不同的用戶可瀏覽相同的數(shù)據(jù)。可按如下方式請求: GET /helpdeskapp/viewticket.asp?ticketid=121& parentname=Login HTTP/1.1 Host: helpdesk.mycompany.com Cookie: userid=323; sessionid=3xx3s 這樣,通過以下密鑰,即可對 WebAccelerator 進行配置,以識別記錄并進行高速緩存。 [/helpdeskapp/viewticket.asp, ticketid=121]. 現(xiàn)在,將其與完全依賴于用戶身份生成內(nèi)容的其它應(yīng)用相比較,如電子郵件客戶端。當對收件箱進行高速緩存時,請求如以下聲明: GET /mymail/inbox.asp?page=1& parentname=Login HTTP/1.1 Host: mymail.mycompany.com Cookie: userid=323; sessionid=3xx3s 然后,利用以下密鑰對 WebAccelerator 進行配置以識別該對象: [/mymail/inbox.asp, page=1, userid=323]. 如果希望高效地高速緩存動態(tài)內(nèi)容,則有必要保持識別內(nèi)容時的靈活性。為了保持功能性,系統(tǒng)必須始終將不同的內(nèi)容塊作為單獨的對象,對其進行高速緩存,并且,真實對象和高速緩存密鑰之間必須存在一一對應(yīng)的關(guān)系。
保持應(yīng)用的真實性 由 web 應(yīng)用生成的內(nèi)容不斷發(fā)生變化。導致變化發(fā)生的事件廣義上分為三類:時間、用戶事件和應(yīng)用事件。在每種事件中,動態(tài)高速緩存(能夠用于描述何時發(fā)生變化以及哪種高速緩存對象受到了影響)內(nèi)的 WebAccelerator 都有其各自的機制?;谌缦聝身椧蛩?,WebAccelerator 可高速緩存無效信息: ☆ 有效時間,對于高速緩存靜態(tài)或接近靜態(tài)的內(nèi)容,該項非常實用。例如,生成每周財務(wù)報告的應(yīng)用。之前的報告無法確定高速緩存的有效時間,題為“當前”報告的高速緩存有效時間為一個星期。當“過期”時,WebAccelerator 使高速緩存的對象無效。 ☆ 用戶事件,用戶與應(yīng)用進行交互活動時發(fā)生該事件。WebAccelerator 監(jiān)控符合特定已知標準(可變更應(yīng)用的狀態(tài))的 HTTP 請求。WebAccelerator 查找到這種請求時,會執(zhí)行一條指令,使高速緩存的相關(guān)扇區(qū)失效。以留言板(Message boards)為例。單個線索的讀取頻率遠遠超過寫入頻率,因此在高速緩存當中,該應(yīng)用具有極高的價值。如果希望部署動態(tài)高速緩存,在用戶提交特定線索時,需對 WebAccelerator 進行配置以識別線索(請參見如下圖 1)。WebAccelerator 可高速緩存線程文本,初次使用時,需直接從應(yīng)用中調(diào)用,之后僅調(diào)用高速緩存即可。當用戶提交線索時,WebAccelerator 首先對其進行識別,之后使與該線索有關(guān)的被緩存對象無效。當下一個用戶請求線索時,WebAccelerator 從應(yīng)用中取回該線索,重新送至高速緩存。 ☆ 應(yīng)用事件,該事件來自用戶與應(yīng)用交互活動的外部。當應(yīng)用事件發(fā)生時,WebAccelerator 在接受來自應(yīng)用、基于標準的 XML 無效消息 (ESI) 后,對應(yīng)用事件進行處理。 以新消息的接收為例,該實例是一個面向電子郵件應(yīng)用的外部事件(請參見以下圖 2)。當沒有新電子郵件時,WebAccelerator 直接從高速緩存中響應(yīng)。當新消息到達時,通知從電子郵件應(yīng)用傳遞至 WebAccelerator,指示用戶哪一個收件箱發(fā)生了變化。然后,當用戶再次訪問收件箱時,WebAccelerator 將請求發(fā)送至電子郵件應(yīng)用,收件箱列表更新。 另一個實例是電子商務(wù)站點上的產(chǎn)品價格變更。電子商務(wù)站點上的價格頻繁變更,也許每天有百分之一的頁面發(fā)生改變。當價格發(fā)生變更時,WebAccelerator 能夠刪除以前高速緩存的頁面。而其它廠商的靜態(tài)高速緩存則無法做到這一點。
結(jié)論 通過采用以下兩種密鑰能力,WebAccelerator 解決了長期以來對動態(tài)內(nèi)容進行高速緩存的難題: ☆ 可將符合條件的用戶請求與高速緩存的內(nèi)容連接起來的一套完善的匹配算法 ☆ 可由應(yīng)用和用戶事件觸發(fā)的高速緩存無效信息的機制 動態(tài)高速緩存可將服務(wù)器負載和延遲降低 80%、提高用戶性能、降低基礎(chǔ)設(shè)施成本、為意外或計劃外站點故障提供標準性能,此外,無需更改站點架構(gòu)或代碼,即可精確地控制內(nèi)容的精度。此外,動態(tài)高速緩存還可與應(yīng)用無縫集成,支持各種軟件和站點類型,而不依賴于特定的基礎(chǔ)設(shè)施部件。
|