閻麗欣

摘要:本文對Memcached在Web緩存中的應用進行研究。首先,介紹了緩存技術及緩存替換策略;然后,在此基礎上說明Memcached分布式緩存及其特點和工作原理;最后,闡述了基于Memcached的緩存系統。
[關鍵詞]MemcachedWeb緩存分布式緩存系統
當前互聯網絡的主要訪問方式是Web應用方式,隨著網絡資源用戶訪問量的增加,Web服務器的響應速度會變得越來越慢,因此難以滿足大量用戶的需求。緩存技術可以解決大量用戶并發訪問Web服務時存在的問題,設計優良的緩存機制能夠有效降低數據的重復傳輸,提高用戶體驗。
1緩存技術
一般認為應用程序的訪問具備局部性的特點:時間局部性指的是當前被訪問的內存單元的數據在短期內還有可能被再次訪問,空間局部性指的是被訪問的內存單元周圍的數據也極有可能被訪問。基于這樣的考慮,為了加快程序的范圍速度,可以增加一個緩存進行數據的預讀,存儲可能會被頻繁請求的數據。
在用戶訪問Web站點時,從輸入網址并回車到查詢的頁面展現出來經歷了如下過程:輸入網址后的地址解析。為了方便記憶,網址一般是點分字母形式,在用戶回車后瀏覽器會進行地址解析,即把域名網址轉換為IP地址。這一過程會用到瀏覽器緩存、系統緩存、路由器緩存以及DNS緩存。瀏覽器緩存指的是瀏覽器的緩存目錄,如果其中有域名對應的映射關系則會直接調用;系統緩存指的是本機操作系統的緩存;如果瀏覽器及本機系統緩存中都沒有域名的映射關系,則從網絡層查找路由器中的域名系統緩存;如果此時域名解析還是失敗,則需要從域名服務器DNS中解析。
緩存的容量不是無限的,在容量不夠的時候需要剔除部分舊的緩存對象,以存儲新的緩存對象。緩存替換策略指的是剔除舊緩存對象時的規則,常用的緩存替換策略有先進先出法(FIFO)、最近最少使用法(LRU)以及最少使用頻繁法(LFU)。
2Memcached及分布式緩存
作為一個高效的分布式緩存系統,Memcached會在內存中維護一°個大容量Hash表,以便緩存圖片、文件、視頻等各種格式的數據。下次再請求同樣的數據時就可以直接從緩存中獲取,避免對數據庫、磁盤等低效率數據的重復訪問及存取,而且可以避免數據的重復傳輸,從而提高響應速度。Memcached的原理如圖1所示。
通常情況下Memcached多用于流量較大的網站,把Memcached作為大的數據緩沖區,保存前端用戶經常訪問的數據。Memcached是分布式緩存系統的主程序,以守護進程的形式存在,可以隨時接收客戶端的連接及其他操作,以便訪問共享內存中的數據。
Memcached分布式緩存技術的特點包括:(1)簡單的協議。Memcached是基于文本的,因此只要能夠遠程登錄到Memcached服務器,即可進行數據的存取。
(2)高性能的事件處理。綜合了Linux系統的epoll、BSD操作系統的kqueue等事件處理機制,性能更高效。
(3)使用最近最少使用(LRU)緩存替換算法,在緩存空間不足時,先剔除最近最少使用的數據,符合緩存設計的初衷。
(4)分布式緩存。不同的Memcached服務器間是分布式的,獨立完成各自工作的基礎上不會影響彼此。
在Memcached啟動后,服務器會為其分配內存以便緩存數據;Memcachced不間斷的監聽配置的服務端口,一旦有外部請求就會解析請求命令,并把請求的數據傳輸給對應的功能模塊。如果請求命令是緩存設置命令,則會檢查緩存空間,如果緩存空間不夠則替換不常用的緩存;如果請求命令是獲取命令,則需要借助哈希算法計算獲取資源的存放位置。
Memcached自身是沒有分布式功能的,但其高效的存儲、各種API非常容易實現分布式的負載均衡、數據一致性以及多副本管理等分布式特性。Memcached的基本數據結構是Item和Slab,結構成員包括Chunk大小、Chunk數目、可用的Item(Slab)數、最后可用Item(Slab)的起始地址等;這些結構的成員為Memcached分配最小的內存單元,不僅可以用于存放緩存數據,還可以保存緩存數據的引用計數、訪問信息、下一個副本的地址等;另外,這些信息在哈希表中也有相應記錄,所以可以快速定位存儲位置。
啟動Memcached程序后,分配的所有內存會被劃分給多個Slab,它們的大小彼此不同,目的是使操作系統可以更有效的利用內存資源,減少內存碎片。接下來,會選擇運行時的協議,是文本類型的協議還是二進制的協議。協議選擇完畢后會啟動多線程完成初始化工作,并循環等待。每次有新請求到達,Memcached就進行協議判斷,并從中提取相應的命令,發送給對應的命令模塊處理。
3基于Memcached的緩存系統
使用Memcached實現緩存系統時,需要建立一個緩存管理節點以及緩存維護節點。緩存管理節點中保存整個Memcached集群的元數據信息;緩存維護節點用于在出現問題時修復Memcached緩存系統。
在存儲元數據時,需要對緩存數據的關鍵字key值進行排序,然后用B+樹結構的形式建立索引,B+樹的葉子節點存放數據信息。在進行查詢操作時,使用關鍵字一層層地便利B+樹,最終查找到數據的存放位置。在進行插入操作時,先找到插入位置,然后把原位置后的數據后移如果后移挪出的存儲空間不夠,并且預留的緩存空間也存滿,那么需要申請新空間。刪除操作和插入操作正好相反。
緩存系統中的元數據會保留多個副本,副本有master及slave之分,master完成數據的寫操作,并同步給slave,這種副本間的數據同步是通過異步方式實現的。雖然不是實時同步,但也可以在保證系統性能的前提下保證數據的一致性。副本間的同步有兩種方式:
(1)全量同步。slave節點把master節點的全部數據都復制過來。全量同步一般只有在新的slave節點加入緩存系統時,才會給新的slave同步全量數據。
(2)增量同步。slave不主動獲取全量數
據,而是只有在數據出現變化時才只同步變化的數據。
對于整個緩存系統來說,當用戶數量不斷增加時請求的數據也會越來越多,給緩存系統帶來的壓力也越來越大,此時可以采用數據讀寫分離的方式解決。當請求發送到管理節點后,管理節點會根據請求操作類型進行重定向:寫操作被重定向給master節點,讀操作被重定向給slave節點。
4總結
Web目前已經成為用戶接觸互聯網絡的首選,在訪問用戶急劇增加時,Web服務器的響應速度會越來越慢。為了提高Web服務的響應能力,緩存機制應運而生。Memcached是開源的分布式緩存產品,可以有效提高web服務的響應速度。
參考文獻
[1]顧榮慶,楊開杰,徐汀榮.分布式數據緩存技術研究[J].計算機應用與軟件,2017,14(05):135-137.
[2]D. Karger, E. Lehman, T. Leighton,et al. Consistent Hashing and RandomTrees: Distributed Caching Protocolsfor Relieving Hot Spots on theWorld Wide Web[C]. Twenty-Ninth ACMSymposium on Theory of Computing.ACM, 2017: 654-663.
[3]陳麗冰,基于J2EE的Web應用系統的性能優化方法研究[J].計算機科學,2015(08):13-16.
[4]鄧世權。基于Memcached的高速緩存功能擴展研究[D].成都:西南交通大學,2012.