陳小強(qiáng)
摘要:分布式緩存作為支撐海量數(shù)據(jù)處理的關(guān)鍵技術(shù)方案,近年來(lái)受到了廣泛關(guān)注和應(yīng)用。本文從分布式緩存系統(tǒng)的工程實(shí)踐出發(fā),研究了分布式緩存系統(tǒng)處理Hot Key的關(guān)鍵技術(shù),提出了一種分布式緩存系統(tǒng)優(yōu)化設(shè)計(jì),通過(guò)動(dòng)態(tài)識(shí)別、自動(dòng)重分布等設(shè)計(jì),解決了Hot Key問(wèn)題,同時(shí)提高了分布式緩存系統(tǒng)的性能、穩(wěn)定性和適用性。實(shí)驗(yàn)驗(yàn)證和商用環(huán)境實(shí)際效果證明,相比傳統(tǒng)分布式緩存系統(tǒng),采用上述技術(shù)優(yōu)化后分布式緩存系統(tǒng)提升是有效的。
關(guān)鍵詞:數(shù)據(jù)庫(kù);分布式緩存;NoSQL;云計(jì)算;Hot Key;熱點(diǎn)數(shù)據(jù)
1分布式緩存系統(tǒng)Hot Key優(yōu)化設(shè)計(jì)及關(guān)鍵技術(shù)
分布式緩存[1]基于鍵-值型(Key-Value)[2]數(shù)據(jù)模型,是業(yè)界目前最廣泛的一種NoSQL[3],其最大的優(yōu)勢(shì)在于對(duì)高并發(fā)的支持和它的可擴(kuò)展性。分布式緩存的代表有開(kāi)源的Redis[4]、memcached[5],亞馬遜的dynamo[6],淘寶的Tair等。這些分布式緩存系統(tǒng)使用的數(shù)據(jù)分布算法主要有一致性Hash[7]或基于Range分區(qū)兩種,但是只能保證數(shù)據(jù)分布的均衡,不能保證分布式緩存系統(tǒng)運(yùn)行中實(shí)際數(shù)據(jù)訪問(wèn)的均衡,即存在Hot Key,常見(jiàn)場(chǎng)景有兩類:
1)新聞APP中的熱點(diǎn)新聞內(nèi)容
2)電子商城秒殺系統(tǒng)中,最吸引用戶眼球,性價(jià)比最高的商品信息
Hot Key導(dǎo)致主要問(wèn)題是緩存雪崩:大量的客戶端,大量的讀請(qǐng)求集中同時(shí)訪問(wèn)分布式緩存系統(tǒng)的某個(gè)服務(wù)節(jié)點(diǎn),導(dǎo)致服務(wù)節(jié)點(diǎn)響應(yīng)時(shí)延逐漸加大,直至不能對(duì)外提供服務(wù),即緩存雪崩。針對(duì)上述痛點(diǎn),本文提出了一種優(yōu)化的分布式緩存系統(tǒng)設(shè)計(jì),創(chuàng)新的功能有動(dòng)態(tài)識(shí)別Hot Key,識(shí)別出的Hot Key在分布式緩存系統(tǒng)中自動(dòng)重分布,用更多節(jié)點(diǎn)、更多線程承擔(dān)Hot Key的讀取請(qǐng)求,這樣系統(tǒng)地解決了Hot Key帶來(lái)的緩存雪崩。下面介紹這些關(guān)鍵技術(shù)的原理和實(shí)現(xiàn)。
1.1動(dòng)態(tài)識(shí)別
為了動(dòng)態(tài)統(tǒng)計(jì)Key的訪問(wèn)情況,在描述Key的結(jié)構(gòu)中增加訪問(wèn)時(shí)間和訪問(wèn)頻率兩個(gè)成員,動(dòng)態(tài)識(shí)別Hot Key流程如下:
1)Client向分布式緩存系統(tǒng)的服務(wù)節(jié)點(diǎn)發(fā)起一個(gè)讀請(qǐng)求
2)服務(wù)節(jié)點(diǎn)在索引中查詢Key
3)Key沒(méi)有查詢到,直接給Client回響應(yīng),流程結(jié)束
4)Key查詢到了,將Key的訪問(wèn)計(jì)數(shù)加1,更新訪問(wèn)時(shí)間
5)如果訪問(wèn)時(shí)間中統(tǒng)計(jì)周期發(fā)生變化(統(tǒng)計(jì)周期缺省是分鐘),并且訪問(wèn)計(jì)數(shù)小于配置的最大QPS(每秒最大訪問(wèn)量),則給Client回響應(yīng),否則執(zhí)行下一步
6)識(shí)別出一個(gè)Hot Key,將Key訪問(wèn)計(jì)數(shù)清零,開(kāi)始一個(gè)新的統(tǒng)計(jì)周期
7)Hot Key開(kāi)始自動(dòng)重分布
8)給Client回響應(yīng),響應(yīng)中包含Hot Key最新的分布節(jié)點(diǎn)信息以及過(guò)期時(shí)間,后續(xù)Client訪問(wèn)該Key時(shí),如果Key沒(méi)有過(guò)期則需要根據(jù)最新的分布節(jié)點(diǎn)信息重新計(jì)算服務(wù)節(jié)點(diǎn)
1.2自動(dòng)重分布
動(dòng)態(tài)識(shí)別出Hot Key后,必須進(jìn)一步將Hot Key自動(dòng)重新分布,分布到更多節(jié)點(diǎn)上,并分配更多的線程負(fù)責(zé)Hot Key的讀取,為此在描述Key的結(jié)構(gòu)中增加節(jié)點(diǎn)和線程信息:[< Node1,Thread1>......
Node:Hot Key分布的節(jié)點(diǎn)。
Thread:節(jié)點(diǎn)上負(fù)責(zé)這個(gè)Hot key的讀取線程數(shù)。
舉個(gè)例子,一個(gè)擁有5個(gè)節(jié)點(diǎn),數(shù)據(jù)是3副本的分布式緩存系統(tǒng)中,對(duì)一個(gè)非Hot Key來(lái)說(shuō)其分布信息:[< Node1,1>,
2總結(jié)
本文從實(shí)際工程問(wèn)題和需求出發(fā),針對(duì)分布式緩存系統(tǒng)處理Hot Key的關(guān)鍵技術(shù)進(jìn)行研究。通過(guò)動(dòng)態(tài)識(shí)別、自動(dòng)重分布等設(shè)計(jì),提高了分布式緩存系統(tǒng)的性能和穩(wěn)定性,能更好地適應(yīng)Hot Key場(chǎng)景。通過(guò)和傳統(tǒng)分布式緩存系統(tǒng)對(duì)比實(shí)驗(yàn)驗(yàn)證,以及商用生產(chǎn)環(huán)境的實(shí)際使用效果,都證明了采用上述關(guān)鍵技術(shù)后的分布式緩存系統(tǒng)提升是有效的。優(yōu)化后的分布式緩存系統(tǒng)在動(dòng)態(tài)識(shí)別Hot Key時(shí)QPS閾值等是固定配置好的,不滿足業(yè)務(wù)場(chǎng)景的多樣化,還有進(jìn)一步的優(yōu)化空間,可以引入人工智能確定QPS閾值,動(dòng)態(tài)識(shí)別向智能識(shí)別演進(jìn)是我們下一步的工作方向。
參考文獻(xiàn)
[1]于君澤 曹洪偉 邱碩等. 深入分布式緩存從原理到實(shí)踐[M].北京:機(jī)械工業(yè)出版社,2018
[2]馬文龍,朱妤晴,蔣德鈞等. Key-Value型NoSQL本地存儲(chǔ)系統(tǒng)研究[J]. 計(jì)算機(jī)學(xué)報(bào),2018,41(8):1722-1751.
[3]NoSQL. Wikipedia. 2017. https://en.wikipedia.org/wiki/NoSQL
[4]姚經(jīng)緯,楊福軍. Redis分布式緩存技術(shù)在Hadoop平臺(tái)上的應(yīng)用[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2017,27(6):146-150.
[5]安仲奇,杜昊,李強(qiáng)等.基于高性能I/O技術(shù)的Memcached優(yōu)化研究[J].計(jì)算機(jī)研究與發(fā)展,2018,55(4):864-874.
[6]Decandia G,Hastorun D,Jampani M,et al. Dynamo:amazon's highly available key-value store[J]. ACM SIGOPS Operating Systems Review,2007,41(6):205-220.
[7]Robert Sedgewick.《算法》英文版第4版[M].人民郵電出版社,2012,ISBN:9787115271464.
(作者單位:中興通訊股份有限公司)