0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GaussDB(for Redis) 特性揭秘:大 key 治理

jf_94205927 ? 來源:jf_94205927 ? 作者:jf_94205927 ? 2024-03-28 22:06 ? 次閱讀

從 DBA 的視角看,大 Key 無疑是引起 Redis 線上問題的常見原因。為了解決大 Key 隱患,業(yè)務(wù)首先要遵守合理的開發(fā)規(guī)范,減少大 Key 的產(chǎn)生和訪問依賴。但有時大 Key 是在程序運行過程中悄悄產(chǎn)生的,讓人防不勝防。因此,一款可隨時在線診斷,且能主動預(yù)警,防患于未然的 Redis 服務(wù)產(chǎn)品顯得尤為重要。

作為由華為云精心打造的企業(yè)級 Redis,GaussDB(for Redis)提供了完備的大 Key 解決方案,支持大 Key 在線診斷、監(jiān)控預(yù)警、承載力強(qiáng)等能力,讓 DBA 如虎添翼。

GaussDB(for Redis)

支持大 Key 在線診斷

GaussDB(for Redis)采用計算、存儲分離的高可靠架構(gòu),每個計算節(jié)點上都部署有后臺任務(wù)。GaussDB(for Redis)通過后臺任務(wù)持續(xù)檢測分析存儲池中的大 key 情況,用戶執(zhí)行命令時直接取結(jié)果,不會影響線上業(yè)務(wù),跟業(yè)界阻塞式全量掃描方式相比,更安全。

wKgZomYFeOCAed07AAI8IiCcEsM153.png

用戶執(zhí)行 bigkeys 命令后,將直接從節(jié)點上獲取“答案”,不用全庫掃描引起不必要的性能影響。

wKgZomYFeOuASaplAARdBFoUhmE077.png

此外,GaussDB(for Redis)支持用戶自定義大 key 標(biāo)準(zhǔn),比如大于 1MB 的 string、大于 10000 個元素的 hash 類型等。該功能一經(jīng)推出,收獲了很多客戶和 DBA 小伙伴的認(rèn)可及點贊。

GaussDB(for Redis)

支持大 key 監(jiān)控預(yù)警

分享兩個真實案例:

1、業(yè)務(wù)周期性執(zhí)行“l(fā)range 0 -1”獲取 list key 的所有元素。但由于程序 bug,業(yè)務(wù)也同時在長期、緩慢地向這個 key 中持續(xù)追加,導(dǎo)致 key 越來越長。直到線上業(yè)務(wù)出問題,幾經(jīng)波折,才發(fā)現(xiàn)了這個危險的大 Key。

2、業(yè)務(wù)長期穩(wěn)定運行,有一天有新組件上線,線上業(yè)務(wù)開始不斷超時。幾經(jīng)排查,發(fā)現(xiàn)新組件對 Redis 執(zhí)行 hmset f1 v1 f2 v2……,一條寫入命令攜帶了長達(dá) 2 萬個參數(shù),嚴(yán)重影響了生產(chǎn)業(yè)務(wù)。

從 DBA 的角度,這類問題需要一個“大 Key 偵探”時刻盯防,一旦有對大 Key 的高危操作,立刻主動預(yù)警。

GaussDB(for Redis)設(shè)計了 10+監(jiān)控指標(biāo),提供“大 Key 偵探”的能力,例如:單個請求回包的最大元素個數(shù)(識別 lrange 0 -1 操作大 key 引起阻塞的場景)、單個請求攜帶的最大參數(shù)個數(shù)(識別 hmset 上萬元素批導(dǎo)引起阻塞的場景)……DBA 只需要根據(jù)多年經(jīng)驗,將這類指標(biāo)訂閱告警,即可在第一時間“抓住大 Key 案發(fā)現(xiàn)場”,將風(fēng)險扼殺于萌芽狀態(tài)。

GaussDB(for Redis)

對大 Key 的承載能力更強(qiáng)

