Mr.J-- HTTP學習筆記(七)-- 緩存

Web 緩存是可以自動保存常見文檔副本的 HTTP 設備。使用緩存有下列優點:

• 緩存減少了冗餘的數據傳輸, 節省了你的網絡費用。
• 緩存緩解了網絡瓶頸的問題。 不需要更多的帶寬就能夠更快地加載頁面。
• 緩存降低了對原始服務器的要求。 服務器可以更快地響應, 避免過載的出現。
• 緩存降低了距離時延, 因爲從較遠的地方加載頁面會更慢一些。

我的專欄:  HTTP學習筆記

相關問題

冗餘的數據傳輸

冗餘的數據傳輸會耗盡昂貴的網絡帶寬, 降低傳輸速度, 加重 Web 服務器的負載。 有了緩存, 就可以保留第一條服務器響應的副本, 後繼請求就可以由緩存的副本來應對。

網絡的瓶頸問題

很多網絡爲本地網絡客戶端提供的帶寬比爲遠程服務器提供的帶寬要寬。 客戶端會以路徑上最慢的網速訪問服務器。如果客戶端從一個快速局域網的緩存中得到了一份副本, 那麼緩存就可以提高性能——尤其是要傳輸比較大的文件時。

帶寬造成的傳輸時延, 理想化情況(以秒爲時間單位)

瞬間擁塞

緩存在破壞瞬間擁塞(Flash Crowds) 時顯得非常重要。 突發事件(比如爆炸性新聞、 批量 E-mail 公告, 或者某個名人事件) 使很多人幾乎同時去訪問一個 Web 文檔時, 就會出現瞬間擁塞。

距離時延

每臺網絡路由器都會增加因特網流量的時延。 即使客戶端和服務器之間沒有太多的路由器, 光速自身也會造成顯著的時延。

命中和未命中

緩存命中、 未命中以及再驗證

可以用已有的副本爲某些到達緩存的請求提供服務。 這被稱爲緩存命中(cache hit)。

其他一些到達緩存的請求可能會由於沒有副本可用, 而被轉發給原始服務器。 這被稱爲緩存未命中(cache miss)。

原始服務器的內容可能會發生變化, 緩存要不時對其進行檢測, 看看它們保存的副本是否仍是服務器上最新的副本。 這些“新鮮度檢測” 被稱爲 HTTP 再驗證(revalidation)。

成功的再驗證比緩存未命中要快, 失敗的再驗證幾乎和未命中的速度一樣

只要緩存知道副本仍然有效, 就會再次將副本標識爲暫時新鮮的, 並將副本提供給客戶端,這被稱作再驗證命中(revalidate hit) 或緩慢命中(slow hit)

再驗證命中:如果服務器對象未被修改, 服務器會向客戶端發送一個小的 HTTP 304 Not Modified 響應。

再驗證未命中:如果服務器對象與已緩存副本不同, 服務器向客戶端發送一條普通的、 帶有完整內容的 HTTP 200 OK 響應。

對象被刪除:如果服務器對象已經被刪除了, 服務器就回送一個 404 Not Found 響應, 緩存也會將其副本刪除。

命中率

由緩存提供服務的請求所佔的比例被稱爲緩存命中率(cache hit rate, 或稱爲緩存命中比例), 有時也被稱爲文檔命中率(document hit rate)
緩存的管理者希望緩存命中率接近 100%。 而實際得到的命中率則與緩存的大小、緩存用戶興趣點的相似性、 緩存數據的變化或個性化頻率, 以及如何配置緩存有關。
有些人更願意使用字節命中率(byte hit rate) 作爲度量值,字節命中率表示的是緩存提供的字節在傳輸的所有字節中所佔的比例。 通過這種度量方式, 可以得知節省流量的程度。

緩存的拓撲結構

緩存可以是單個用戶專用的, 也可以是數千名用戶共享的。 專用緩存被稱爲私有緩存(private cache)。 私有緩存是個人的緩存, 包含了單個用戶最常用的頁面。 共享的緩存被稱爲公有緩存(public cache)。 公有緩存中包含了某個用戶團體的常用頁面。

私有緩存

私有緩存不需要很大的動力或存儲空間, 這樣就可以將其做得很小, 很便宜。 Web 瀏覽器中有內建的私有緩存——大多數瀏覽器都會將常用文檔緩存在你個人電腦的磁盤和內存中, 並且允許用戶去配置緩存的大小和各種設置。

公有緩存

公有緩存是特殊的共享代理服務器, 被稱爲緩存代理服務器(caching proxy server),或者更常見地被稱爲代理緩存(proxy cache)。 代理緩存會從本地緩存中提供文檔, 或者代表用戶與服務器進行聯繫。 公有緩存會接受來自多個用戶的訪問, 所以通過它可以更好地減少冗餘流量。

代理緩存的層次結構

在實際中, 實現層次化(hierarchy) 的緩存是很有意義的, 在這種結構中, 在較小緩存中未命中的請求會被導向較大的父緩存(parent cache), 由它來爲剩下的那些“提煉過的” 流量提供服務。

注意:

  1. 父緩存可能要更大一些, 以便裝載在多用戶間流行的文檔, 它們還要接收來自很多子緩存的聚合流量,這些子緩存的興趣點可能很分散,所以還需要更高的性能。
  2. 在實際中, 網絡結構會嘗試着將其深度限制在連續的兩到三個代理以內。 但是, 新一代的高性能代理服務器會使代理鏈的長度變得不那麼重要。

緩存的處理步驟

(1) 接收

緩存從網絡中讀取抵達的請求報文。高性能的緩存會同時從多條輸入連接上讀取數據, 在整條報文抵達之前開始對事務進行處理。

(2) 解析

緩存對報文進行解析, 提取出 URL 和各種首部。

(3) 查詢

緩存查看是否有本地副本可用, 如果沒有, 就獲取一份副本(並將其保存在本地)。

(4) 新鮮度檢測

緩存查看已緩存副本是否足夠新鮮, 如果不是, 就詢問服務器是否有任何更新。

(5) 創建響應

緩存會用新的首部和已緩存的主體來構建一條響應報文。

(6) 發送

緩存通過網絡將響應發回給客戶端。

(7) 日誌

緩存可選地創建一個日誌文件條目來描述這個事務。

HTTP 有一些簡單的機制可以在不要求服務器記住有哪些緩存擁有其文檔副本的情況下, 保持已緩存數據與服務器數據之間充分一致。 HTTP 將這些簡單的機制稱爲文檔過期(document expiration) 服務器再驗證(server revalidation)

緩存 GET 請求的流程圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章