李映
摘要:本文對(duì)基于Redis的分布式緩存技術(shù)進(jìn)行了詳細(xì)分析,并闡述了基于Redis的分布式緩存管理技術(shù)CacheManager。CacheManager實(shí)現(xiàn)了分布式緩存的自動(dòng)接入部署、彈性伸縮擴(kuò)容與全面監(jiān)控等各項(xiàng)管理運(yùn)維功能,有效地提升了系統(tǒng)運(yùn)維人員的維護(hù)效率,加強(qiáng)了分布式緩存的可用性與穩(wěn)定性。
關(guān)鍵詞:分布式系統(tǒng);高并發(fā);Redis;緩存集群
一、引言
隨著電子商務(wù)在移動(dòng)互聯(lián)網(wǎng)時(shí)代的迅速發(fā)展,各種的秒殺類、分享類、團(tuán)購(gòu)類等熱度高、并發(fā)量大的營(yíng)銷活動(dòng)對(duì)電子商務(wù)后臺(tái)支撐系統(tǒng)的緩存集群也帶來(lái)了極大壓力,緩存集群往往因?yàn)檫\(yùn)營(yíng)人員缺乏有效的監(jiān)控和管理,在用戶流量高峰下容易出現(xiàn)宕機(jī),從而導(dǎo)致整個(gè)支撐系統(tǒng)全面癱瘓。
二、Redis分布式緩存與管理技術(shù)
Redis是一個(gè)開(kāi)源的使用ANSIC語(yǔ)言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),其提供多種語(yǔ)言的API,因?yàn)槠涑霰姷男阅茉诒姸嗟囊苿?dòng)互聯(lián)網(wǎng)企業(yè)后臺(tái)支撐系統(tǒng)中被應(yīng)用于構(gòu)建系統(tǒng)的緩存模塊。
(一)Redis分布式緩存
Redis 集群是一個(gè)分布式、容錯(cuò)的 Redis 實(shí)現(xiàn),Redis 集群中不存在中心節(jié)點(diǎn)或者代理節(jié)點(diǎn),集群的主要設(shè)計(jì)目標(biāo)是達(dá)到線性可擴(kuò)展性,下面是Redis緩存集群的幾種配置方式。
1.主從模式(master/slaver)
主從模式的一個(gè)作用是備份數(shù)據(jù),當(dāng)一個(gè)緩存節(jié)點(diǎn)損壞(指不可恢復(fù)的硬件損壞)時(shí),數(shù)據(jù)因?yàn)橛袀浞荩梢苑奖慊謴?fù)。另一個(gè)作用是負(fù)載均衡,查詢操作就可以通過(guò)查詢從節(jié)點(diǎn)來(lái)完成。主從模式的缺點(diǎn)是master節(jié)點(diǎn)宕機(jī)以后,剩下的slave不能成為master,Redis緩存就不能對(duì)外提供寫服務(wù)了。
2.哨兵模式(Sentinel)
在主從模式中,當(dāng)master節(jié)點(diǎn)宕機(jī)以后,slave節(jié)點(diǎn)不能主動(dòng)選舉一個(gè)master節(jié)點(diǎn)出來(lái),Sentinel模式就安排一個(gè)或多個(gè)哨兵(sentinel)來(lái)監(jiān)控此類情況,當(dāng)哨兵發(fā)現(xiàn)master節(jié)點(diǎn)宕機(jī)后就會(huì)從slave中重新選舉一個(gè)master。Sentinel模式基本可以滿足一般生產(chǎn)的需求,具備高可用性。但是當(dāng)數(shù)據(jù)量過(guò)大到一臺(tái)服務(wù)器存放不下的情況時(shí),Sentinel模式就不能滿足需求了。
3.集束模式(Cluster)
Cluster模式的出現(xiàn)是為了解決單機(jī)Redis緩存容量有限的問(wèn)題,將Redis的數(shù)據(jù)根據(jù)一定的規(guī)則分配到多臺(tái)機(jī)器。Cluster模式是Sentinel模式和主從模式的組合方案,通過(guò)Cluster可以實(shí)現(xiàn)主從和master重選功能,因?yàn)镽edis的數(shù)據(jù)是根據(jù)一定規(guī)則分配到不同機(jī)器的,當(dāng)數(shù)據(jù)量過(guò)大時(shí)可以新增機(jī)器進(jìn)行擴(kuò)容,所以Cluster模式適合數(shù)據(jù)量巨大的場(chǎng)景。
(二)基于Redis的分布式緩存管理技術(shù)(CacheManager)
本文研究的Redis分布式緩存管理技術(shù)CacheManager實(shí)現(xiàn)了從各個(gè)緩存節(jié)點(diǎn)申請(qǐng)接入到最終部署上線以及整個(gè)緩存集群監(jiān)控、自動(dòng)彈性擴(kuò)容的全方位功能。
CacheManager主要可分為緩存管理模塊與緩存監(jiān)控模塊兩大部分:
1.分布式緩存管理
分布式緩存管理技術(shù)支持對(duì)Redis緩存集群Sentinel和Cluster模式的管理。
(1)自動(dòng)接入部署
如果新的緩存服務(wù)器需納入CacheManager的管理范圍,運(yùn)維人員可通過(guò)CacheManager的管理界面操作向管理服務(wù)發(fā)送緩存申請(qǐng),申請(qǐng)內(nèi)容包含需節(jié)點(diǎn)部署的緩存服務(wù)器地址、緩存內(nèi)存大小、集群模式等信息。管理服務(wù)會(huì)與申請(qǐng)服務(wù)器進(jìn)行通信并收集相關(guān)資源信息,如果符合管理規(guī)范,則自動(dòng)對(duì)緩存服務(wù)器進(jìn)行部署并納入管理范圍。
(2)統(tǒng)一配置管理
運(yùn)維管理人員可以通過(guò)CacheManager的管理界面對(duì)緩存集群進(jìn)行統(tǒng)一的配置管理,比如運(yùn)維人員可通過(guò)界面化的操作對(duì)集群中的緩存應(yīng)用實(shí)例進(jìn)行結(jié)構(gòu)調(diào)整,對(duì)集群中的實(shí)例和節(jié)點(diǎn)的動(dòng)態(tài)上下線處理、數(shù)據(jù)遷移、節(jié)點(diǎn)調(diào)整等操作。
(3)彈性自動(dòng)擴(kuò)容
CacheManager支持運(yùn)維人員提前根據(jù)系統(tǒng)的資源配置(集群的機(jī)器數(shù)量、硬件配置條件、Redis集群類型等)結(jié)合并發(fā)需求制定緩存集群的擴(kuò)容策略。擴(kuò)容策略在CacheManager被設(shè)置好后即自動(dòng)生效,一旦緩存集群出現(xiàn)資源不足的情況,將根據(jù)設(shè)定策略自動(dòng)彈性擴(kuò)容。運(yùn)維人員也可以實(shí)時(shí)介入,調(diào)整擴(kuò)容策略并且一鍵設(shè)置生效。
CacheManager針對(duì)Redis緩存集群的擴(kuò)容策略主要有垂直伸縮擴(kuò)容與水平伸縮擴(kuò)容兩種。
● 垂直伸縮擴(kuò)容策略
此類策擴(kuò)容略的實(shí)現(xiàn)原理是通過(guò)調(diào)整每個(gè)Redis緩存實(shí)例的可用內(nèi)存量做到垂直拓展。這種策略優(yōu)點(diǎn)是適用于所有類型的Redis集群,缺點(diǎn)是受限于Redis緩存所在服務(wù)器的物理內(nèi)存資源大小。
● 水平伸縮擴(kuò)容策略
CacheManager僅支持Sentinel和Cluster兩種Redis緩存集群的水平伸縮擴(kuò)容策略。
針對(duì)Sentinel類型的緩存集群,當(dāng)服務(wù)器物理內(nèi)存不夠用或者運(yùn)維人員在切換故障機(jī)器時(shí),CacheManager通過(guò)進(jìn)行在線切換主從關(guān)系和實(shí)例所屬機(jī)器實(shí)現(xiàn)擴(kuò)容。
針對(duì)Cluster類型的緩存集群,CacheManager平臺(tái)通過(guò)進(jìn)行動(dòng)態(tài)加減緩存實(shí)例并在線遷移數(shù)據(jù)來(lái)實(shí)現(xiàn)伸縮擴(kuò)容。此擴(kuò)容方案的伸縮性最靈活,但是因?yàn)閿?shù)據(jù)遷移需要重新分區(qū),并導(dǎo)入到目標(biāo)節(jié)點(diǎn)中,計(jì)算耗時(shí)比較長(zhǎng),擴(kuò)容的速度最慢。
2.分布式緩存監(jiān)控
CacheManager的緩存集群監(jiān)控模塊按照監(jiān)控對(duì)象的不同可以分成四部分:
(1)緩存服務(wù)器監(jiān)控
緩存服務(wù)器的監(jiān)控是指定時(shí)統(tǒng)計(jì)各個(gè)緩存服務(wù)器的性能狀況,主要監(jiān)測(cè)指標(biāo)是緩存服務(wù)器的內(nèi)存使用率,CPU使用率,網(wǎng)絡(luò)流量消耗消耗情況,服務(wù)器系統(tǒng)的負(fù)載情況等,監(jiān)控目的是確保緩存集群中的服務(wù)器本身運(yùn)行良好。
(2)緩存實(shí)例監(jiān)控
緩存應(yīng)用拓?fù)浔O(jiān)控是指以緩存集群中的各個(gè)緩存實(shí)例為監(jiān)測(cè)對(duì)象,實(shí)時(shí)查看各個(gè)緩存實(shí)例的運(yùn)行狀態(tài),監(jiān)測(cè)范圍包含緩存實(shí)例運(yùn)行的情況,內(nèi)存使用情況,當(dāng)前對(duì)象數(shù),當(dāng)前連接數(shù),緩存的命中率,角色關(guān)系等命中率,慢查詢數(shù),慢查詢的詳細(xì)信息等。
(3)緩存命令監(jiān)控
緩存命令監(jiān)控是指監(jiān)測(cè)集群中的各個(gè)單個(gè)緩存實(shí)例,統(tǒng)計(jì)各實(shí)例中各個(gè)命令的分布情況、執(zhí)行情況、以及命令執(zhí)行趨勢(shì)等信息。
(4)監(jiān)控預(yù)警
對(duì)以上三個(gè)監(jiān)控模塊監(jiān)測(cè)到的信息進(jìn)行閾值告警,達(dá)到預(yù)警值采用短信等方式通知系統(tǒng)運(yùn)維人員。告警閾值可實(shí)時(shí)進(jìn)行設(shè)置,告警的信息點(diǎn)可以進(jìn)行動(dòng)態(tài)添加。
三、總結(jié)
針對(duì)Redis分布式緩存的管理技術(shù)CacheManager具備自動(dòng)接入部署、彈性伸縮擴(kuò)容與全面監(jiān)控管理等各項(xiàng)功能,大幅提升了運(yùn)維人員的系統(tǒng)維護(hù)效率,有力加強(qiáng)了緩存集群與整個(gè)支撐系統(tǒng)的可用性與穩(wěn)定性。
參考文獻(xiàn)
[1]王劍冰. 一種高并發(fā)分布式緩存服務(wù)架構(gòu)[J]. 科學(xué)技術(shù)創(chuàng)新,2016(31):172-172.
[2]邱祝文. 基于redis的分布式緩存系統(tǒng)架構(gòu)研究[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(10).
[3]周智. Redis分布式緩存實(shí)現(xiàn)與解析[J]. 信息通信,2018,No.186(06):29-30.
[4]戚偉強(qiáng). 分布式緩存模式研究及其在金融系統(tǒng)中的應(yīng)用[D]. 浙江大學(xué),2008.
[5]孫赫. 大規(guī)模協(xié)同計(jì)算平臺(tái)下緩存層的研究與優(yōu)化[D]. 西安電子科技大學(xué),2015.
[6]徐朝輝,張?zhí)m英,劉現(xiàn)民. 分布式緩存系統(tǒng)[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用.
(作者單位:中國(guó)移動(dòng)通信集團(tuán)江蘇有限公司)