鐘毅
摘要:為了能夠更好地滿足網(wǎng)站對(duì)于信息發(fā)布之后在實(shí)時(shí)性方面的要求,應(yīng)當(dāng)針對(duì)目前使用內(nèi)存來存放數(shù)據(jù)庫(kù)備份的方式,創(chuàng)建以內(nèi)存為基本緩存模型的首要保存點(diǎn),數(shù)據(jù)庫(kù)則成了數(shù)據(jù)備份的形式,如此不僅能夠滿足信息所具有的實(shí)時(shí)可用性,而且還能保障數(shù)據(jù)的安全可靠性。同時(shí),在大型Web網(wǎng)站的具體運(yùn)用中,還可運(yùn)用OSCache技術(shù)來緩存各類數(shù)據(jù)對(duì)象以及表現(xiàn)層,如此即可明顯地提升系統(tǒng)的響應(yīng)速度,改進(jìn)系統(tǒng)的各項(xiàng)運(yùn)轉(zhuǎn)性能,進(jìn)而實(shí)現(xiàn)系統(tǒng)總體性能的優(yōu)化。文章對(duì)Web網(wǎng)站緩存技術(shù)進(jìn)行了概述,并著重論述了Web網(wǎng)站緩存模型的OSCache技術(shù)的優(yōu)化措施。
關(guān)鍵詞:Web網(wǎng)站;緩存技術(shù);緩存模型;OSCache技術(shù)
如今,緩存技術(shù)已經(jīng)被大量運(yùn)用在多種類型的Web網(wǎng)站之中。按照網(wǎng)站訪問量的差別,每一網(wǎng)站均適合于自身的緩存方案。就緩存的實(shí)質(zhì)來看,是指把存于硬盤之中的數(shù)據(jù),通過KEY-VALUE的方式存到內(nèi)存之中,從而提高用戶獲得數(shù)據(jù)的速度。在當(dāng)前的信息化時(shí)代下,許多大型Web網(wǎng)站,在面對(duì)著巨額用戶的訪問以及高并發(fā)的請(qǐng)求,承擔(dān)了非常大的壓力。一旦在5-10 s內(nèi)沒有接收到其所需之網(wǎng)頁(yè),使用者可能就會(huì)對(duì)這個(gè)網(wǎng)站的感受度變差。在網(wǎng)站響應(yīng)過程之中,引擎編譯頁(yè)面和Web讀寫數(shù)據(jù)庫(kù)是系統(tǒng)中最為常見的兩個(gè)問題。當(dāng)前,常見的解決方式主要有運(yùn)用高性能服務(wù)器、數(shù)據(jù)庫(kù)以及編程語(yǔ)言,或是運(yùn)用高性能Web器具[1]。但是,單一或組合運(yùn)用上述方案還無法全面解決Web網(wǎng)站在高負(fù)載與高并發(fā)情境之下出現(xiàn)的性能問題,而且使用者人數(shù)的迅速增多,還會(huì)面臨不斷增加的軟硬件投資問題。
1 Web網(wǎng)站緩存技術(shù)概述
依據(jù)一項(xiàng)統(tǒng)計(jì),Web系統(tǒng)之中要進(jìn)行處理的數(shù)據(jù)中大概有20%-50%是短時(shí)間中難以出現(xiàn)變化的,然而編程過程中往往把其定義成動(dòng)態(tài)性內(nèi)容加以輸出,如此就會(huì)消費(fèi)數(shù)據(jù)庫(kù)以及Web服務(wù)器的各類資源。比如,電商網(wǎng)站之中對(duì)于商品所作的定義在短時(shí)間內(nèi)極有可能難以改變,但在一段時(shí)間以后還是有可能出現(xiàn)變化的,所以在使用戶查看商品列表過程中,Web程序均需與各類數(shù)據(jù)庫(kù)加以交互。再如,不同的用戶在同一時(shí)段訪問相同統(tǒng)計(jì)報(bào)表之時(shí),反復(fù)形成報(bào)表也會(huì)耗費(fèi)非常多的數(shù)據(jù)庫(kù)資源,從而對(duì)系統(tǒng)運(yùn)轉(zhuǎn)產(chǎn)生極大負(fù)擔(dān)。據(jù)此,可以在Web開發(fā)或者部署過程中引入緩存技術(shù),使用Cache緩存頁(yè)面加以輸出,如此即可明顯改進(jìn)Web系統(tǒng)的運(yùn)轉(zhuǎn)性能以及穩(wěn)定性。如今,常見的緩存技術(shù)包括了分布式Cache服務(wù)器緩存技術(shù)和OSCache緩存技術(shù)。前者主要是在當(dāng)?shù)卮鎯?chǔ)經(jīng)常需要訪問的信息。前端的路由可以把普通Web重定向至本地Cache服務(wù)器以切實(shí)降低服務(wù)器負(fù)荷。后者是運(yùn)用OSCache技術(shù)對(duì)Web頁(yè)面加以細(xì)化,并實(shí)施好緩存操作,以求在不大量提高系統(tǒng)投資的狀況下實(shí)現(xiàn)提升系統(tǒng)性能的目的[2]。
2 Web網(wǎng)站緩存模型的優(yōu)化措施
Web網(wǎng)站緩存模型的基本框架為:通過數(shù)據(jù)爬蟲來各類信息,并保存到數(shù)據(jù)庫(kù)之中。此時(shí),數(shù)據(jù)庫(kù)之中的數(shù)據(jù)則進(jìn)入到了待審核狀態(tài),被審核數(shù)據(jù)可以分成通過與不通過兩大類。通過數(shù)據(jù)保存于內(nèi)存循環(huán)數(shù)組當(dāng)中,而不通過數(shù)據(jù)則置為無效狀態(tài)。將保存于內(nèi)存之中的各類數(shù)據(jù)定時(shí)同步至數(shù)據(jù)當(dāng)中。在Web網(wǎng)站第一次啟動(dòng)之時(shí),就會(huì)從數(shù)據(jù)庫(kù)當(dāng)中把相應(yīng)數(shù)據(jù)同步至內(nèi)存之中。網(wǎng)站緩存應(yīng)用以內(nèi)存為首要保存點(diǎn),審核就是發(fā)布的方式,能夠推進(jìn)信息的曝光度。當(dāng)網(wǎng)站在內(nèi)存之中定義了長(zhǎng)度是5 000的循環(huán)數(shù)組之后,即可作為優(yōu)惠信息保存于數(shù)據(jù)結(jié)構(gòu)之中。5 000條數(shù)據(jù)一般都能保障3d中的數(shù)據(jù)均可被保存于數(shù)組之中,且在數(shù)組初始化過程中就為其初始化進(jìn)行賦值,其中均保存有數(shù)據(jù)結(jié)構(gòu)信息,如此即可節(jié)約新信息插入過程中的動(dòng)作,而且還能夠節(jié)省內(nèi)存分配所產(chǎn)生的部分時(shí)耗。Web網(wǎng)站的服務(wù)器端通常所使用的為ns服務(wù),而在.NET平臺(tái)則使用了垃圾回收體系,會(huì)造成分配與回收資源過程中對(duì)CPU與內(nèi)存之消耗。如此一來,在每一次插入新數(shù)據(jù)之后,實(shí)際上即是實(shí)施了更新性操作。這樣即可為循環(huán)數(shù)組的頭與尾分別確定了整形變量Headlndex和Taillndex,從而代表了目前數(shù)組之中首位與最后一位數(shù)據(jù)所處的位置。
在每一次有新的數(shù)據(jù)需要插入到數(shù)組之中,就會(huì)依據(jù)循環(huán)數(shù)組的頭指針與尾指針之大小來實(shí)施差異化操作:(1)在Taillndex大于Headlndex,而且Taillndex并不等于4 999之時(shí),此時(shí)代表數(shù)組Taillndex之后的數(shù)組數(shù)據(jù)都能進(jìn)行更新,只要把Taillndex加上l,并且把Taillndex指向之?dāng)?shù)據(jù)重新更新為可插入數(shù)據(jù)就可以了。(2)在Taillndex小于Headlndex,或是Taillndex等于4 999之時(shí),這時(shí)就表示數(shù)組之中的空數(shù)據(jù)己被全部用完,那就需要把最早插入的數(shù)據(jù)重新更新為如今所插入之?dāng)?shù)據(jù),也就是執(zhí)行Headlndex加上l。與此同時(shí),還應(yīng)當(dāng)把Headlndex指向的數(shù)據(jù)充分更新成所插入之?dāng)?shù)據(jù),而且同時(shí)還應(yīng)當(dāng)為Taillndex加上1。一旦Headlndex或是Taillndex超過了4 999,均應(yīng)置為0。(3)在重新部署Web網(wǎng)站的過程中,在對(duì)網(wǎng)站進(jìn)行部署的同時(shí),還應(yīng)當(dāng)把Web數(shù)據(jù)庫(kù)之中依據(jù)時(shí)間逆序排列的前5 000條數(shù)據(jù)重新插入循環(huán)數(shù)組當(dāng)中。一直到再次插入到新數(shù)據(jù)之后,再來操作步驟二。(4)實(shí)施Web分頁(yè)緩存控制。因?yàn)橛脩羲榭吹臄?shù)據(jù)均是依據(jù)頁(yè)面來得到數(shù)據(jù)的。一旦數(shù)據(jù)運(yùn)用循環(huán)數(shù)組之中的結(jié)構(gòu)保存于內(nèi)存之中,就應(yīng)當(dāng)對(duì)數(shù)據(jù)按照頁(yè)為基本單位進(jìn)行組織,從而便于用戶進(jìn)行訪問。Web網(wǎng)站運(yùn)用兩級(jí)Key-Value的形式加以組織[3].
3 Web網(wǎng)站OSCache技術(shù)的優(yōu)化措施
OSCache技術(shù)是基于J2EE架構(gòu)對(duì)Web應(yīng)用層而實(shí)施的緩存開源項(xiàng)目,如今已經(jīng)在諸多大型Web項(xiàng)目之中得到了更多地運(yùn)用。它不但能夠兼容各類JSP Web容器,而且還可利用內(nèi)存、硬盤或別的存儲(chǔ)資源為其緩存區(qū),且支持對(duì)一部分或者整體頁(yè)面加以緩存。在開發(fā)過程中還可依據(jù)差異化需求與環(huán)境而應(yīng)用差異化的緩存措施,以求在系統(tǒng)性與實(shí)時(shí)性上得到最好的平衡。依據(jù)緩存范圍的差異,OSCache主要支持兩類緩存形式,其一是緩存JSP頁(yè)面當(dāng)中的一些或整體內(nèi)容,其二是對(duì)數(shù)據(jù)對(duì)象加以緩存,能夠產(chǎn)生更大的緩存粒度。具體有3種實(shí)現(xiàn)方式:(1)對(duì)JSP Cache標(biāo)簽進(jìn)行緩存。使用OSCache之中的Cache標(biāo)簽,可對(duì)含于標(biāo)簽之中的段落內(nèi)容實(shí)施緩存化處理,處理形式主要取決于程序?qū)τ贑ache屬性的設(shè)置。Cache屬性為標(biāo)識(shí)緩存之關(guān)鍵詞。在相應(yīng)的范圍之中,一定是唯一存在著的。默認(rèn)Key通過被訪問頁(yè)面中的URL與請(qǐng)求字符串聯(lián)結(jié)而成。(2)運(yùn)用CacheFilter來體現(xiàn)對(duì)頁(yè)面的總體緩存。CacheFilter能夠用在頁(yè)面級(jí)緩存上,主要是對(duì)Web運(yùn)用中的部分動(dòng)態(tài)頁(yè)面實(shí)施緩存,特別是對(duì)需生成的格式表格或者報(bào)表頁(yè)面,主要的實(shí)現(xiàn)方式是在設(shè)置Web應(yīng)用過程中,通過配置CacheFilter的屬性以確定緩存的策略。(3)面向?qū)ο髮?shí)施緩存。Web程序可運(yùn)用繼承Administrator基類,對(duì)其中的持久化對(duì)象實(shí)施緩存。運(yùn)用以上方案之后,使用ApplicationStressTooI壓力測(cè)試工具,能夠并發(fā)出100個(gè)線程登錄以上頁(yè)面,平均的頁(yè)面響應(yīng)時(shí)間從沒有采取緩存技術(shù)時(shí)的87 ms降低至59 ms,而數(shù)據(jù)庫(kù)服務(wù)器的CPU占用率的峰值則從2g%下降至l7%[4]。
4結(jié)語(yǔ)
總的來說,Web網(wǎng)站的啟動(dòng)速度與使用者離開速度之間具備了最直接的聯(lián)系。在硬件資源無法得到快速提升的情況下,就一定要用最優(yōu)化的措施來得到最好的響應(yīng)成效。當(dāng)然,Web網(wǎng)站的優(yōu)化措施,一定要符合本網(wǎng)站的具體運(yùn)行狀況。在目前的J2EE/J2SE框架體系之中,OSCache能夠提供Web應(yīng)用層實(shí)現(xiàn)緩存需要的各項(xiàng)基本功能。運(yùn)用OSCache技術(shù),可更加靈活簡(jiǎn)便地處理好Cache對(duì)象,切實(shí)降低數(shù)據(jù)庫(kù)服務(wù)器和Web服務(wù)器在性能上的消耗,如此即可提升Web網(wǎng)站的總體響應(yīng)度以及負(fù)載水平。
[參考文獻(xiàn)]
[1]肖寧.Web緩存技術(shù)研究與應(yīng)用[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2012 (8):145.
[2]孫惠洋,李睿達(dá).PHP高性能網(wǎng)站緩存技術(shù)探討[J]通信管理與技術(shù),2015 (4):75
[3]孟彩霞.Web緩存容量的優(yōu)化技術(shù)研究[J]電子設(shè)計(jì)工程,2016 (8):98-101
[4]吳慶鑫,魏振鋼,張小龍.Web開發(fā)中分布式緩存技術(shù)的研究[J].中國(guó)科技信息,2017 (13):62-64