快取 網路中的快取。

2021-09-29 11:38:06 字數 2380 閱讀 6043

網路中的快取位於客戶端和服務端之間,**或響應客戶端的網路請求,從而對重複的請求返回快取中的資料資源。同時,接受服務端的請求,更新快取中的內容。

web**幾乎是伴隨著網際網路誕生的,常用的web**分為正向**、反向**和透明**。web**是將web**作為快取的一種技術。

一般情況下,web**預設說的是正向**,如下圖所示。

為了從源伺服器取得內容,使用者向**伺服器傳送乙個請求並指定目標伺服器,然後**服務向源伺服器轉交請求並將獲得的內容返回給客戶端。一般的,客戶端要進行一些特別的設定才能使用正向**。

反向**與正向**相反,對於客戶端而言**伺服器就像是源伺服器,並且客戶端不需要進行設定。客戶端向反向**傳送普通請求,接著反向**將判斷向何處**請求,並將從源伺服器獲得的內容返回給客戶端。

透明**的意思是客戶端根本不需要知道有**伺服器的存在,由**伺服器改變客戶端請求的報文字段,並會傳送真實的ip位址。加密的透明**屬於匿名**,不用設定就可以使用**了。透明**的例子就是時下很多公司使用的行為管理軟體。

這裡的web**快取是指使用正向**的快取技術。web**快取的作用跟瀏覽器的內建快取類似,只是介於瀏覽器和網際網路之間。

當通過**伺服器進行網路訪問時,瀏覽器不是直接到web伺服器去取回網頁而是向web**發出請求,由**伺服器來取回瀏覽器所需要的資訊並傳送給瀏覽器。而且,web大力快取有很大的儲存空間,不斷將新獲取的資料儲存到本地的儲存器上,如果瀏覽器所請求的資料在web**的快取上已經存在而且是最新的,那麼就不重新從web伺服器取資料,而是直接將快取的資料傳送給使用者的瀏覽器,這樣就能顯著的提高瀏覽速度和效率。對於企業而言,使用web**既可以節省成本,又能提高效能。

對於web**快取而言,較流行的是squid,他支援建立複雜的快取層級結構,擁有詳細的日誌、高效能快取以及使用者認證支援。squid同時支援各種外掛程式,例如,squid guard就是乙個提供url過濾的外掛程式,對於遮蔽某些站點和內容十分有用。如果需要分析squid的各種指標,webalizer應該是個不錯的選擇。

如果有興趣的話,可以進一步了解一下squid的內部機制,如下圖所示。

使用web反向**伺服器和使用正向**伺服器一樣,可以擁有快取的作用,反向**快取可以快取原始資源伺服器的資源,而不是每次都要向原始資源伺服器請求資料,特別是一些靜態的資料,比如和檔案,很多web伺服器就具備反向**的功能,比如大名鼎鼎的nginx。

如果這些反向**伺服器能夠做到和使用者來自同乙個網路,那麼使用者訪問反向**伺服器,就會得到很高質量的響應速度,所以可以將這樣的反向**快取稱為邊緣快取。邊緣快取在網路上位於靠近使用者的一側,可以處理來自不同使用者的請求,主要用於向使用者提供靜態的內容,以減少應用伺服器的介入。邊緣快取的乙個有名的開源工具就是varnish,在預設情況下進行保守快取。也就是說,varnish只快取他所知的安全內容。varnish的乙個特性是使用虛擬記憶體,精妙之處在於利用了作業系統的管理機制。varnish可以高度定製如何處理請求,快取哪些內容。

如果感興趣,可以進一步了解varnish後端的內部機制,如下圖所示。

邊緣快取中典型的商業化服務就是cdn了,例如aws的cloud front,我國的chinacache等,現在一般的公有雲服務商都提供了cdn服務。cdn是content delivery network的簡稱,即「內容分發網路」的意思。使用cdn之後,客戶端與伺服器通訊如下圖所示。

cdn邊緣節點的快取策略因服務商不同而有所變化,但一般都會遵循http標準協議,通過http響應頭中的cache-control:max-age的字段來設定cdn邊緣節點的資料快取時間。當客戶端向cdn節點請求資料時,cdn節點會判斷快取資料是否過期,若快取資料並沒有過期,則直接將快取資料返回給客戶端;否則,cdn節點就會向源站發出回源請求,從源站拉取最新資料,更新本地快取,並將最新資料返回給客戶端。

***服務商一般會提供基於檔案字尾、目錄等多個維度來指定在cdn上的快取時間,為使用者提供更精細化的快取管理。cdn上的快取時間會對「回源率」產生直接的影響。若資料在cdn上的快取時間較短,則cdn邊緣節點上的資料會經常失效,導致頻繁回源,增加了源站的負載,同時也增大了訪問延時;若資料在cdn上的快取時間太長,會帶來資料更新時間慢的問題。開發者需要針對各自特定的業務,來做特定的資料快取時間管理。

一般的,cdn邊緣節點對開發者來說是透明的,開發者可以通過cdn服務商提供的「重新整理快取」介面來清理位於cdn邊緣節點上的快取資料。這樣開發者在更新資料後,可以使用「重新整理快取」功能來強制要求cdn邊緣節點上的資料快取過期,保證客戶端在訪問時,拉取到最新的資料。

網路快取的邏輯

網路快取很多方式都可以實現,有時候,可以將快取寫在本地檔案中,以md5 url 為檔名,以json為檔案內容儲存,如果快取寫在檔案中,先找檔案md5 url 存不存在,如果存在,說明有快取.今天不用這一種 因為我們快取的資料並不大 新建乙個工具類cacheutils 原則 以url 引數為key,以...

django 重新整理快取 Django 中的快取問題

django 中的快取問題 簡單介紹 在動態 中,使用者所有的請求,伺服器都會去資料庫中進行相應的增,刪,查,改,渲染模板,執行業務邏輯,最後生成使用者看到的頁面.當乙個 的使用者訪問量很大的時候,每一次的的後台操作,都會消耗很多的服務端資源,所以必須使用快取來減輕後端伺服器的壓力.快取是將一些常用...

Redis中快取穿透 快取擊穿和快取雪崩

1 資料的查詢過程 程式在處理使用者請求時候,一般先查詢快取中是否存在使用者的查詢資料,如果快取中不存在再去查詢資料庫,如果在資料庫中查詢到了資料,在把資料返回給使用者同時把資料放入快取中 如果在資料庫中也沒有查詢到資料,則返回空值並且沒有資料放入到快取中。當使用者的大量的資料請求都不在快取中時,會...