性能測試-緩存專項(xiàng)測試

前言

緩存(Cache)是目前互聯(lián)網(wǎng)中使用得比較多的技術(shù)究飞,原始意義是指訪問速度比一般隨機(jī)存取存儲器(RAM)快的一種高速存儲器,通常它不像系統(tǒng)主存那樣使用DRAM技術(shù),而使用昂貴但較快速的SRAM技術(shù)军洼。緩存在當(dāng)今應(yīng)用產(chǎn)品必不可少的一部分巩螃,這個技術(shù)能解決成千上萬用戶并發(fā)請求查詢數(shù)據(jù)的問題,同時匕争,在合理的配置下避乏,可以讓應(yīng)用產(chǎn)品在運(yùn)維成本上做到降本增效的作用。

緩存應(yīng)用場景

  • 電子商城
  • 搜索引擎
  • 文檔搜索
  • 異地服務(wù)數(shù)據(jù)同步……

緩存實(shí)現(xiàn)技術(shù)

前端

  • Cookie
  • localStorage
  • sessionStorage
  • WebSQL
  • indexedDB
  • applicationCache
  • cacheStorage

前端資源服務(wù)端

  • NGINX-緩存配置

后端

  • Redis
  • Mybatis
  • Memcache

緩存測試

測試要點(diǎn):緩存擊穿 緩存擊穿 緩存雪崩

緩存擊穿

基礎(chǔ)概念:

在超級熱點(diǎn)數(shù)據(jù)突然過期甘桑,導(dǎo)致針對超級熱點(diǎn)的數(shù)據(jù)請求在過期期間直接打到數(shù)據(jù)庫拍皮,這樣數(shù)據(jù)庫服務(wù)器會因?yàn)槟骋怀瑹釘?shù)據(jù)導(dǎo)致壓力過大而崩掉。


image.png

簡易理解:

  • 相同點(diǎn):緩存擊穿和緩存穿透有點(diǎn)像但是性質(zhì)又不相同跑杭,都是緩存中沒有數(shù)據(jù)铆帽,請求命中數(shù)據(jù)庫。
  • 兩者區(qū)別:緩存穿透指的是數(shù)據(jù)庫中不存在的數(shù)據(jù)德谅,緩存擊穿則是指緩存失效的問題爹橱。

觸發(fā)場景:

熱門商品查詢,redis緩存查詢記錄:12h窄做,查詢時愧驱,redis緩存對應(yīng)緩存商品已超時清理,后臺程序查詢時椭盏,查詢不存在组砚,直接查詢數(shù)據(jù)庫結(jié)果。

解決方案:

  • 加互斥鎖(mutex key):
    在并發(fā)的多個請求中掏颊,只有第一個請求線程能拿到鎖并執(zhí)行數(shù)據(jù)庫查詢操作糟红,其他的線程拿不到鎖就阻塞等著,等到第一個線程將數(shù)據(jù)寫入緩存后乌叶,直接走緩存改化。
  • 熱點(diǎn)數(shù)據(jù)過期時間調(diào)整:
    • 根據(jù)實(shí)際業(yè)務(wù)情況,在Redis中維護(hù)一個熱點(diǎn)數(shù)據(jù)表枉昏,批量設(shè)為更長的過期時間陈肛。
    • 批量設(shè)置永不過期(如top1000),并定時更新top1000數(shù)據(jù)兄裂。

緩存穿透

基礎(chǔ)概念:

緩存和數(shù)據(jù)庫中都沒有的數(shù)據(jù)句旱,導(dǎo)致所有的請求都打到數(shù)據(jù)庫上,然后數(shù)據(jù)庫還查不到(如null)晰奖,沒法寫緩存谈撒,造成數(shù)據(jù)庫短時間線程數(shù)被打滿而導(dǎo)致其他服務(wù)阻塞,最終導(dǎo)致線上服務(wù)不可用匾南。此時緩存就好像被穿透了一樣啃匿,起不到任何作用。


image.png

觸發(fā)場景:

對于熱數(shù)據(jù)安排不合理的應(yīng)用就存在這個問題,常見場景是搜索引擎-搜索商品時接口響應(yīng)慢溯乒。

如何判斷(大致):

  • 壓力測試時夹厌,接口響應(yīng)慢
  • Redis服務(wù)器負(fù)載明顯飆升
  • DB數(shù)據(jù)庫負(fù)載明顯飆升

