緩存設(shè)計詳解:低成本的高性能Web應(yīng)用解決方案_第1頁
緩存設(shè)計詳解:低成本的高性能Web應(yīng)用解決方案_第2頁
緩存設(shè)計詳解:低成本的高性能Web應(yīng)用解決方案_第3頁
緩存設(shè)計詳解:低成本的高性能Web應(yīng)用解決方案_第4頁
緩存設(shè)計詳解:低成本的高性能Web應(yīng)用解決方案_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.:.;網(wǎng)站性能直接影響訪問速度,從而影響訪問量。實現(xiàn)高性能Web運(yùn)用的重要性是不言而喻的。性能瓶頸主要表達(dá)在高延時、擁塞和效力器負(fù)載,專業(yè)的處理方法往往本錢較高。做好緩存的設(shè)計那么可以在控制本錢的情況下充分的提高性能。過去幾年中,Web運(yùn)用程序曾經(jīng)從簡單的HTML頁面堆積演化成運(yùn)用各種各樣的技術(shù)構(gòu)建高可擴(kuò)展性和交互式的富運(yùn)用程序。設(shè)計和開發(fā)這類運(yùn)用程序變得越來越復(fù)雜,此外,決策者正越來越多地尋求構(gòu)建更豐富的互動功能到這些運(yùn)用程序中,同時還要保證可維護(hù)性和高性能,但高性能意味著高本錢。為了構(gòu)建提供應(yīng)最終用戶體驗的是一個結(jié)實的運(yùn)用程序,開發(fā)人員需求處理潛在的性能瓶頸。本文偏重于緩存它是交付高性能

2、Web運(yùn)用程序急需的也簡要引見一下緊縮功能。有一些公司在消費(fèi)和銷售專門的緊縮和性能產(chǎn)品。本文旨在簡單引見在尋求專業(yè)產(chǎn)品處理性能問題之前開發(fā)人員可以在客戶端和效力器端對Web運(yùn)用程序做的一些性能改良。性能瓶頸性能瓶頸主要表達(dá)在高延時、擁塞和效力器負(fù)載。緩存不能完全處理掉這三個問題,但經(jīng)過詳細(xì)的設(shè)計思索,緩存是可以提高性能的。在效力器端和客戶端都緩存內(nèi)容,據(jù)調(diào)查,平均而言,下載HTML只需求總的用戶呼應(yīng)時間的10-20%,剩下的80-90%全部用于下載頁面中的其它組成內(nèi)容,這些組成內(nèi)容通常包括圖像,如公司logo,緩存logo可以有效防止到效力器的多次往返。在前日51CTO上發(fā)布的 HYPERLI

3、NK developer.51cto/art/202106/132210.htm t _blank 加速,加速,再加速:Google的網(wǎng)站加速技巧大全中,Google提到的提升網(wǎng)站速度和性能的低本錢技巧中就包括緩存這一條。至于架構(gòu)設(shè)計方面,那么可參考51CTO的 HYPERLINK developer.51cto/developer/webarc/ 視頻專題:大型網(wǎng)站架構(gòu)專家談。簡單地講,緩存是暫時存儲。它將數(shù)據(jù)復(fù)制到不同的計算機(jī)或不同于原始數(shù)據(jù)源的位置,有了正確的配置,訪問緩存數(shù)據(jù)的速度比訪問原始數(shù)據(jù)的速度要快得多,運(yùn)用緩存數(shù)據(jù)可以減小效力器負(fù)載和帶寬耗費(fèi),從最終用戶的角度來看就是性能提高了

4、。圖1顯示了Internet如何任務(wù)的快速總攬,以及緩存在哪里發(fā)生作用。圖 1 Internet上的緩存:這個圖顯示了常見的懇求和檢索緩存信息的時機(jī)緩存正如他在圖1中所看到的,在效力器和客戶端上緩存數(shù)據(jù)既是能夠的也是有效的,圖2顯示了這三個緩存位置的不同視圖。圖 2 緩存配置:此圖顯示了三個典型的緩存位置1、客戶端閱讀器緩存:閱讀器緩存Web對象后,可以對反復(fù)的懇求直接呼應(yīng),不用再從Internet懇求數(shù)據(jù)了。2、效力器端轉(zhuǎn)發(fā)代理緩存:雖然能夠有些變化,但這些緩存位置通常是在最終用戶防火墻里面,可以對懇求直接呼應(yīng),不需求從原始來源懇求數(shù)據(jù)。3、效力器端反向代理緩存:也被稱為網(wǎng)關(guān)或代理緩存,這些

