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