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