日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本期作者 侯曉

嗶哩嗶哩高級測試開發(fā)工程師

日常生產(chǎn)中經(jīng)常會碰到由于redis集群的不當訪問,造成的線上問題。其中比較常見的是BigKey(大key)和HotKey(熱key)的問題,這類問題不止會使服務的性能下降,還會影響用戶正常使用功能,甚至會造成大范圍的服務故障,故障有時還會發(fā)生連環(huán)效應,導致更加嚴重的后果。我們通過本文一起來探索,測試如何快速發(fā)現(xiàn)“大key”和“熱key”的問題。

 

一、什么是BigKey、HotKey?

BigKey:俗稱“大key”,是指redis在日常生產(chǎn)的過程中,某些key所占內(nèi)存空間過大。

通俗來說,redis是key-value的存儲方式,當一個key所對應的存儲數(shù)值達到一定程度,就會出現(xiàn)大key的情況。redis里有多種數(shù)據(jù)存儲結構,如String、List、Hash等,每種存儲結構都有能夠承載的數(shù)據(jù)限值。當一個key包含的內(nèi)容接近限制,或者高于平均值,大key就產(chǎn)生了。

舉個例子:該list存儲了100MB的數(shù)據(jù)(假設該Redis實例可用內(nèi)存空間僅150M,有1000個key,一個key就占用了 100M),在查找某個數(shù)據(jù)的過程中由于處理太久,導致請求阻塞(小tips:redis單線程特性)。體現(xiàn)在業(yè)務上就是頻繁請求超時、頁面404等。上述key,就是一個大key。

HotKey:俗稱“熱key”,一個key對應在一個redis分片上,當短時間內(nèi)大量的請求打到該分片上,key被頻繁訪問,該key就是熱key。

我們通過下圖來簡單了解下hotkey的訪問關系:

 

當大量的請求,經(jīng)過分發(fā)和計算,最終集中于同一個redis實例下的某個key時,該key由于被請求頻率過高,而占用掉了大量資源。而其他分片,由于key的不合理分配導致請求量較少。整個redis集群呈現(xiàn)出了資源使用不均衡的現(xiàn)象。

舉個例子:一線女明星官宣領證結婚,短時間內(nèi)該女星微博賬號被訪問量激增(假設該賬號內(nèi)容被同步在緩存,賬號id作為key),微博服務癱瘓(不具備任何實時參考性,僅作為虛擬的例子)。

在該場景下,上述key被大量訪問,造成熱key。

 

二、服務中的bigkey和

hotkey會導致什么問題

我們可以通過上述兩種key的特性,來簡單分析可能出現(xiàn)的幾種問題。

大key,主要的問題是一個key所占空間太大,內(nèi)存空間分配不均衡(小tips:redis是內(nèi)存型key-value數(shù)據(jù)庫)。那就可能引發(fā)以下問題:

1.數(shù)據(jù)請求大量超時:redis是單線程的,當一個key數(shù)據(jù)響應的久一點,就會造成后續(xù)請求頻繁超時。如果服務容災措施考慮得不夠,會引發(fā)更大的問題。

2.侵占帶寬網(wǎng)絡擁堵:當一個key所占空間過大,多次請求就會占用較大的帶寬,直接影響服務的正常運行。

3.內(nèi)存溢出或處理阻塞:當一個較大的key存在時,持續(xù)新增,key所占內(nèi)存會越來越大,嚴重時會導致內(nèi)存數(shù)據(jù)溢出;當key過期需要刪除時,由于數(shù)據(jù)量過大,可能發(fā)生主庫較響應時間過長,主從數(shù)據(jù)同步異常(刪除掉的數(shù)據(jù),從庫還在使用)。

熱key,熱key的問題是單點訪問頻率過高。那就可能引發(fā)以下問題:

1.分片服務癱瘓:上述有提到,redis集群會分很多個分片,每個分片有其要處理的數(shù)據(jù)范圍。當某一個分片被頻繁請求,該分片服務就可能會癱瘓。

2.Redis 分布式集群優(yōu)勢弱化:如1所述,如果請求不夠均衡,過于單點,那么redis分布式集群的優(yōu)勢也必然被弱化。

3.可能造成資損:在極端場景下,容易發(fā)生邊界數(shù)據(jù)處理不及時,在訂單等場景下,可能造成資損。

4.引發(fā)緩存擊穿:我們都知道,當緩存請求不到,就會去請求數(shù)據(jù)庫。如果請求過于集中,redis承載不了,就會有大量請求打到數(shù)據(jù)庫。此時,可能引發(fā)數(shù)據(jù)庫服務癱瘓。

5.cpu占用高,影響其他服務:單個分片cpu占用率過高,其他分片無法擁有cpu資源,從而被影響。

 

三、測試過程中如何發(fā)現(xiàn)bigkey和hotkey

1.業(yè)務分析結合技術方案:

通常需要對業(yè)務場景做分析,結合技術方案去判斷是否會出現(xiàn)大key、熱key的問題。比如說:

(1)購物車場景,當一個購物車的key設計,沒有上限,沒有其他隨機值約束,僅使用了mid。這個時候就要注意,如果有個購物狂,一次加購5w件商品怎么辦?

(2)活動資格列表場景,當一個活動的資格查詢list被放入一個key,活動期間頻繁的查詢和操作。這個時候就要注意,list的數(shù)據(jù)量有多少?查詢資格的操作是否集中?如果集中,qps是多少?

2.借助redis命令來發(fā)現(xiàn):

查看bigkey:redis-cli -a 登錄密碼 --bigkeys

查看hotkey:redis-cli -a 登錄密碼 --hotkeys

例:bigkey

 

(圖片源數(shù)據(jù)來源于網(wǎng)絡)

 

3.借助工具:

(1)可使用redis可視化工具進行查看(例如:another redis desktop manager)

 

 

可視化的工具可以明確給出redis集群當下的信息,經(jīng)過簡要數(shù)據(jù)分析,便可觀測異常。

(2)借助市面上的開源工具(本文暫不對此深入探討)

redis-rdb-tools(附:https://Github.com/sripathikrishnan/redis-rdb-tools)

以上,是日常工作中對于發(fā)現(xiàn)redis緩存中bigkey和hotkey的思考,除上述工具和手段之外,還有很多公司針對業(yè)務特性自研了key檢測工具,歡迎分享和交流~~

 

參考文檔:

(1)  redis命令:Redis 命令參考 — Redis 命令參考

(2)  Github: https://github.com/sripathikrishnan/redis-rdb-tools

(3)  another redis desktop manager下載地址AnotherRedisDesktopManager 發(fā)行版 - Gitee.com

分享到:
標簽:Redis
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定