梁振龍 池維榆 徐飛
摘要:從云計算與分布式緩存技術(shù)的結(jié)合入手, 對現(xiàn)有分布式數(shù)據(jù)緩存技術(shù)進行了研究 ,為此我們打算改進一個分布式數(shù)據(jù)緩存框架,基于原框架已有的服務(wù)組件來進行設(shè)計,集成各個服務(wù)組件的自身優(yōu)勢,保證整個框架的可擴展性和可用性,實現(xiàn)數(shù)據(jù)的冗余備份、故障轉(zhuǎn)移和負載均衡等功能特性,使用已有更加先進的技術(shù),Redis、Kafka、MySQL與NoSQL混合模型等,提高原有框架的性能。
關(guān)鍵詞:云計算;分布式數(shù)據(jù)緩存;緩存優(yōu)化
1.引言
隨著大數(shù)據(jù)時代的來臨,分布式應(yīng)用系統(tǒng)成為了發(fā)展的主流。作為云平臺提升應(yīng)用性能的一種重要手段,分布式數(shù)據(jù)緩存已經(jīng)成為當(dāng)今分布式應(yīng)用開發(fā)中不可或缺的一個環(huán)節(jié),越來越受到企業(yè)的廣泛關(guān)注和研究。
2.系統(tǒng)流程
該框架的目標(biāo)是針對大規(guī)模、高并發(fā)的應(yīng)用需求,保證海量數(shù)據(jù)的處理效率和快速響應(yīng)。本設(shè)計選用Redis緩存技術(shù)與混合數(shù)據(jù)庫結(jié)合,Redis服務(wù)器作為數(shù)據(jù)庫的前端,存放用戶經(jīng)常訪問的熱點資源,用戶請求的數(shù)據(jù)如果存在則直接從緩存中取出返回給用戶,若不存在則查詢數(shù)據(jù)庫,從數(shù)據(jù)庫取出數(shù)據(jù)返回給用戶的同時,存到Redis服務(wù)器。此模型中,Zookeeper主要負責(zé)監(jiān)控Redis節(jié)點集群,將集群狀態(tài)變化實時通知給緩存管理器,同時利用其分布式鎖的機制實現(xiàn)了緩存節(jié)點故障切換的功能;緩存管理器實現(xiàn)了Redis客戶端、均衡負載和動態(tài)調(diào)整數(shù)據(jù)到Redis節(jié)點的映射(利用Zookeeper的監(jiān)控功能)等功能,它是一個統(tǒng)籌全局、任務(wù)調(diào)度的角色,架構(gòu)中的消息中間件(Kafka) 的主要功能是充當(dāng)數(shù)據(jù)的傳輸通道,它能以一種松散的方式就像粘合劑一樣把各組件裝配起來,構(gòu)成一個整體的模型。
Redis以組為單位部署,每個組只有單個Redis服務(wù)器提供服務(wù),其他的都作為備份服務(wù)器,當(dāng)主服務(wù)器(提供服務(wù)的Redis)故障后,會從備份服務(wù)器中選舉出新的主服務(wù)器(失敗轉(zhuǎn)移功能),各個組之間不進行通信,通過緩存管理器組件中的分布式算法即一致性hash算法來組成一個虛擬的集群,該集群對調(diào)用者來說是透明的和屏蔽的。本地緩存模塊和緩存管理器都是部署在應(yīng)用服務(wù)器中,數(shù)據(jù)庫層的“分布式事務(wù)支持”是擴展模塊,只有當(dāng)數(shù)據(jù)持久化到數(shù)據(jù)庫且需要分布式事務(wù)支持時才會啟用,它是一個復(fù)雜和獨立的功能模塊。Epoll模塊同樣是-個擴展模塊,它的作用是通過在Linux環(huán)境下提高服務(wù)器的I/O能力,間接地提升整個緩存系統(tǒng)的性能。本地緩存模塊可以看作是系統(tǒng)的一個小型的一級緩存,用于加快應(yīng)用的響應(yīng)速度。當(dāng)整個框架如圖正確部署后,每個Redis組下的服務(wù)器都會在zookeeper上創(chuàng)建臨時節(jié)點,如/${root}/${me mgroup-i}/${ip}結(jié)構(gòu)形式,${root}表示zookeeper上設(shè)置的根節(jié)點名稱,${memgroup-i}表示Redis的組節(jié)點名稱,i表示相應(yīng)的組編號,如memgroup-1就表示第一組Redis服務(wù)器,${ip}表示某個組下的Redis服務(wù)器的實際IP地址,當(dāng)一個Redis組下的Redis服務(wù)器將IP注冊到zookeeper上后,就會試著去創(chuàng)建如/${root}/${memgroup-i}/${ masterNode }結(jié)構(gòu)的臨時節(jié)點,且將該節(jié)點的value 置為其IP, ${masterNode }是一個固定的值,表示本組的主服務(wù)器,一個組下只會有一個Redis能成功創(chuàng)建該節(jié)點,創(chuàng)建失敗的Redis自動成為備份服務(wù)器并監(jiān)聽該節(jié)點,當(dāng)主Redis服務(wù)器故障后,備份服務(wù)器都會獲得通知,然后重新去競爭創(chuàng)建該節(jié)點,從而自動地選舉出新主服務(wù)器。緩存管理器會監(jiān)聽所有的Redis組的主服務(wù)器節(jié)點,如/${root}/${me mgroup-i}/${masterNode},它根據(jù)該節(jié)點的value獲取到所有提供服務(wù)的Redis地址并調(diào)用基于虛擬節(jié)點的一致性hash算法完成分布式映射,當(dāng)有主Redis地址發(fā)生變化時,緩存管理器會得到通知,然后取得變更后的IP地址,將映射到變更前的IP地址的虛擬節(jié)點重新映射到變更后的IP地址,從而實現(xiàn)了自動動態(tài)地Redis節(jié)點映射。消息中間件啟動后會按照Redis的分組創(chuàng)建消息通道,通道標(biāo)識名稱如下結(jié)構(gòu)形式:/${root}/S{memgroup-i},每個分組下的Memcached都會訂閱相應(yīng)組的消息通道,當(dāng)有緩存數(shù)據(jù)更新時,只需將更新數(shù)據(jù)發(fā)送到對應(yīng)的消息通道后,訂閱了該消息.通道的Redis服務(wù)器都會收到需要更新的數(shù)據(jù)各自去完成緩存數(shù)據(jù)的更新。
3.結(jié)語
在當(dāng)今的互聯(lián)網(wǎng)應(yīng)用中,系統(tǒng)的復(fù)雜程度越來越高,海量級的數(shù)據(jù)處理,已經(jīng)成為了提升系統(tǒng)性能的關(guān)鍵一環(huán),云計算的引入,有力地推動了IT領(lǐng)域的深刻變革,同時也給分布式緩存技術(shù)的發(fā)展帶來了難得的機遇。本文基于已有分布式緩存框架,使用Redis、Kafka、MySQL與NoSQL混合模型等技術(shù)進行優(yōu)化。相對于之前的系統(tǒng),采用優(yōu)化后的技術(shù)后,系統(tǒng)性能有著很大的提升。
參考文獻:
[1] 高國強.對等網(wǎng)絡(luò)分布式緩存機制研究:[華中科技大學(xué)博士學(xué)位論文].武漢:華中科技大學(xué),2011,4-7
[2]屠要峰.云計算分布式緩存及其應(yīng)用實踐.通訊世界,2012,(10):69-71
[3]王潤華,任化敏,周艷芳等.分布式系統(tǒng)開發(fā)利器--ZooKeeper研究.中國電子商情:通信市場,2012,(1):64-67
[4]胡俊.構(gòu)建分布式系統(tǒng)的關(guān)鍵技術(shù)研究與實現(xiàn):[南京郵電大學(xué)碩士學(xué)位論文].南京:南京郵電大學(xué),2012,5-6
[5]李汝光,趙俊.基于ZooKeeper的分布式緩存的設(shè)計與實現(xiàn).綿陽師范學(xué)院學(xué)報,2011,30(11):116-119
[6]高寧.IBM消息中間件WebSphere MQ的應(yīng)用,電腦知識,2010,06(31):8877-8879