5、緩存效力器的操作代表了客戶的來源效力器,術(shù)語“內(nèi)容分發(fā)網(wǎng)絡(luò)CDN就是這些反向代理緩存的集合。他可以緩存任何能夠不止一次被懇求的對象,但總有一個危險就是緩存的對象很能夠變得陳舊,也就是說,沒有準(zhǔn)確地反響原始數(shù)據(jù)。不過可以運(yùn)用兩個參數(shù)來控制一切可緩存的對象:freshness和validation。freshness和validation都可以運(yùn)用HTTP懇求和相應(yīng)組合來進(jìn)展確定。Freshness確定某個對象能否可以從緩存中獲得,運(yùn)用expires和cache-control:max-age頭進(jìn)展控制。Validation確定某個對象能否曾經(jīng)陳舊,運(yùn)用last-modified和if-modif

6、ied-since頭進(jìn)展控制。設(shè)計高度緩存的Web運(yùn)用程序企業(yè)級Web運(yùn)用程序既有靜態(tài)部分又有動態(tài)部分,只需進(jìn)展了正確的設(shè)計和架構(gòu),都可以實現(xiàn)靜態(tài)部分從緩存中獲取,動態(tài)部分從原始效力器獲取,但第一步是確定要緩存什么,圖3提供了一個指南,可以協(xié)助 他確定哪些對象是可緩存,哪些對象是動態(tài)的不可緩存的。圖 3 確定緩存才干:此圖提供了某個對象能否應(yīng)該緩存的指南運(yùn)用程序架構(gòu)在可緩存對象和不可緩存對象之間有一點差別,開發(fā)人員應(yīng)該尋求最大限制的緩存命中率,同時要防止緩存動態(tài)對象。下面是一些最正確實際:1、運(yùn)用緩存控制cache-control:max-age和有效期Expires頭2、運(yùn)用最后修正時間la

7、st-modified頭3、檢查Web效力器能否支持If-Modified-Since4、調(diào)查為小型站點運(yùn)用轉(zhuǎn)向代理的可行性,或為大型企業(yè)網(wǎng)站從CDN廠家獲得專業(yè)人員的協(xié)助 5、根據(jù)網(wǎng)站的可擴(kuò)展性思索是運(yùn)用數(shù)據(jù)中心還是托管6、本人動手編碼經(jīng)常需求大量的時間和精神,根據(jù)站點的規(guī)模,可以思索采用開源緩存方法,如運(yùn)用Squid作為代理效力器7、為文件下載明確運(yùn)用混合緩存機(jī)制8、確保那些無用戶/輸入依賴的動態(tài)事務(wù)可以獲得緩存,為不同對象創(chuàng)建緩存映像可以協(xié)助 將可緩存對象和不可緩存對象隔分開來9、小心完全忽略緩存頭的內(nèi)容管理系統(tǒng)CMS為緩存運(yùn)用頭(Header)本節(jié)覆蓋了為緩存目的最有用的頭??刂凭彺嬖?/p>

8、HTTP 1.1規(guī)范中,效力器應(yīng)該為緩存控制頭發(fā)送一個無緩存呼應(yīng),以指出內(nèi)容不應(yīng)該被緩存,客戶端和效力器端都應(yīng)該遵守這個頭信息,以防止頭中曾經(jīng)聲明了的動態(tài)內(nèi)容,大多數(shù)開發(fā)言語都支持運(yùn)用這個頭信息控制呼應(yīng)頭值。另一方面,他可以為cache-control頭前往一個public效力器端應(yīng)對來允許緩存即使沒有cache-control頭也可以指出對象是可以緩存的,cache-control頭的值為private是一個特殊情況,表示閱讀器能夠會在本地緩存對象,但代理效力器不會緩存它。圖4中的懇求呼應(yīng)任務(wù)流顯示了Google如何經(jīng)過cache-control頭通知代理效力器不要緩存的。圖 4 停頓代理效

