頁面輸出緩存是現(xiàn)在互聯(lián)網(wǎng)應用普遍采用的技術(shù)方案,因為頁面輸出緩存的性能與負載能力與靜態(tài) HTML 接近,但不需要像靜態(tài) HTM L文件一樣必須事先生成才能訪問,而是在第一次訪問頁面時生成。

頁面輸出緩存的原理

系統(tǒng)處理客戶端的請求時,先看看有沒有相應的頁面輸出緩存,如果有緩存且沒有過期,就直接讀取緩存并返回頁面 HTML 代碼給客戶端;如果沒有緩存,或緩存已經(jīng)過期,則執(zhí)行完整的頁面解析過程,返回頁面 HTML 代碼給客戶端,并將頁面 HTML 代碼保存到緩存中,這樣下次再處理同樣的請求時就直接從緩存讀取并返回給客戶端了。

這一原理和數(shù)據(jù)緩存非常類似。事實上,我們可以將頁面輸出緩存理解成一種特殊的數(shù)據(jù)緩存。

頁面輸出緩存和數(shù)據(jù)緩存的主要區(qū)別

數(shù)據(jù)格式差異
頁面輸出緩存,緩存的是整個解析后的頁面 HTML 代碼;而數(shù)據(jù)緩存,一般緩存的是頁面中要調(diào)用的各個對象(比如各種 參數(shù)配置、所有站點信息、所有節(jié)點信息、所有權(quán)限數(shù)據(jù)等)。
存儲位置差異
在我們系統(tǒng)中,頁面輸出緩存是以緩存文件方式保存在硬盤中的,類似于生成 HTML 功能的 HTML 文件;數(shù)據(jù)緩存一般是保存在內(nèi)存中的,或者使用分布式緩存系統(tǒng)來保存。
數(shù)據(jù)量差異
頁面輸出緩存的數(shù)量非常非常多,假如我們有50萬篇文章、10萬個節(jié)點列表及分頁,要為 PC/手機/PAD 三種設備緩存,則會有超過(50+10)X3=180萬個頁面輸出緩存文件;而數(shù)據(jù)緩存的數(shù)量一般在幾百個即可,相對于頁面輸出緩存來說,少得多。

功能特性

緩存策略

支持針對不同頁面配置不同的緩存策略和緩存失效策略。

攻擊防護

系統(tǒng)針對緩存穿透、緩存雪崩、緩存擊穿等情況都做了防范。

系統(tǒng)能夠防護各種潛在的緩存攻擊行為,如窮舉訪問不存在的頁面等。

手工清理緩存

支持手動清理站點首頁緩存、所有節(jié)點緩存、所有內(nèi)容緩存、全站頁面緩存以及未發(fā)布內(nèi)容的頁面緩存。

支持在站點管理、節(jié)點管理、內(nèi)容采編發(fā)中分別清理指定的站點、節(jié)點、內(nèi)容的頁面輸出緩存。

自動按需清理緩存

在執(zhí)行添加、修改、刪除、審核通過、取消審核、發(fā)布、取消發(fā)布、移動等操作時,系統(tǒng)會自動清理對應頁面的緩存文件,包括內(nèi)容頁、列表頁和站點首頁等。

當在節(jié)點A的模板中調(diào)用了跨上下級關(guān)系的節(jié)點 B 的內(nèi)容時,系統(tǒng)會自動識別并維護節(jié)點間的關(guān)聯(lián)關(guān)系。因此,在節(jié)點 B 進行添加、審核、發(fā)布等操作時,不僅會自動清理節(jié)點B的頁面緩存,還會同步清理節(jié)點 A 的頁面緩存,避免因遺漏清理導致節(jié)點 A 的列表頁面無法及時更新。

當模板文件發(fā)生改變時自動清理調(diào)用了此模板的相關(guān)頁面的頁面輸出緩存。

主動更新頁面輸出緩存

在清理緩存的時,系統(tǒng)會創(chuàng)建更新緩存的任務及其詳細信息。讓另外部署的緩存更新工具來訪問后臺服務器,從而及時將相應的頁面創(chuàng)建好頁面輸出緩存,這樣就與生成 HTML 的機制類似,從而極大提高整個系統(tǒng)的負載能力。此外,系統(tǒng)支持生成任務的優(yōu)先級控制,以便在不同應用場景中靈活處理 HTML 生成的優(yōu)先次序。系統(tǒng)還支持對任務及其詳細信息進行排重處理,以減少對服務器資源的無效消耗。

數(shù)據(jù)庫共享緩存

在多服務器負載均衡的部署環(huán)境中,各服務器可以通過數(shù)據(jù)庫共享緩存數(shù)據(jù)。一旦其中一臺服務器生成了緩存,其余服務器能夠直接從數(shù)據(jù)庫中獲取共享的緩存,并將其轉(zhuǎn)化為本地文件緩存,從而避免重新執(zhí)行完整的頁面解析過程。這種方法大大提高了整個系統(tǒng)的負載能力。