即使在大 Key 存在的一些業(yè)務(wù)場景,GaussDB(for Redis)的表現(xiàn)也是遠(yuǎn)優(yōu)于開源 Redis 的。下面將介紹大 Key 經(jīng)常引起的一些問題:

1、大 key 引發(fā)了 CPU 100%,阻塞生產(chǎn)業(yè)務(wù)

在開源 Redis 中,大 key 容易引起 CPU 占用 100%,使生產(chǎn)業(yè)務(wù)受損,引起線上問題。這是因為開源 Redis 本身就是單線程,尤其在這種比較脆弱的架構(gòu)下使用大 key,更容易引起線程阻塞,從而影響整個實例。

GaussDB(for Redis)的多線程架構(gòu)天然就對大 key 更友好,不會有這個問題困擾。即使單個線程被個別大 Key 影響,整個 GaussDB(for Redis)實例包含數(shù)十、上百個線程,整體業(yè)務(wù)基本都不會受到干擾。

2、大 key 因個別分片帶寬高,被 Redis 頻繁“流控”

目前市面上有一些開源 Redis 是基于一個大的容器混合部署很多租戶的 Redis 進(jìn)程,但在這種架構(gòu)下,為了避免一個客戶的 Redis 影響其他客戶,往往會對客戶的 Redis 進(jìn)程進(jìn)行流量控制,當(dāng)某個客戶業(yè)務(wù)中對大 key 有較為頻繁的操作時,很容易觸發(fā)給客戶設(shè)定的該租戶的帶寬閾值并觸發(fā)流控,從而導(dǎo)致線上業(yè)務(wù)受損。

相比之下,GaussDB(for Redis)的每個分片都是一個獨立的容器,是客戶的獨享資源,更可靠,連接數(shù)、帶寬等資源不設(shè)主動流控,尤其是節(jié)點帶寬資源的“天花板”非常高。

3、大 key 導(dǎo)致傾斜,分片內(nèi)存占用不均勻

開源 Redis 集群中,存儲大 key 會導(dǎo)致內(nèi)存空間不均勻、消耗不均衡,大 key 所在分片有 OOM 風(fēng)險。

wKgaomYFePeAD17CAAK7QGdY_C0279.png

GaussDB(for Redis)采用高性能存儲池,不會對某個節(jié)點分片造成數(shù)據(jù)量的傾斜,支持大 key 可靠存儲,不會導(dǎo)致分片 OOM。

wKgaomYFeQOAY7nQAAQi8So7m3Q466.png

4、Redis 擴(kuò)容時要搬遷數(shù)據(jù),大 key 總引起問題

開源 Redis 擴(kuò)容時,由于涉及數(shù)據(jù)跨片搬遷,擴(kuò)容過程耗時久,存在訪問阻塞的風(fēng)險。如圖所示,因此開源 Redis 在有大 key 的情況下,擴(kuò)容必須謹(jǐn)慎!

wKgaomYFeSuAOiNMAAQlTIEv-MU291.png

GaussDB(for Redis)支持秒級無感擴(kuò)容,不論擴(kuò)容量,還是擴(kuò) CPU,都不需要搬遷數(shù)據(jù),因此也不受大 Key 影響,運維體驗極佳。

wKgZomYFeR2AANsSAATJrsXY5L0225.png

本文介紹了 GaussDB(for Redis)的大 Key 診斷、大 Key 預(yù)警特性,以及在大 Key 場景下如何解決開源 Redis 的穩(wěn)定性痛點,為客戶提供了高效可靠的大 Key 解決方案。未來,GaussDB(for Redis)將持續(xù)致力于開發(fā)更多好用的企業(yè)級特性,幫助客戶輕松運維,高效開發(fā)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3126

    瀏覽量

    42068
  • DBA
    DBA
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    7862
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    368

    瀏覽量

    10780
