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

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

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

本期作者 侯曉

嗶哩嗶哩高級測試開發工程師

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

 

一、什么是BigKey、HotKey?

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

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

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

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

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

 

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

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

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

 

二、服務中的bigkey和

hotkey會導致什么問題

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

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

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

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

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

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

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

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

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

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

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

 

三、測試過程中如何發現bigkey和hotkey

1.業務分析結合技術方案:

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

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

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

2.借助redis命令來發現:

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

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

例:bigkey

 

(圖片源數據來源于網絡)

 

3.借助工具:

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

 

 

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

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

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

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

 

參考文檔:

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

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

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

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

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

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

運動步數有氧達人2018-06-03

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

每日養生app2018-06-03

每日養生,天天健康

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

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