邢 蕾
(遼寧公安司法管理干部學院,沈陽 110000)
內(nèi)存緩存技術(shù)在門戶網(wǎng)站開發(fā)中的應用研究
邢 蕾
(遼寧公安司法管理干部學院,沈陽 110000)
內(nèi)存緩存技術(shù)是基于經(jīng)典的操作系統(tǒng)數(shù)據(jù)訪問理論而衍生出來的一種內(nèi)存數(shù)據(jù)存儲技術(shù),處理器直接訪問內(nèi)存中的數(shù)據(jù),減少了對磁盤訪問操作而引起的訪問等待時間,是今年來大型門戶網(wǎng)站以及高訪問量的Web應用中常見的數(shù)據(jù)存儲/訪問技術(shù),下文以內(nèi)存緩存技術(shù)在門戶網(wǎng)站開發(fā)中的應用為主要內(nèi)容,簡單介紹了相關(guān)技術(shù)原理以及當前流行的技術(shù)匡濟, 為有效的提升門戶網(wǎng)站響應速度、提升用戶體驗度的應用開發(fā)提供一定的技術(shù)參考。
內(nèi)存緩存;門戶;網(wǎng)站開發(fā);應用
在Web開發(fā)過程中,對于門戶網(wǎng)站的開發(fā)應用技術(shù)有別于其他類型的網(wǎng)站開發(fā)技術(shù),其最明顯的特點在于要充分考慮到“信息量、訪問量以及用戶體驗度”這幾個關(guān)鍵因素,而這都是以門戶網(wǎng)站的相應速度基礎的,為了提升門戶網(wǎng)站服務器端響應速度,誕生了諸多的訪問控制技術(shù),如增加硬件設備、采用高性能服務器設備等利用物理手段提升網(wǎng)頁訪問速度的方法,同時還包括諸如頁面靜態(tài)化處理、代碼的規(guī)范化處理、網(wǎng)站布局設計的規(guī)范化要求、內(nèi)存緩存技術(shù)應用等軟件層次提升訪問速度的手段,都較好的實現(xiàn)了門戶網(wǎng)站良好的響應度。下文將重點從軟件角度——內(nèi)存緩存技術(shù)在門戶網(wǎng)站開發(fā)中的應用為主要內(nèi)容,分析其技術(shù)原理以及在網(wǎng)站開發(fā)中常見的內(nèi)存緩存應用系統(tǒng)Memcached和Redis。
內(nèi)存緩存技術(shù)作為一種軟件方式提升門戶網(wǎng)站響應速度的手段,越來越被開發(fā)人員所重視,甚至于一些IT職位將內(nèi)存緩存技術(shù)的掌握程度作為Web開發(fā)人員必備技能來考察,可見其重要程度。內(nèi)存緩存技術(shù)的技術(shù)原理相對簡單,其脫胎于計算機操作系統(tǒng)原理中非常著名的“20%的數(shù)據(jù)在80%的時間被訪問”理論,通俗的講即,門戶網(wǎng)站中的某個數(shù)據(jù)一旦被訪問,那么將其存入到內(nèi)存中,當用戶再次進行該數(shù)據(jù)訪問時便能直接從內(nèi)存中獲取數(shù)據(jù),而不必通過訪問數(shù)據(jù)庫或者文件系統(tǒng)來實現(xiàn),這樣便能夠得到較快的訪問速度,進而提升用戶的體驗度。目前常見的內(nèi)存緩存技術(shù)有Memcached和Redis,相對于傳統(tǒng)的磁盤訪問,將數(shù)據(jù)保存在內(nèi)存中,能夠極大的提升數(shù)據(jù)訪問速度(據(jù)有關(guān)資料顯示,速度的提升大概在幾個數(shù)量級范圍內(nèi))。除此之外,內(nèi)存緩存技術(shù)作為一種軟件手段,相較于增加硬件,在性價比方面顯得更有優(yōu)勢,而這都很好的契合了門戶網(wǎng)站對于響應度、用戶體驗度的要求,因此,近年來大型的門戶網(wǎng)站開發(fā)應用時都將內(nèi)存緩存技術(shù)作為提升網(wǎng)站相應速度,保障用戶體驗度的重要舉措。
當然,在利用內(nèi)存緩存技術(shù)的時候應當考慮到三個方面的問題,即數(shù)據(jù)加載、數(shù)據(jù)同步以及數(shù)據(jù)存儲三個方面的問題。其中數(shù)據(jù)加載重點考慮何時、何種數(shù)據(jù)應當放置到內(nèi)存中進行存儲;而數(shù)據(jù)同步則是客戶端或者服務器對原有數(shù)據(jù)進行更改計算之后,如何保障與磁盤中數(shù)據(jù)一致性的問題;數(shù)據(jù)存儲重點在數(shù)據(jù)遷移以及應對數(shù)據(jù)節(jié)點故障(如斷電、內(nèi)存損壞等)如何進行數(shù)據(jù)處理。
綜上,內(nèi)存緩存技術(shù)是現(xiàn)今以及未來門戶網(wǎng)站開發(fā)重要的技術(shù)手段之一,提升其應用水平對于進一步提升門戶網(wǎng)站用戶體驗度有著至關(guān)重要的意義。
3.1 Memcached系統(tǒng)介紹
Memcached是Danga Interactive公司的產(chǎn)品,作為一種流行的內(nèi)存對象存儲系統(tǒng),能夠有效的減輕門戶網(wǎng)站負載壓力,提升網(wǎng)站訪問速度,被門戶網(wǎng)站大量應用。Memcached是基于C/S (客戶端/服務器模型)構(gòu)建起來的存儲系統(tǒng),通過存儲Key/Value(鍵/值形式)的哈希表來實現(xiàn)內(nèi)存數(shù)據(jù)存儲的。通常認為Memcached具有以下幾個方面的特征,其是基于libevent(高性能網(wǎng)絡庫)事件處理模型的,同時內(nèi)置了內(nèi)存存儲方式(所有數(shù)據(jù)都保存在內(nèi)存中,一旦服務器重啟或者是Memcached系統(tǒng)重啟,其保存在內(nèi)存中的數(shù)據(jù)全部丟失,當然在Memcached系統(tǒng)中保存的數(shù)據(jù)達到了指定的量級的時候,系統(tǒng)將按照Least Recently Used算法進行數(shù)據(jù)清除操作),并且其所使用的交互協(xié)議相對比較簡單,使用的是最為簡便的文本行協(xié)議,即便是通過telnet也能夠極其方便的在Memcached系統(tǒng)上獲取、保存數(shù)據(jù)。需要說明的是,Memcached雖然是分布式的內(nèi)存數(shù)據(jù)緩存系統(tǒng),但是在其服務器端并沒有實現(xiàn)其分布式的功能,要實現(xiàn)分布式需要在客戶端進行實現(xiàn)。除此之外,Memcached系統(tǒng)由于缺乏安全操作機制,通常客戶端并不直接訪問其系統(tǒng),而是通過網(wǎng)站對外暴露的接口實現(xiàn)安全訪問的。
Memcached對于PV量較小、數(shù)據(jù)變化頻繁、入庫要求較高的網(wǎng)站是不適合的,其適合的場所在于查詢數(shù)量較多、對于實時寫入數(shù)據(jù)庫要求較低的門戶網(wǎng)站。因此,諸如金融部門網(wǎng)站、小訪問量的網(wǎng)站,Memcached技術(shù)都是不適用的。
3.2 Redis技術(shù)介紹
Redis同樣是一種內(nèi)存數(shù)據(jù)緩存系統(tǒng),其開發(fā)工作主要由虛擬機巨頭VMware公司主導的,提供了多種語言接口。與Memcached系統(tǒng)類似,Redis也提供了Key/Value(鍵值對)的數(shù)據(jù)保存形式,并且還支持了list(鏈表)、set(集合)、String(字符串)等數(shù)據(jù)存儲類型,數(shù)據(jù)存儲功能的更加豐富使得其在進行數(shù)據(jù)應用時更加得心應手,這也是與Memcached形成有力競爭的重要因素。在數(shù)據(jù)同步處理方面,Redis 與Memcached有較大的區(qū)別,Redis周期性的將內(nèi)存中的數(shù)據(jù)文件寫入到磁盤文件系統(tǒng)中來實現(xiàn)主從同步,即便是斷電丟失、內(nèi)存損壞,數(shù)據(jù)依然能夠得到有效的恢復,這是Memcached系統(tǒng)所欠缺的,周期性的數(shù)據(jù)存儲形式主要有兩種模式,增量存儲以及全量數(shù)據(jù),增量存儲主要是對內(nèi)存中數(shù)據(jù)進行序列化操作以后文,寫入到磁盤文件中件的寫操作,而全量數(shù)據(jù)則是直接將內(nèi)存數(shù)據(jù)進行寫操作。
將Memcached與Redis進行比較會發(fā)現(xiàn),Redis所支持的數(shù)據(jù)存儲類型更加豐富,同時實現(xiàn)了數(shù)據(jù)主從備份,并且較好的至此了持久化的處理,對于系統(tǒng)硬件故障在進行數(shù)據(jù)恢復時能夠?qū)崿F(xiàn)重新加載功能。因此,Redis的應用前景較之于Memcached系統(tǒng)更加廣泛。除了上述方面的內(nèi)容,Redis系統(tǒng)還提供了聚合計算、scripting等功能,這也是諸多開發(fā)者都將Redis視為Memcached的替代品來使用的原因。
3.3 Memcached與Redis的不足之處
Memcached是建立多線程技術(shù)之上,通過阻塞輸入/輸出這樣的網(wǎng)絡模型之上的,在進行事件處理的時候,Memcached系統(tǒng)采用了鎖機制以及Cache Coherency來保障數(shù)據(jù)的一致性,這樣全局變量的加鎖、釋放鎖機制必然帶來性能的損耗;而基于單線程的Redis系統(tǒng)而言,在處理器進行數(shù)據(jù)運算的時候,由于其單線程模型,整個IO都處于阻塞狀態(tài),這對于系統(tǒng)整個吞吐量也是有很大的影響的。
綜上所述,Memcached是純粹的內(nèi)存緩存,數(shù)據(jù)以鍵值對的形式一直都存儲在內(nèi)存中,以此來提升系統(tǒng)響應速度,而Redis則不僅僅提供了鍵值對的數(shù)據(jù)類型,還提供了諸如List等更為豐富的數(shù)據(jù)類型表示,并且通過數(shù)據(jù)持久化操作能夠?qū)崿F(xiàn)數(shù)據(jù)斷電或者丟失以后的恢復工作,而Memcached則不具備,但是這都要損耗一定的系統(tǒng)性能,開發(fā)人員在具體應用選擇的時候應根據(jù)系統(tǒng)需求以及實際情況進行合理的取舍。除去Memcached與Redis這兩個內(nèi)存緩存技術(shù)當前非常流行的技術(shù)框架之外,在軟件行業(yè)中還存在著諸多內(nèi)存緩存技術(shù),但其流行程度相對較弱,本文就不一一進行介紹了。相信隨著技術(shù)發(fā)展以及數(shù)據(jù)模型的不斷完善,內(nèi)存緩存技術(shù)必定在提升網(wǎng)站響應方面發(fā)揮更加強大的功能。
為了提升門戶網(wǎng)站響應速度,實現(xiàn)網(wǎng)站高可用性,內(nèi)存緩存技術(shù)作為一種軟件手段應運而生。本文以門戶網(wǎng)站作為切入點,分析了其開發(fā)關(guān)鍵點,并以此引入了內(nèi)存緩存技術(shù),進而介紹了當前非常流行的內(nèi)存緩存技術(shù)系統(tǒng)Memcached和Redis系統(tǒng),希望借此能為門戶網(wǎng)站開發(fā)在內(nèi)存緩存技術(shù)方面的應用提供一定的參考。
[1]靳瑩.基于緩存技術(shù)的內(nèi)容管理系統(tǒng)研究[D].吉林大學,2014.
[2]黃菊.分布式緩存技術(shù)及其在車輛監(jiān)控系統(tǒng)中的應用[D].北京郵電大學,2015.
[3]崔解賓.分布式內(nèi)存緩存技術(shù)在數(shù)據(jù)處理平臺中的研究與應用[D].北京郵電大學,2015.
[4]李光瑞.Map/Reduce型海量數(shù)據(jù)處理平臺中的內(nèi)存級數(shù)據(jù)緩存技術(shù)研究[D].北京工業(yè)大學,2013.
[5]易會戰(zhàn),王鋒,左克,楊燦群,杜云飛,馬亞青.基于內(nèi)存緩存的異步檢查點容錯技術(shù)[J].計算機研究與發(fā)展,2014(06):1229-1239.
10.16640/j.cnki.37-1222/t.2016.20.133