收藏 人收藏

    評論

    相關(guān)推薦

    Redis開源版與Redis企業(yè)版,怎么選用?

    點擊“藍(lán)字”關(guān)注我們數(shù)以千計的企業(yè)和數(shù)以百萬計的開發(fā)人員Redis開源版來構(gòu)建應(yīng)用程序。但隨著用戶數(shù)量、數(shù)據(jù)量和地區(qū)性的增加,成本、可擴(kuò)展性、運營和可用性等問題也隨之而來。Redis企業(yè)版
    的頭像 發(fā)表于 04-04 08:04 ?696次閱讀
    <b class='flag-5'>Redis</b>開源版與<b class='flag-5'>Redis</b>企業(yè)版,怎么選用?

    數(shù)據(jù)安全沒保障?GaussDB(for Redis) 為你保駕護(hù)航

    未知的 key,實際上可能面臨數(shù)據(jù)庫信息丟失和記錄篡改的風(fēng)險。 作為一個重視技術(shù)的團(tuán)隊,我們始終將用戶信息安全和使用體驗放在第一位。對于這次用戶使用開源 Redis 遇到的問題,我們盤點了 GaussDB(for
    的頭像 發(fā)表于 03-28 22:09 ?558次閱讀
    數(shù)據(jù)安全沒保障?<b class='flag-5'>GaussDB</b>(for <b class='flag-5'>Redis</b>) 為你保駕護(hù)航

    GaussDB(for Redis) 特性揭秘:多租戶管理

    華為云 GaussDB(for Redis)持續(xù)完善企業(yè)級增強(qiáng)特性,是名副其實的 "Redis Plus" ,其中很經(jīng)典的企業(yè)級特性是 多租
    的頭像 發(fā)表于 03-28 22:06 ?663次閱讀
    <b class='flag-5'>GaussDB</b>(for <b class='flag-5'>Redis</b>) <b class='flag-5'>特性</b><b class='flag-5'>揭秘</b>:多租戶管理

    GaussDB(for Redis) 游戲?qū)嵺`:玩家下線行為上報

    實現(xiàn)以上功能時,感知用戶下線行為延遲較大,導(dǎo)致上報時間不準(zhǔn)確。華為云 GaussDB(for Redis)作為一款企業(yè)級游戲數(shù)據(jù)庫,具備卓越的企業(yè)級能力,能及時上報用戶下線行為,并被廣泛應(yīng)用于排行榜等多種業(yè)務(wù)場景。 基于 Redis
    的頭像 發(fā)表于 03-28 22:03 ?452次閱讀

    MongoDB和Redis的技術(shù)特性

    Redis作為一個高性能的內(nèi)存數(shù)據(jù)存儲系統(tǒng),能夠提供快速的緩存機(jī)制,從而幫助應(yīng)用承受高并發(fā)請求,顯著提高系統(tǒng)響應(yīng)速度和吞吐量。這與國內(nèi)互聯(lián)網(wǎng)公司推崇的快速迭代和高用戶并發(fā)量的特點非常契合。
    的頭像 發(fā)表于 02-01 11:42 ?384次閱讀
    MongoDB和<b class='flag-5'>Redis</b>的技術(shù)<b class='flag-5'>特性</b>

    redis容器內(nèi)怎么查看redis日志

    redis是一款流行的開源內(nèi)存數(shù)據(jù)庫,常用于緩存、消息隊列、任務(wù)管理等場景。在使用redis時,了解如何查看redis日志對于排查問題、監(jiān)控性能和分析應(yīng)用程序行為非常重要。在本文中,我們將介紹在
    的頭像 發(fā)表于 12-05 10:10 ?2923次閱讀

    redis hash底層實現(xiàn)原理

    Redis是一個開源的內(nèi)存數(shù)據(jù)庫,使用鍵值對存儲數(shù)據(jù)。其中,Redis中的數(shù)據(jù)結(jié)構(gòu)之一就是哈希(Hash),它提供了一種將多個字段(Field)存儲在一個鍵(Key)中的方法。那么Redis
    的頭像 發(fā)表于 12-04 16:27 ?482次閱讀

    Java redis鎖怎么實現(xiàn)

    在Java中實現(xiàn)Redis鎖涉及到以下幾個方面:Redis的安裝配置、Redis連接池的使用、Redis數(shù)據(jù)結(jié)構(gòu)的選擇、實現(xiàn)分布式鎖的幾種方式等。 一、
    的頭像 發(fā)表于 12-04 10:47 ?910次閱讀

    Redis的分頁+多條件模糊查詢組合實現(xiàn)方案

    Rediskey-value類型的內(nèi)存數(shù)據(jù)庫,通過key直接取數(shù)據(jù)雖然很方便,但是并未提供像mysql那樣方便的sql條件查詢支持。因此我們需要借助Redis提供的結(jié)構(gòu)和功能去自己實
    的頭像 發(fā)表于 11-20 14:26 ?744次閱讀
    <b class='flag-5'>Redis</b>的分頁+多條件模糊查詢組合實現(xiàn)方案

    redis與mysql如何保持?jǐn)?shù)據(jù)一致性

    Redis是一款開源的高性能Key-Value存儲系統(tǒng),通常被用作緩存和數(shù)據(jù)存儲。它支持多種數(shù)據(jù)結(jié)構(gòu),并提供了豐富的功能,如事務(wù)、發(fā)布訂閱、Lua腳本等。Redis的內(nèi)存數(shù)據(jù)庫特性使
    的頭像 發(fā)表于 11-16 11:27 ?807次閱讀

    Redis 如何刪除數(shù)據(jù)

    閻王的處理時間會變得很長,而且處理繁忙,Redis 就會出現(xiàn)卡頓現(xiàn)象。 Redis 有三種策略刪除過期 Key 相關(guān)命令 expire key seconds # 過期時間為秒數(shù),
    的頭像 發(fā)表于 10-09 16:01 ?411次閱讀

    Redis持久化AOF原理學(xué)習(xí)

    原理 在學(xué)習(xí)AOF原理前,我們首先要了解 RESP (Redis的序列化協(xié)議) 從圖中可以看到客戶端在調(diào)用redis服務(wù)端時,傳入的命令和 key、value 都會通過 RESP 協(xié)議序列化為文本
    的頭像 發(fā)表于 10-09 15:02 ?325次閱讀
    <b class='flag-5'>Redis</b>持久化AOF原理學(xué)習(xí)

    Redis數(shù)據(jù)類型介紹

    Redis 作為一個內(nèi)存數(shù)據(jù)庫已經(jīng)被許許多多的公司使用,它的性能非常的優(yōu)秀,讀寫速度支持非??於抑С?10W 的 QPS 。今天我們就來學(xué)習(xí)下它的豐富的數(shù)據(jù)類型。 Redis 數(shù)據(jù)類型 Redis
    的頭像 發(fā)表于 10-09 10:53 ?688次閱讀
    <b class='flag-5'>Redis</b>數(shù)據(jù)類型介紹

    Redis是什么?簡述它的優(yōu)缺點?

    Redis是什么?簡述它的優(yōu)缺點? Redis本質(zhì)上是一個Key-Value類型的內(nèi)存數(shù)據(jù)庫,很像Memcached,整個數(shù)據(jù)庫加載在內(nèi)存當(dāng)中操作,定期通過異步操作把數(shù)據(jù)庫中的數(shù)據(jù)flush到硬盤
    的頭像 發(fā)表于 10-09 10:37 ?669次閱讀

    如何用Springboot整合Redis

    本篇文件我們來介紹如何用Springboot整合Redis。 1、Docker 安裝 Redis 1.1 下載鏡像 docker pull redis: 6 . 2 . 6 1.2 創(chuàng)建配置文件
    的頭像 發(fā)表于 10-08 14:56 ?487次閱讀
    如何用Springboot整合<b class='flag-5'>Redis</b>