解決方案:

  • 互聯(lián)網(wǎng)業(yè)務(wù)的數(shù)據(jù)訪問模型一般是遵循二八原則的,即 20% 的數(shù)據(jù)為熱點(diǎn)數(shù)據(jù)裆悄,80% 的數(shù)據(jù)是非熱點(diǎn)不被常訪問的數(shù)據(jù)矛纹。既然緩存容量有限,且20%的數(shù)據(jù)為熱點(diǎn)數(shù)據(jù)光稼,那我們可以利用有限的容量去緩存那 20% 的數(shù)據(jù)來保護(hù)我們的系統(tǒng)或南,至于80%非熱點(diǎn)不常用的數(shù)據(jù)發(fā)生穿透就穿透了,數(shù)據(jù)庫吃得住艾君。
  • 接口參數(shù)校驗(yàn):
    防君子不防小人采够。在參數(shù)校驗(yàn)層加上參數(shù)合法性校驗(yàn),如查詢訂單ID為20位隨機(jī)值冰垄,正則核對一下ID長度是否規(guī)范吁恍,不規(guī)范地直接過濾掉。
  • 設(shè)置空值:
    當(dāng)訪問緩存和DB都沒有查詢到值時播演,該key我們當(dāng)做是惡意參數(shù)來看冀瓦,可以將該key的空值寫進(jìn)緩存,設(shè)置較短的過期時間写烤。
    但是如果有大量的獲取并不存在數(shù)據(jù)的穿透請求的話如惡意攻擊翼闽,則會浪費(fèi)緩存空間,如果這種null值過量的話洲炊,還會淘汰掉本身緩存存在的數(shù)據(jù)感局,這就會使我們的緩存命中率下降。
    因此在使用設(shè)置空值方案時暂衡,我們要做好監(jiān)控询微,預(yù)防緩存空間被過多null值占領(lǐng)造成的緩存空間浪費(fèi),如果這種數(shù)據(jù)量太大狂巢,就不再建議使用撑毛,那就使用另一種方案,即布隆過濾器唧领。
  • 布隆過濾器:
    布隆過濾器在查詢緩存之前起到初步過濾作用藻雌,布隆過濾器存儲所有可能訪問的 key,將不存在的 key 直接過濾斩个,存在的 key 再進(jìn)一步查詢緩存和數(shù)據(jù)庫胯杭。
    布隆過濾器的特點(diǎn)是判斷不存在的,則一定不存在受啥;判斷存在的做个,大概率存在鸽心,但也有小概率不存在。并且這個概率是可控的居暖,根據(jù)具體需求顽频,我們可以讓這個概率小幅降低或變高。

緩存雪崩

基礎(chǔ)概念:

突然緩存層不可用膝但,導(dǎo)致大量請求直接打到數(shù)據(jù)庫,最終由于數(shù)據(jù)庫壓力過大可能導(dǎo)致系統(tǒng)崩掉谤草。
緩存層不可用指以下兩方面:

  • 緩存服務(wù)器宕機(jī)跟束,系統(tǒng)將請求打到數(shù)據(jù)庫。
  • 緩存數(shù)據(jù)突然大范圍集中過期失效丑孩,導(dǎo)致大量請求打到數(shù)據(jù)庫重新加載數(shù)據(jù), 與緩存擊穿的區(qū)別在于這里針對很多key緩存冀宴,前者則是某一個key。

簡易理解:

  • 相同點(diǎn):緩存擊穿和緩存雪崩有點(diǎn)像温学,都是緩存中沒有數(shù)據(jù)略贮,且請求命中數(shù)據(jù)庫有數(shù)據(jù)。
  • 兩者區(qū)別:緩存雪崩更像是緩存擊穿升級版仗岖,瞬時查數(shù)據(jù)庫的量更大逃延。

觸發(fā)場景:

  • 緩存服務(wù)器宕機(jī)/網(wǎng)絡(luò)阻斷。
  • 緩存時間設(shè)置的過期時間為同一個時間轧拄。

解決方案:

  • 根據(jù)實(shí)際情況打散緩存失效時間
  • 熱點(diǎn)數(shù)據(jù)不過期
  • 加互斥鎖(與緩存擊穿方案類似)

總結(jié)(Conclusion)

緩存測試的發(fā)現(xiàn)與問題判斷揽祥,首要做的是對該產(chǎn)品/接口對應(yīng)的業(yè)務(wù)場景定義進(jìn)行分析,得出合理的場景進(jìn)行壓力測試檩电,然后拄丰,根據(jù)測試接口響應(yīng)結(jié)果結(jié)合鏈路上的服務(wù)器壓力情況進(jìn)行分析并推理出大致的問題點(diǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俐末,一起剝皮案震驚了整個濱河市料按,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卓箫,老刑警劉巖载矿,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異烹卒,居然都是意外死亡恢准,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門甫题,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馁筐,“玉大人,你說我怎么就攤上這事坠非∶舫粒” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盟迟。 經(jīng)常有香客問我秋泳,道長,這世上最難降的妖魔是什么攒菠? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任迫皱,我火速辦了婚禮,結(jié)果婚禮上辖众,老公的妹妹穿的比我還像新娘卓起。我一直安慰自己,他們只是感情好凹炸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布戏阅。 她就那樣靜靜地躺著,像睡著了一般啤它。 火紅的嫁衣襯著肌膚如雪奕筐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天变骡,我揣著相機(jī)與錄音离赫,去河邊找鬼。 笑死塌碌,一個胖子當(dāng)著我的面吹牛笆怠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播誊爹,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蹬刷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了频丘?” 一聲冷哼從身側(cè)響起办成,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搂漠,沒想到半個月后迂卢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桐汤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年而克,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怔毛。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡员萍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拣度,到底是詐尸還是另有隱情碎绎,我是刑警寧澤螃壤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站筋帖,受9級特大地震影響奸晴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜日麸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一寄啼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧代箭,春花似錦墩划、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽副女。三九已至蛤高,卻和暖如春厨埋,著一層夾襖步出監(jiān)牢的瞬間屹徘,已是汗流浹背审孽。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工翩肌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留虽抄,地道東北人伊脓。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓导犹,卻偏偏與公主長得像尔艇,于是被迫代替她去往敵國和親裹赴。 傳聞我的和親對象是個殘疾皇子喜庞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容