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

頁(yè)面輸出緩存的原理

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

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

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

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

功能特性

緩存策略

支持針對(duì)不同頁(yè)面配置不同的緩存策略和緩存失效策略。

攻擊防護(hù)

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

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

手工清理緩存

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

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

自動(dòng)按需清理緩存

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

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

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

主動(dòng)更新頁(yè)面輸出緩存

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

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

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

多服務(wù)器同步清理

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

查看清理任務(wù)

支持在后臺(tái)查看更新緩存任務(wù)及任務(wù)進(jìn)度。

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

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

    無(wú)需事先生成緩存,這樣即使沒(méi)有事先生成緩存,訪問(wèn)頁(yè)面時(shí)也不會(huì)出現(xiàn)404錯(cuò)誤(頁(yè)面無(wú)法找到的提示);相比之下,生成靜態(tài) HTML 的主要缺點(diǎn)在于頁(yè)面必須提前生成,否則訪問(wèn)時(shí)會(huì)報(bào)404錯(cuò)誤。

  • 邏輯簡(jiǎn)單

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

  • 無(wú)需等待

    各種操作后幾乎可以無(wú)需要等待就可以看到效果。因?yàn)榍謇砭彺嫖募乃俣葮O快,所以后臺(tái)各種操作后最多只需要幾秒就完成了清理緩存操作,所以我們可以馬上看到效果。而生成 HTML 操作則比較耗時(shí)(單機(jī)環(huán)境下每秒只能生成1~10個(gè) HTML 頁(yè)面),在一些需要生成大量 HTML 的使用場(chǎng)景時(shí),往往要等上幾分鐘甚至幾個(gè)小時(shí)才能看到最新的效果。

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

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

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

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

  • 管理員查看時(shí)自動(dòng)更新緩存

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

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

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

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

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

  • 支持前臺(tái) IP 訪問(wèn)限定

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

×

用戶登錄