多服務器同步清理

在分布式部署環(huán)境中,支持通過消息隊列讓所有服務器同步清理頁面輸出緩存。

查看清理任務

支持在后臺查看更新緩存任務及任務進度。

頁面輸出緩存相比生成靜態(tài) HTML 的優(yōu)勢

相比生成 HTML 方式,頁面輸出緩存機制具有如下優(yōu)勢:
  • 無需事先生成

    無需事先生成緩存,這樣即使沒有事先生成緩存,訪問頁面時也不會出現(xiàn)404錯誤(頁面無法找到的提示);相比之下,生成靜態(tài) HTML 的主要缺點在于頁面必須提前生成,否則訪問時會報404錯誤。

  • 邏輯簡單

    在清理緩存后,頁面會立即顯示最新的效果,這使得按需清理緩存的邏輯相對簡單得多。而對于靜態(tài) HTML 頁面,則需要重新生成文件才能看到最新的效果,因此不能刪除原有文件后再重新生成 HTML 文件,只能替換原有文件,這導致按需生成 HTML 的邏輯變得非常復雜。

  • 無需等待

    各種操作后幾乎可以無需要等待就可以看到效果。因為清理緩存文件的速度極快,所以后臺各種操作后最多只需要幾秒就完成了清理緩存操作,所以我們可以馬上看到效果。而生成 HTML 操作則比較耗時(單機環(huán)境下每秒只能生成1~10個 HTML 頁面),在一些需要生成大量 HTML 的使用場景時,往往要等上幾分鐘甚至幾個小時才能看到最新的效果。

  • 不容易出現(xiàn)垃圾緩存文件

    在移動欄目、移動內(nèi)容或關(guān)閉生成 HTML 等操作時,系統(tǒng)會自動清理相應的緩存。此外,由于緩存文件都有一個有效期,即使偶爾存在垃圾緩存文件,過了有效期后也無法再訪問。如果確實發(fā)現(xiàn)垃圾緩存文件,只需清理一下全站緩存即可。而 HTML 生成機制則容易產(chǎn)生垃圾 HTML 文件,即使網(wǎng)站內(nèi)的其他頁面沒有鏈接指向這些文件,外部鏈接(如搜索引擎收錄的地址)仍可能指向這些垃圾 HTML 文件,導致它們?nèi)匀豢稍L問,從而引發(fā)意想不到的問題。某些情況下,這些問題可能嚴重到引發(fā)政治性錯誤。這也是許多客戶從其他系統(tǒng)轉(zhuǎn)向我們系統(tǒng)的重要原因之一。

  • 清理垃圾緩存文件非常容易

    選擇一個沒有用戶訪問的時間段來清理全站緩存是比較簡單的操作。然而,清理垃圾HTML文件卻非常棘手。因為正常的 HTML 文件和垃圾 HTML 文件混雜在一起,為了確保網(wǎng)站的正常訪問,無法直接刪除所有的 HTML 文件。因此,無法執(zhí)行“刪除站點 HTML 文件”這類操作。唯一可行的方案是重新生成整個站點的所有 HTML 頁面,然后手動篩選出某個時間點之前的 HTML 文件并進行刪除。

  • 管理員查看時自動更新緩存

    通過特殊的設計,管理員在查看前臺對應頁面時,能夠始終看到最新的內(nèi)容,并且此操作還會自動刷新緩存。然而,由于生成 HTML 的機制特性,這種實時更新的功能無法實現(xiàn)。

  • 原生支持多屏優(yōu)化

    通過為每種設備生成相應的頁面輸出緩存,實現(xiàn)了對不同設備的原生多屏優(yōu)化支持,同時不會影響系統(tǒng)的性能和負載能力。

  • 支持前臺訪問權(quán)限控制

    通過將權(quán)限檢查判斷與頁面解析/緩存讀取相分離的設計思路,系統(tǒng)能夠同時支持權(quán)限檢查和頁面輸出緩存功能,從而確保即使在需要進行權(quán)限檢查的情況下,網(wǎng)站的性能和負載能力也幾乎不會受到影響。而靜態(tài) HTML 文件由于其固有的特性,無法實現(xiàn)訪問權(quán)限控制。

  • 支持前臺 IP 訪問限定

    通過將 IP 訪問限定的檢查判斷與頁面解析/緩存讀取相分離的設計思路,系統(tǒng)能夠同時支持IP訪問限制檢查和頁面輸出緩存功能,從而確保在進行 IP 訪問限制檢查時,網(wǎng)站的性能和負載能力幾乎不受影響。而靜態(tài) HTML 文件由于其固有特性,無法實現(xiàn) IP 訪問限制功能。

×

用戶登錄