9、力器緩存:懇求-應(yīng)對流顯示效力器前往private阻止代理效力器緩存最后,效力器運(yùn)用expires應(yīng)對時包括了一個表示有效期的日期/時間戳,直到有效期滿之前閱讀器都可以緩存中的對象。如圖5所示。圖 5 過期內(nèi)容:Google的Gmail效力器前往一個expires頭,包括緩存頁面的過期日期和時間這一點他可以驗證,Gmail允許閱讀器緩存Gmail主頁,直到expires頭中明確指定的時間到了為止。運(yùn)用Last-Modified 頭閱讀器運(yùn)用這個頭信息來確定緩存對象生存期的有效性,閱讀器懇求這個對象時,效力器運(yùn)用一個包含該對象最后修正時間的時間戳的Last-Modified 頭進(jìn)展呼應(yīng),當(dāng)用戶下

10、次懇求一樣的對象時,假設(shè)當(dāng)前的時間戳超出了對象的運(yùn)用期限,或者用戶是經(jīng)過刷新方式懇求該頁面的,閱讀器會向效力器發(fā)送一個if_modified_since懇求確定對象能否發(fā)生了變化,假設(shè)對象確實發(fā)生了變化,閱讀器就發(fā)送一個完好的GET懇求以獲取新的對象并將其再次緩存起來,否那么,閱讀器就從它的緩存中提取對象,并更新對象的last-modified值。圖6顯示了一個任務(wù)實例。圖 6 最后修正時間:last-modified時間戳讓閱讀器確定是運(yùn)用本地緩存內(nèi)容還是重新懇求內(nèi)容舉一個例子,假設(shè)閱讀器在懇求 HYPERLINK yahoo/ yahoo時,效力器運(yùn)用last-modified時間戳進(jìn)展呼

11、應(yīng),和運(yùn)用if-modified-since頭進(jìn)展呼應(yīng)參考圖7時對比一下,看行為有何不同。圖 7 檢查修正:經(jīng)過發(fā)送if-modified-since頭,效力器將會運(yùn)用一個表示自時間戳指定時間以來能否發(fā)生了變化的值進(jìn)展呼應(yīng)在圖7中,閱讀器運(yùn)用if-modified-since頭發(fā)送一個懇求,效力器運(yùn)用304代碼進(jìn)展呼應(yīng),表示閱讀器可以運(yùn)用緩存,不用發(fā)起一個完好的GET懇求。為了全面了解這些頭信息的效果,最好的方法是他本人動手實驗一翻,運(yùn)用各種不同的頭信息組合,并察看它們的行為,分析頭信息的一個好工具是Wfetch。本人動手的方法正如前面給出的建議,本人動手DIY的方法并不總是捷徑,專門提供CD

12、N加速的產(chǎn)品和處理方案可以滿足不同類型的需求。但假設(shè)他要開發(fā)的是一個內(nèi)部運(yùn)用的產(chǎn)品,可以提供協(xié)助 的能夠只需Squid了,Squid被用作許多產(chǎn)品的一個組成部分,許多ISP也在運(yùn)用它。例如,在Java運(yùn)用程序中,Squid可以被用作Tomcat效力器的代理,Squid提供的不僅僅是HTTP緩存,但關(guān)于它的完好引見曾經(jīng)超出了本文的范圍,請讀者自行搜索相關(guān)文章,可以在 HYPERLINK /wiki/Cache_strategy Wikimedia看到另一個運(yùn)用Squid的例子。HTTP緊縮緩存僅僅是提高Web運(yùn)用程序性能的方法之一,緊縮是另一個關(guān)鍵方法,HTTP緊縮在內(nèi)容發(fā)送到客戶端之前將其緊縮,在客戶端和效力器端都有緊縮功能,當(dāng)效力器交付的是緊縮內(nèi)容時,由閱讀器進(jìn)展解壓,這樣可以節(jié)約珍貴的帶寬,減少本錢和提高呼應(yīng)時間。閱讀器運(yùn)用值為gzip的accept-encodingtypically頭聲稱它們支持緊縮,效力器運(yùn)用content-encoding頭指定應(yīng)對數(shù)據(jù)的編碼,例如,假設(shè)運(yùn)用的是gzip格式進(jìn)展緊縮,效力器應(yīng)該運(yùn)用值為gzip的content-encodin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論